ext4と組み合わせた透過圧縮ファイルシステム


26

使用しているアプリケーションはext4機能に依存しているため、ext4ファイルシステムを使用して圧縮ストレージを必要とするプロジェクトをテストしようとしています。

ext4で透過的な圧縮を行うための生産/安定ソリューションはありますか?

私が試したもの:

圧縮が有効なZFSボリューム上のExt4。これは実際に悪影響を及ぼしました。lz4圧縮を有効にしてZFSボリュームを作成し、/ dev / zvol / ...にext4ファイルシステムを作成しようとしましたが、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: ext4と組み合わせてLessfsを使用することは可能ですか?私はまだ試していませんが、ユーザーの洞察に興味があります。

1つの大きな問題:真の透明性ではない

fusecompressで見た問題はクォータです。たとえば、ファイルシステムで圧縮を有効にした場合、必ずしもエンドユーザーではなく、システムが圧縮の恩恵を受けることを望みます。圧縮率が1.5のユーザーに対して1 GBのクォータを有効にすると、1 GBのデータと圧縮の恩恵を受けるシステムではなく、1.5 GBのデータをアップロードできます。これはdf -hでも表示されるように見えました。クォータに対して透過的な圧縮を行うソリューションはありますか?


確かに。OS /ディストリビューション/バージョンと、保存するデータの性質に関する詳細をリストしてください。
ewwhite 14

ハードウェアの詳細も。
ewwhite 14

1
ソフトウェアRAID6の@ewwhite 8x3TB。データは、他のサーバーからのrsyncedバックアップなので、データタイプとさまざまなエンドユーザー、ドキュメントなどが混在します。CentOS6.5 x64。
user235918 14

これが本当に必要ですか?多くの大きなスパースファイルがありますか?最近のディスク容量は安価です。
アンドリューシュルマン14

@AndrewSchulman:圧縮を利用することは、私の計算からより良い方法です。追加のディスクとそれらをサポートするコントローラーのコストは、CPUのコストを上回ります。
user235918

回答:


27

Linux上のZFSをボリュームマネージャーとして使用し、従来のファイルシステムに追加の保護と機能を提供する手段として使用しています。これには、ブロックレベルのスナップショット、レプリケーション、重複排除、圧縮、および高度なキャッシングを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 mirror scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 mirror scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044

初期のzpoolの設定を設定します。
私はセットautoexpand=on私が今までより大きなドライブにディスクを交換したり、中にプールを展開する場合には、zpoolレベルでのZFSミラーのセットアップ。パフォーマンスが低く、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の使用可能なディスク領域がありますが、XFSに800GBのボリュームを提供しています。

zfs create -o volblocksize=128K -s -V 800G vol0/pprovol

パーティションzvol装置:
最初zvolために/ dev / ZD0であるべきである;の/ dev / zd16は、/ dev / ZD32、等後続zvols用

fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)

ファイルシステムを作成してマウントします:
mkfs.xfsまたはext4の新しく作成されたパーティション/ dev / zd0p1に。

mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1

でUUIDを取得しblkidて変更し/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プロパティ(およびに注意してくださいreferencedcompressratiovolsize)。

[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

なぜzvolをパーティション分割するのですか?直接使用することはできませんか?
マイケルハンプトン

3
@MichaelHampton主に調整と一貫性のため。また、基礎となるボリュームを拡張する場合、柔軟性が必要です。ここにはいくつかの抽象化層があります。これは、/dev/sdbvs を使用する引数に似ています/dev/sdb1
ewwhite

1
情報ありがとうございます。ここで多くの良いアドバイス。私はそれをテストするつもりです。
user235918 14

2
@MichaelHamptonところで、最近では、特に仮想マシンの場合、もうパーティション分割はしません。
ewwhite

1
このセットアップのZFSレイヤーの追加のリソースコスト(RAM、CPU)について教えてください。
Sz。

4

また、ext4ファイルシステムで破棄を有効にする必要があります。廃棄しない場合、zfsはファイルが削除されたときにスペースを再利用しません。これにより、ext4ファイルシステムが報告する内容とzfsボリュームが報告する内容との間に大きなスペースの不一致が生じる可能性があります。


4
Red Hatは、パフォーマンスへの影響があるため、discard mountオプション(ext4またはxfsを使用)でこれをオンラインで行うことを推奨していません。fstrimコマンドを定期的に実行する方が簡単です。
ewwhite 14

パフォーマンスに影響を与えるマウントの破棄に関するコメント:これは、古い低品質のSSDに当てはまります。新しいものには当てはまりません。
Stoat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.