Filesystems
如何遷移 ZFS 文件系統以使用壓縮?
問題在底部。
我有幾個ZFS文件系統我想使用ZFS壓縮,但是由於啟用壓縮只會影響寫入文件系統的新數據,所以我想寫一個可以遷移文件系統的腳本,所以所有數據都被壓縮了。
這是我的測試嘗試
du -h /tmp/dump.txt zfs create -p tank3/xtest1/fs cp /tmp/dump.txt /tank3/xtest1/fs zfs list | grep xtest zfs create tank3/xtest2 zfs set compression=lzjb tank3/xtest2 zfs inherit compression tank3/xtest2 zfs snapshot tank3/xtest1/fs@snap zfs send tank3/xtest1/fs@snap | zfs receive tank3/xtest2/fs zfs get compression tank3/xtest2/fs zfs list | grep xtest zfs destroy -r tank3/xtest1 zfs destroy -r tank3/xtest2 echo "test 2" zfs create tank3/xtest2 zfs set compression=lzjb tank3/xtest2 zfs list | grep xtest cp /tmp/dump.txt /tank3/xtest2 zfs list | grep xtest zfs get compressratio tank3/xtest2 zfs destroy -r tank3/xtest2
這使
344M /tmp/dump.txt tank3/xtest1 575K 6.38T 288K /tank3/xtest1 tank3/xtest1/fs 288K 6.38T 288K /tank3/xtest1/fs NAME PROPERTY VALUE SOURCE tank3/xtest2/fs compression off default tank3/xtest1 344M 6.38T 304K /tank3/xtest1 tank3/xtest1/fs 344M 6.38T 344M /tank3/xtest1/fs tank3/xtest2 344M 6.38T 288K /tank3/xtest2 tank3/xtest2/fs 344M 6.38T 344M /tank3/xtest2/fs test 2 tank3/xtest2 288K 6.38T 288K /tank3/xtest2 tank3/xtest2 288K 6.38T 288K /tank3/xtest2 NAME PROPERTY VALUE SOURCE tank3/xtest2 compressratio 1.00x -
在第一個測試中,我預計複製會在創建時壓縮數據,
tank3/xtest2/fs
但新創建的文件系統在使用發送/接收接縫時不會繼承壓縮。在測試 2 中,我看不到 344MB 文件佔用任何空間。
據我所知,壓縮不起作用。
問題
為什麼我會看到這些奇怪的結果?
我應該如何遷移未壓縮的文件系統進行壓縮?
更新
添加
compressratio
了顯示未進行壓縮的屬性。dump.txt
可以壓縮到 190MB。
儘管
dump.txt
事實證明它是高度可壓縮的,但由於某種原因,zfs 不會壓縮它。用其他數據再次重做我的實驗,事實證明發送/接收會壓縮數據。在這裡,我在 zpool 上設置了壓縮,因此所有文件系統都會繼承它。我在這裡也使用了 Linux,但這沒關係。
# dd if=/dev/zero of=/mnt/dat0/zpool1 bs=1M count=1000 # dd if=/dev/zero of=/mnt/dat0/zpool2 bs=1M count=1000 # service zfs-fuse restart # zpool create zpool1 /mnt/dat0/zpool1 # zpool create zpool2 /mnt/dat0/zpool2 # zfs set compression=on zpool1 # zfs create zpool1/fs1 # zfs create zpool2/fs2 # cp -r /etc/ /var/log /zpool2/fs2/ # zfs snapshot zpool2/fs2@snap # zfs send zpool2/fs2@snap | zfs receive zpool1/fs2 # zfs get compressratio zpool1/fs2 NAME PROPERTY VALUE SOURCE zpool1/fs2 compressratio 4.75x -
複製數據。
就這些。
您的範例中有很多缺失的輸出,但這沒關係。將數據移動到壓縮文件系統中唯一需要做的就是通過複製、移動或填充新文件系統來重寫數據。
通過在池級別啟用壓縮來避免將來出現問題,以便新文件系統繼承它。另外,使用
lz4
壓縮標誌。一般比較好。