為什麼當我建立 1GB 檔案時,ZFS RAIDZ2 僅使用 2GB 數據

為什麼當我建立 1GB 檔案時,ZFS RAIDZ2 僅使用 2GB 數據

我創建了一個 ZFS RAIDZ2 / Raid 6 檔案系統,我相信它將在 2 個磁碟上儲存奇偶校驗。

root@zfs-demo:/data# zpool status
  pool: data
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        data        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

我有一個 1GB 的文件

root@zfs-demo:/data# ls -alh
total 1023M
drwxr-xr-x  2 root root    3 Dec 17 18:22 .
drwxr-xr-x 19 root root 4.0K Dec 17 18:10 ..
-rw-r--r--  1 root root 1.0G Dec 17 18:22 1GB.bin

我認為兩個奇偶校驗磁碟意味著我正在儲存檔案本身 + 兩批奇偶校驗 = 1 GB 檔案總共 3 GB 的儲存空間,但只分配了 2GB。

root@zfs-demo:/data# zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
data  39.5G  2.01G  37.5G        -         -     0%     5%  1.00x    ONLINE  -

答案1

使用四分之二的磁碟進行冗餘,您可以簡單地將用戶資料加倍:兩個磁碟儲存原始數據,而另外兩個磁碟上的相同空間用於冗餘資料。奇偶校驗實際上使用條帶化分佈在所有磁碟上,但這不會改變已佔用的空間。

對於磁碟數量,您可以使用 RAID 1/鏡像,具有相同的空間效率,但吞吐量效率更高(且彈性較低,正如 Romeo Ninov 所評論的那樣)。 RAID-Z2 或 RAID 6 透過更多磁碟變得更有效率:總共有 10 個磁碟,其中 8 個可以有效用於數據,但仍只有 2 個用於冗餘。

答案2

情況是這樣的(解釋一下就明白了,非常簡單):

假設 ZFS 使用 512MB 區塊。因此,您在磁碟1 512MB 上儲存(檔案的第一部分),在磁碟2 上儲存下一個512MB,在奇偶校驗1 上儲存下一個512MB 區塊(例如,您只能使用磁碟1 和奇偶校驗1復原檔案),在奇偶校驗上2 您儲存另外 512MB,以便可以使用磁碟 1 和奇偶校驗 2 復原檔案。

以下是獲取整個文件所需的啟動和運行:

  • d1+d2
  • d1+p1
  • d1+p2
  • d2+p1
  • d2+p2
  • p1+p2

例如,如果您有 5 個磁碟 (RAIDZ2) 並且區塊大小為 333MB,那麼您將在磁碟 1、2、3、奇偶校驗 1 和 2 上擁有此類區塊。

相關內容