16Mファイルがあります。
これを含むZFSファイルシステムのスナップショットを撮りました。
同じデータでファイルを上書きする場合、ZFSはファイル内のすべてのブロックの2つのコピーを保存する必要がありますか?
ベストアンサー1
はい、ファイルセットからスナップショットを作成すると、ZFSは同じファイルに追加のスペースを割り当てます。
まず、空のファイルセットを作成してコピーするファイルを準備します。簡単な理由で、圧縮シャットダウンされ、プールは何もせずに単一のディスクに作成されます。レズまたは鏡。
[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
ファイルセットは現在合計32 MBを占め、16 MBはファイルセットにtank/test
、16 MBはスナップショットに分割されますtank/test@1
。また、出力にはzpool list
ディスクに32MBが割り当てられているとマークされています。
繰り返すとコピーとスナップショットを撮るUSEDの総量はtank/test
さらに増えるでしょう。
修正する
ありがとう、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の重複排除機能が改善されていると思います。