31

透過圧縮が有効になっているbtrfsファイルシステムls -l上のファイルの圧縮サイズ (リストにあると思います) と非圧縮サイズを特定することはできますか?

4

7 に答える 7

7

ファイルごとに答えることができず、@ catlover2 がファイルシステムについて答えました。ただし、ディスク上のブロックサイズと(仮想)ファイルシステムのサイズを区別する必要があり、ファイルlsシステムduを超えることはできないため、使用されているディスクブロックの数に関する情報は提供されず、@jiliagre--apparent-sizeはここでは役に立ちません。

この質問をよりよく説明するために、単一の 23G ファイル btrfs ファイルシステムでテストを行いました。最初に解凍し、次に lzo 圧縮します。サンプル ファイルは仮想マシン イメージであり、圧縮レベルは 0.5 のみです。のみdfbtrfs filesystem df示し、圧縮を示すことができます。

$   lvcreate vg0 test_btrfs -L 30G
Logical volume "test_btrfs" created
$ mkfs.btrfs /dev/vg0/test_btrfs
...
fs created label (null) on /dev/vg0/test_btrfs
    nodesize 16384 leafsize 16384 sectorsize 4096 size 30.00GiB
$ mount /dev/vg0/test_btrfs /tmp/test_btrfs
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00
$ cp bigfile /tmp/test_btrfs
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=24.01GiB, used=22.70GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=23.64MiB
Metadata, single: total=8.00MiB, used=0.00
$ btrfs filesystem df /tmp/test_btrfs
... unchanged!
$ cd /tmp/test_btrfs/
$ ls -l bigfile
-rw------- 1 root root 24367940096 May  4 15:03 bigfile
$ du -B1 --apparent-size bigfile
24367940096 bigfile
$ du -B1 bigfile
24367943680 bigfile
$ btrfs filesystem defragment -c bigfile
$ ls -l bigfile
-rw------- 1 root root 24367940096 May  4 15:03 bigfile
$ du -B1 --apparent-size bigfile
24367940096 bigfile
$ du -B1 bigfile
24367943680 bigfile
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=24.01GiB, used=12.90GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=39.19MiB
Metadata, single: total=8.00MiB, used=0.00
$ df -BG /tmp/test_btrfs
Filesystem                 1G-blocks  Used Available Use% Mounted on
/dev/mapper/vg0-test_btrfs       30G   13G       16G  47% /tmp/test_btrfs

@gandalf3 の質問にはまだ答えがありません。固有のファイルの適切な基盤となるディスク ブロック を取得するには、btrfs の開発を待つ必要があるかもしれません (または開発を支援する必要があるかもしれません!) 。ファイルが圧縮されているかどうか、およびどのレベルで圧縮されているかがわからない状態で(強制duなしで)btrfs fsを圧縮してマウントすると、非常にイライラします。

于 2014-05-04T14:10:10.263 に答える
2

私もこの質問に答えようとしていましたが、ここに私が見つけたものがあります.異なる数du -sを生成します. dfだから私はいくつかのテストを行いました:

  1. サイズが約 3TB のテスト ディレクトリを /home に配置しました。これは、/home ディレクトリ全体の部分的なコピーであり、ドキュメント、テキスト ファイル、画像、およびプログラムが一般的に混在しています。

  2. .tar.gz を使用してこのディレクトリを圧縮した結果、ファイルのサイズは

# du -s ./test.tar.gz 1672083116 ./test.tar.gz

  1. ファイルシステムに存在するこのファイルを使用して、次のことを行いました。

# du -s /home 11017624664 /home

# du --apparent-size -s /home 11010709168 /home

# df /home Filesystem 1K-blocks Used Available Use% Mounted on /dev/md2 31230406656 9128594488 22095200200 30% /home

つまり、((11017624664/(1024**2))/(9128594488/(1024**2))-1)*100 = 20%圧縮比があるということです

  1. 次に、このファイルを削除したところ、次のようになりました。

# du -s /home 9348284812 /home

# du --apparent-size -s /home 9340957158 /home

# df /home Filesystem 1K-blocks Used Available Use% Mounted on /dev/md2 31230406656 7455549036 23764949364 24% /home

圧縮率25%を実現。また、この情報から、実際のサイズが 1592 G の test.tar.gz ファイルがディスク 1595 G を占有していると結論付けました--apparent-size

ちなみに、このパーティションをマウントするための fstab 行は次のとおりです。

UUID=be6...07fe /home btrfs defaults,compress=zlib 0 2

概要:

パーティション全体の圧縮率を確認するには、次の 2 つのコマンドを使用します。

du -s /home df /home

次に、出力を分割します。私の 25% の圧縮率は、zlib コンプレッサーに期待される典型的な結果だと思います。

于 2016-08-29T14:20:01.400 に答える
1

ファイルに Btrfs ファイルシステムを作成してマウントし、そこにファイルをコピーして df を実行できます。

$ dd if=/dev/zero of=btrfs.data size=1M count=1K
$ mkdir btrfs
$ mount btrfs.data btrfs -o compress
... copy the files to ./btrfs
$ sync
$ cd btrfs
$ btrfs filesystem df .

17MiB から 5MiB に圧縮された単一ファイルの例:

$ cd btrfs
$ ls -l
-rwx------ 1 atom atom 17812968 Oct 27  2015 commands.bin
$ btrfs filesystem df .
Data, single: total=1.01GiB, used=5.08MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
于 2016-10-18T01:33:08.690 に答える