我想創建一個有 4 個磁碟的 zfs raidz2。我知道這會「浪費」至少 50% 的空間,但我的目標是對磁碟故障具有較高的容忍度。不建議為 raidz2 使用 5 個磁碟,6 個磁碟對我來說太昂貴且不必要。我將擁有 3 TB(或可能 4 TB)磁碟,所有磁碟都有 4k 磁區和 512 位元組模擬。
我讀過很多關於 zfs 和 raidz2 的內容,但我開始感到困惑。
我應該對磁碟進行分割嗎? 我讀到建立分割區是一個好主意,以便讓作業系統知道磁碟不為空。分割區還可以幫助對齊 4k 磁區。
GPT 還是 MBR?據我了解,GPT 是 3 TB 磁碟(及更大)的必備條件。
我應該如何建立分區?這會給我正確對齊的分區嗎?
sudo parted --align optimal /dev/sdX mklabel gpt mkpart primary 1 0% 3TB
附加問題:創建的分區有多大mkpart primary 1 0% 3TB
?那將會3*10^12 - 4096 byte
?
我的目的是不使用磁碟的完整大小,而是將自己限制為 3 TB,以便能夠用不同型號替換故障的磁碟機。
ashift=12
如果我有對齊的分區,我還需要嗎?是不是沒用?它會以某種方式傷害我嗎?
條帶尺寸怎麼樣?我需要修改它嗎?如果我使用 5 個磁碟而不是 4 個磁碟會怎樣?
還有什麼我該考慮的嗎?
答案1
如果您的磁碟報告錯誤的值,則需要手動設定 ashift,這是過渡期內所有磁碟的情況(內部 4K,邏輯 512) - 較早的磁碟報告正確的 512,較晚的磁碟報告正確的 4k。當然,您始終可以指定它,它只是覆蓋磁碟本身向系統報告/建議的內容。
如果您不確定,您也可以建立一個池,記下可用大小,然後銷毀它,將所有磁碟上的 ashift 設定為 12,再次建立它並比較大小。如果它們相等,則您的磁碟的內容是誠實的。
只有當您的磁碟無法正確識別或您希望磁碟大小小於可能的大小時,才需要對磁碟進行分割。
答案2
Linux 上的 ZFS 會自動對磁碟進行分割。早些時候,它沒有這樣做。它看起來像這樣:
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 2E55AB8A-8B22-494E-A971-B6D639BA14B1
Device Start End Sectors Size Type
/dev/sdb1 2048 1953507327 1953505280 931.5G Solaris /usr & Apple ZFS
/dev/sdb9 1953507328 1953523711 16384 8M Solaris reserved 1
此外,它可能會ashift
自動使用正確的值。我的SSD有13個,上面的HDD有12個,正如預期的那樣。
只需執行以下操作:
zpool create tank raidz2 sda sdb sdc sdd
然後檢查zdb
是否ashift
正確。