Linux 上の ZFS の圧縮と重複排除の順序

Linux 上の ZFS の圧縮と重複排除の順序

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 バージョンは暗号化をサポートしていません。しかし、異なるデータセットを暗号化すると重複排除が損なわれる可能性もあります。暗号化に関する情報:参考文献

関連情報