xfs on lvm on hardware RAID: 參數正確嗎?
我在硬體 RAID6 中有 10 個磁碟,每個磁碟 8 TB(因此,8 個數據磁碟 + 2 個奇偶校驗)。在回答了一個非常相似的問題之後,我希望能夠自動檢測所有必要的參數。但是,在最後創建 XFS 文件系統時,我得到了
# mkfs.xfs /dev/vgdata/lvscratch meta-data=/dev/vgdata/lvscratch isize=256 agcount=40, agsize=268435455 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=10737418200, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=521728, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
這看起來像沒有使用條帶化。由於我在不同網站上找到的不同術語(條帶大小,條帶大小,條帶塊,…),我想問一下我是否正確設置了手動參數。
RAID 6 的條帶大小為 256KB:
# ./storcli64 /c0/v1 show all | grep Strip Strip Size = 256 KB
因此,條帶大小為 8*256KB = 2048KB = 2MB。它是否正確?根據這個(如果我理解正確的話),
pvcreate
必須使用條帶(或塊)大小作為參數dataalignment
:# pvcreate --dataalignment 256K /dev/sdb Physical volume "/dev/sdb" successfully created
請注意,我使用了沒有分區的整個 RAID 設備。現在一個
# vgcreate vgdata /dev/sdb Volume group "vgdata" successfully created
預設 PE 大小為 4MB 應該沒問題,因為它是條帶大小 2MB 的倍數。正確的?
現在,vgroup 的一部分被分配給一個邏輯卷:
# lvcreate -L 40T vgdata -n lvscratch Logical volume "lvscratch" created.
最後,創建了文件系統,但現在使用了正確的參數(條帶大小為 2MB,條頻寬度為 8):
# mkfs.xfs -d su=2048k,sw=8 /dev/vgdata/lvscratch meta-data=/dev/vgdata/lvscratch isize=256 agcount=41, agsize=268434944 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=10737418240, imaxpct=5 = sunit=512 swidth=4096 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=521728, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
這種方法正確嗎?對於邏輯卷或卷組的擴展,有什麼需要注意的嗎?我想如果卷組將使用另一個 RAID6 系統進行擴展,則條帶大小應該等於目前的 RAID6。
編輯:我的困惑似乎主要是基於與條帶相關的術語的不同用法。我的 RAID 控制器 LSI 或 Avago 的製造商以下列方式定義術語:
條紋寬度
條頻寬度是實施條帶化的驅動器組中涉及的驅動器數量。例如,具有磁碟條帶化的四磁碟驅動器組的條頻寬度為四。
條紋尺寸
條帶大小是 RAID 控制器跨多個驅動器寫入的交錯數據段的長度,不包括奇偶校驗驅動器。例如,考慮一個包含 64 KB 磁碟空間的條帶,並且在條帶中的每個磁碟上都有 16 KB 的數據。在這種情況下,條帶大小為 64 KB,條帶大小為 16 KB。
帶材尺寸
條帶大小是位於單個驅動器上的條帶部分。
在操作繼續在下一個磁碟上之前寫入或從磁碟讀取的順序數據段通常稱為塊、跨度或條帶單元,而它們形成單個條帶操作的邏輯組稱為條帶或條帶。一個塊(條帶單元)中的數據量,通常以字節為單位,被稱為塊大小、跨度大小、條帶大小、條帶深度或條帶長度。陣列中數據磁碟的數量有時稱為條頻寬度,但也可能指條帶內的數據量。
一個步長中的數據量乘以陣列中數據磁碟的數量(即,條帶深度乘以條頻寬度,在幾何類比中將產生一個區域)有時稱為條帶大小或條頻寬度。當數據塊分佈在多個陣列(可能是系統中的所有驅動器)上時,就會發生寬條帶化。當數據塊分佈在單個陣列中的驅動器上時,就會出現窄條帶化。
即使在 Wikipedia 上面的文字中,條紋大小也有兩種不同的含義。但是,我現在想,在創建 xfs 文件系統時,必須將儲存在單個驅動器上的單個塊的大小作為參數提供給 su。這個,它應該
mkfs.xfs -d su=256k,sw=8
在上面的命令中。正確的?
XFS 手冊頁沒有使用“條帶大小”和“條帶大小”,而是分別使用術語“條帶單元”和“條頻寬度”。
這使得解碼
mkfs.xfs(8)
手冊頁中令人困惑的文本成為可能:sunit=value This is used to specify the stripe unit for a RAID device or a logical volume. The value has to be specified in 512-byte block units. Use the su subop‐ tion to specify the stripe unit size in bytes. This suboption ensures that data allocations will be stripe unit aligned when the current end of file is being extended and the file size is larger than 512KiB. Also inode allocations and the internal log will be stripe unit aligned. su=value This is an alternative to using sunit. The su sub‐ option is used to specify the stripe unit for a RAID device or a striped logical volume. The value has to be specified in bytes, (usually using the m or g suffixes). This value must be a multiple of the filesystem block size.
因此,當您的陣列報告條帶大小為 256KiB 時,您可以指定
su=256K
或sunit=512
(因為 512 512 字節塊等於 256KiB)。swidth=value This is used to specify the stripe width for a RAID device or a striped logical volume. The value has to be specified in 512-byte block units. Use the sw suboption to specify the stripe width size in bytes. This suboption is required if -d sunit has been specified and it has to be a multiple of the -d sunit suboption. sw=value suboption is an alternative to using swidth. The sw suboption is used to specify the stripe width for a RAID device or striped logical volume. The value is expressed as a multiplier of the stripe unit, usu‐ ally the same as the number of stripe members in the logical volume configuration, or data disks in a RAID device. When a filesystem is created on a logical volume device, mkfs.xfs will automatically query the logi‐ cal volume for appropriate sunit and swidth values.
對於 10 個心軸(8 個數據,2 個奇偶校驗),您可以指定
sw=8
(數據心軸)或swidth=2M
(條帶大小乘以數據心軸)。注意,
xfs_info
並mkfs.xfs
解釋sunit
為swidth
以 512B 扇區為單位指定;然而,不幸的是,這不是他們報告的單位。xfs_info
並mkfs.xfs
以基本塊大小 ( ) 的倍數bsize
而不是 512B 扇區報告它們。TL;博士:
指定這些的最簡單方法通常是通過條帶尺寸和錠數,即
su=
條帶尺寸和sw=
錠數。