私が使用するアプリケーションはext4機能に依存しているため、ext4ファイルシステムを使用して圧縮ストレージが必要なプロジェクトをテストしようとしています。
Ext4での透過的な圧縮のための製品/安定したソリューションはありますか?
私が試したこと:
Ext4 over ZFSボリューム圧縮を有効にします。これは実際に悪影響を及ぼしました。 lz4圧縮を有効にしてZFSボリュームを作成し、ext4ファイルシステムを/ dev/zvol /に作成しようとしましたが、zfsボリュームは実際の使用量の2倍を示し、圧縮による影響はないようです。
# du -hs /mnt/test
**1.1T** /mnt/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 15.2T 2.70G 290K /pool
pool/test 15.2T 13.1T **2.14T** -
ZFS作成コマンド
zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test
Fusecompress:機能しているようですが、100%安定していません。代替案を探しています。
LessFS: Lessfsをext4と組み合わせて使用することは可能ですか?私はまだ試していませんが、ユーザーの洞察に興味があります。
1つの大きな問題:真の透明度ではない
Fusecompressで見た問題は割り当てです。たとえば、ファイルシステムで圧縮を有効にした場合、必ずしもエンドユーザーではなく、圧縮によるメリットをシステムに持たせたいと思います。ユーザーに対して1 GBの割り当てを有効にし、圧縮率を1.5にした場合、1 GBのデータと圧縮の恩恵を受けるシステムではなく、1.5 GBのデータをアップロードできます。これはdf -hでも表示されるようです。クォータに対して透過的な圧縮を行うソリューションはありますか?
私は ZFS on Linux をボリュームマネージャーとして使用し、従来のファイルシステムに追加の保護と機能を提供する手段として使用しています。これには、ブロックレベルのスナップショット、レプリケーション、重複排除、圧縮、および 高度なキャッシング をXFSまたはext4ファイルシステムに取り込むことが含まれます。
別の説明については、 https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ を参照してください。
私の最も一般的な使用例では、ZFS zvol機能を利用して、既存のzpoolにスパースボリュームを作成します。そのzvolのプロパティは、通常のZFSファイルシステムと同じように設定できます。この時点で、圧縮タイプ、ボリュームサイズ、キャッシュ方法などのプロパティを設定できます。
このzvolを作成すると、選択したファイルシステムでフォーマットできるブロックデバイスがLinuxに提示されます。 fdisk
またはparted
を使用してパーティションを作成し、mkfs
を使用して完成したボリュームを作成します。
これをマウントすると、基本的に、zvolとそのすべてのプロパティを備えたファイルシステムが作成されます。
これが私のワークフローです...
4つのディスクで構成されるzpoolを作成します:
使用しているディスクのタイプにashift=12
ディレクティブが必要です。この場合、zpool名は「vol0」です。
zpool create -o ashift = 12 -f vol0ミラーscsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042ミラーscsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
初期zpool設定を設定します:
ディスクをより大きなドライブに交換したり、ZFSミラー設定でプールを拡張したりする場合に備えて、autoexpand=on
をzpoolレベルで設定します。パフォーマンスが低く、zpoolを拡張できないため、通常はZFS raidz1/2/3を使用しません。
zpool set autoexpand=on vol0
初期zfsファイルシステムプロパティを設定します:
新規ZFSインストールの場合は lz4
圧縮アルゴリズム を使用してください。そのままにしておいても大丈夫です。
zfs set compression=lz4 vol0
zfs set atime=off vol0
ZFS zvolを作成します:
Linux上のZFSの場合、大きなブロックサイズを使用することが非常に重要です。 -o volblocksize=128k
は、ここでは絶対に不可欠です。 -s
オプションはスパースzvolを作成し、必要になるまでプール領域を消費しません。データをよく知っている場合は、ここでオーバーコミットできます。この場合、プールには約444GBの使用可能なディスク領域がありますが、800GBのボリュームをXFSに提供しています。
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
パーティションzvolデバイス:
(最初のzvolの場合は/ dev/zd0、後続のzvolsの場合は/ dev/zd16、/ dev/zd32などにする必要があります)
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
ファイルシステムを作成してマウントします:
新しく作成されたパーティション/ dev/zd0p1上のmkfs.xfsまたはext4。
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
blkid
でUUIDを取得し、/etc/fstab
を変更します。
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
新しいファイルシステムをマウントします。
mount /ppro/
結果...
[root@Testa ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sde2 20G 8.9G 9.9G 48% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sde1 485M 63M 397M 14% /boot
/dev/sde7 2.0G 68M 1.9G 4% /tmp
/dev/sde3 12G 2.6G 8.7G 24% /usr
/dev/sde6 6.0G 907M 4.8G 16% /var
/dev/zd0p1 800G 398G 403G 50% /ppro <-- Compressed ZFS-backed XFS filesystem.
vol0 110G 256K 110G 1% /vol0
ZFSファイルシステムのリスト。
[root@Testa ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol0 328G 109G 272K /vol0
vol0/pprovol 326G 109G 186G - <-- The actual zvol providing the backing for XFS.
vol1 183G 817G 136K /vol1
vol1/images 183G 817G 183G /images
ZFS zpoolリスト。
[root@Testa ~]# zpool list -v
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol0 444G 328G 116G 73% 1.00x ONLINE -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322043 - - - -
scsi-AccOW140403AS1322042 - - - -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322013 - - - -
scsi-AccOW140403AS1322044 - - - -
ZFS zvolプロパティ(referenced
、compressratio
およびvolsize
)に注意してください)。
[root@Testa ~]# zfs get all vol0/pprovol
NAME PROPERTY VALUE SOURCE
vol0/pprovol type volume -
vol0/pprovol creation Sun May 11 15:27 2014 -
vol0/pprovol used 326G -
vol0/pprovol available 109G -
vol0/pprovol referenced 186G -
vol0/pprovol compressratio 2.99x -
vol0/pprovol reservation none default
vol0/pprovol volsize 800G local
vol0/pprovol volblocksize 128K -
vol0/pprovol checksum on default
vol0/pprovol compression lz4 inherited from vol0
vol0/pprovol readonly off default
vol0/pprovol copies 1 default
vol0/pprovol refreservation none default
vol0/pprovol primarycache all default
vol0/pprovol secondarycache all default
vol0/pprovol usedbysnapshots 140G -
vol0/pprovol usedbydataset 186G -
vol0/pprovol usedbychildren 0 -
vol0/pprovol usedbyrefreservation 0 -
vol0/pprovol logbias latency default
vol0/pprovol dedup off default
vol0/pprovol mlslabel none default
vol0/pprovol sync standard default
vol0/pprovol refcompressratio 3.32x -
vol0/pprovol written 210M -
vol0/pprovol snapdev hidden default
また、ext4ファイルシステムで破棄を有効にする必要があります。破棄しないと、zfsはファイルが削除されてもスペースを再利用しません。これにより、ext4ファイルシステムが報告する内容とzfsボリュームが報告する内容の間に大きなスペースの不一致が生じる可能性があります。