
Linux 上の ZFS の ZFS ファイルシステムにデータが書き込まれる順序は何ですか?
私が見つけた唯一の具体的な文書はoracle.com/docs/cd/E36784_01/html/E36835/gkknx.html を参照してください。言う;When a file is written, the data is compressed, encrypted, and the checksum is verified. Then, the data is deduplicated, if possible.
しかし、それが真実であれば、dedup は異なる圧縮アルゴリズムで圧縮されたブロックを重複排除しないことになります。
mysqlf をテストしたところ、順序は次のようになると思いますdedup, compress, encrypt
。
私のテスト設定:
zpool create tank /dev/sdb
zfs create tank/lz4
zfs create tank/gzip9
zfs set compression=lz4 tank/lz4
zfs set compression=gzip-9 tank/gzip9
zfs set dedup=on tank
出力zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 106K 19,3G 19K /tank
tank/gzip9 19K 19,3G 19K /tank/gzip9
tank/lz4 19K 19,3G 19K /tank/lz4
ランダムファイルを生成するdd if=/dev/urandom of=random.txt count=128K bs=1024
131072+0 Datensätze ein
131072+0 Datensätze aus
134217728 Bytes (134 MB) kopiert, 12,8786 s, 10,4 MB/s
空のプールでの zpool list の出力:
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 19,9G 134K 19,9G - 0% 0% 1.00x ONLINE -
次に、異なる圧縮アルゴリズムを使用してファイルをデータセットにコピーします。
cp random.txt /tank/lz4
cp random.txt /tank/gzip9
zfs list
コピー後の出力:
NAME USED AVAIL REFER MOUNTPOINT
tank 257M 19,1G 19K /tank
tank/gzip9 128M 19,1G 128M /tank/gzip9
tank/lz4 128M 19,1G 128M /tank/lz4
zpool list
コピー後の出力:
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 19,9G 129M 19,7G - 0% 0% 2.00x ONLINE -
重複排除率は2.0同じファイルを異なるデータセットにコピーした後。私の意見では、これは重複排除がデータ圧縮と暗号化の前にブロックします。
これが正しいかどうか誰か確認してもらえますか?
答え1
結局、oracle.com/docs/cd/E36784_01/html/E36835/gkknx.html を参照してください。は正しい。
ファイルが書き込まれると、データは圧縮され、暗号化され、チェックサムが検証されます。その後、可能であれば、データの重複が排除されます。
ランダム ファイルに関する私の想定は間違っていました。ZFS は、特定の最小圧縮率を達成できない場合、圧縮を中止するようです。
引用元https://wiki.illumos.org/display/illumos/LZ4+圧縮
注目すべきもう 1 つの点は、LZ4 の非圧縮データに対するパフォーマンスが非常に高いことです。これは、LZ4 が予想される最小圧縮率 (ZFS では 12.5%) を満たせない場合にトリガーされる「早期中止」メカニズムを組み込むことによって実現されます。
テストのために、ファイルシステムからテキストファイルを作成しましたfind / >> tree.txt
。
ファイルを両方のデータセットにコピーした後、次のzpool get dedupratio
結果が返されました:
NAME PROPERTY VALUE SOURCE
tank dedupratio 1.00x -
重複排除は実際にはこの書き込みチェーンの最後の部分です。異なる圧縮アルゴリズムを選択すると、重複排除率が低下します。
残念ながら、私の ZoL バージョンは暗号化をサポートしていません。しかし、異なるデータセットを暗号化すると重複排除が損なわれる可能性もあります。暗号化に関する情報:参考文献