Zfs
將相同的數據寫入 ZFS 下的文件塊會佔用快照中的空間嗎?
我有一個 16M 的文件。
我拍攝了包含它的 ZFS 文件系統的快照。
如果我用相同的數據覆蓋文件,ZFS 是否需要儲存文件所有塊的兩個副本?
是的,如果從文件集中獲取快照,ZFS 將為同一文件分配額外空間。
首先讓我們創建一個空文件集並準備一個要從中複製的文件。為簡單起見,關閉了壓縮,並在沒有任何**raidz或mirror的單個磁碟上創建了池。
[root@localhost ~]# dd if=/dev/urandom of=/tmp/testfile bs=16M count=1 1+0 records in 1+0 records out 16777216 bytes (17 MB) copied, 0.113345 s, 148 MB/s [root@localhost ~]# zpool create tank sdd [root@localhost ~]# zfs create tank/test
可以使用 來查看磁碟上使用的空間
zpool list
。[root@localhost]# zpool list tank NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT tank 9.94G 182K 9.94G - 0% 0% 1.00x ONLINE -
現在將文件複製到 ZFS 文件集,創建快照並查看使用的空間。
[root@localhost ~]# /bin/cp /tmp/testfile /tank/test/ [root@localhost ~]# zfs list -t all -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 16.0M 9.61G 16.0M /tank/test [root@localhost ~]# zfs snapshot tank/test@1 [root@localhost ~]# zfs list -t all -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 16.0M 9.61G 16.0M /tank/test tank/test@1 0B - 16.0M -
好的,再次將相同的文件複製到 ZFS 文件集中的相同位置,並再次查看使用的空間。
[root@localhost ~]# /bin/cp -f /tmp/testfile /tank/test/ [root@localhost ~]# zfs list -t all -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 32.0M 9.60G 16.0M /tank/test tank/test@1 16.0M - 16.0M -
池中使用的磁碟空間也增長到 32MB。
[root@localhost tank]# zpool list tank NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT tank 9.94G 32.2M 9.91G - 0% 0% 1.00x ONLINE -
如您所見,
tank/test
文件集現在總共佔 32MB,分為文件集中的 16MBtank/test
和tank/test@1
快照中的 16MB。的輸出還zpool list
顯示了磁碟上的 32MB 分配。如果您重複複製並拍攝快照,則
tank/test
USED 總量會進一步增長。更新
感謝@Andrew Henle 的提問。必須更新我上面的答案,並將繼續下面的重複數據刪除內容。
讓我們使用啟用了重複數據刪除的文件集再次執行此操作。
[root@localhost]# zfs destroy -r tank/test [root@localhost]# zfs create tank/test-dedup [root@localhost]# zfs set dedup=on tank/test-dedup
我將跳過這裡的單個步驟,只添加已用空間概述的輸出。
[root@localhost ~]# zfs list -t all -r tank/test-dedup NAME USED AVAIL REFER MOUNTPOINT tank 32.3M 9.61G 24K /tank tank/test-dedup 32.1M 9.61G 16.0M /tank/test-dedup tank/test-dedup@1 16.0M - 16.0M - [root@localhost ~]# zpool list tank NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT tank 9.94G 16.3M 9.92G - 0% 0% 2.00x ONLINE -
啟用重複數據刪除後,仍報告快照使用額外大小,但正如您所見,
zpool list
重複數據刪除節省了磁碟空間並提供了 2 的重複數據刪除率。IIRC 通常不建議使用重複數據刪除,因為記憶體使用量很大並且會影響性能。我認為正在改進 ZFS 中的重複數據刪除功能。