Linuxの圧縮と重複排除の順序に関するzfs


4

Linux上のzfsでzfsファイルシステムに書き込まれるデータの順序は何ですか?

私が見つけた唯一の特定の文書 http://docs.oracle.com/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.

しかし、それが真実であれば、重複排除は異なる圧縮アルゴリズムで圧縮されたブロックを重複排除しません。

私は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リストの出力

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

それは結局のところ http://docs.oracle.com/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バージョンは暗号化をサポートしていません。しかし、異なるデータセットを暗号化すると重複排除も台無しになる可能性があるようです。暗号化に関する情報: https://docs.oracle.com/cd/E53394_01/html/E54801/gkkih.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.