透過圧縮が有効になっているbtrfsファイルシステムls -l
上のファイルの圧縮サイズ (リストにあると思います) と非圧縮サイズを特定することはできますか?
7 に答える
ファイルごとに答えることができず、@ catlover2 がファイルシステムについて答えました。ただし、ディスク上のブロックサイズと(仮想)ファイルシステムのサイズを区別する必要があり、ファイルls
システムdu
を超えることはできないため、使用されているディスクブロックの数に関する情報は提供されず、@jiliagre--apparent-size
はここでは役に立ちません。
この質問をよりよく説明するために、単一の 23G ファイル btrfs ファイルシステムでテストを行いました。最初に解凍し、次に lzo 圧縮します。サンプル ファイルは仮想マシン イメージであり、圧縮レベルは 0.5 のみです。のみdf
を btrfs 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を圧縮してマウントすると、非常にイライラします。
私もこの質問に答えようとしていましたが、ここに私が見つけたものがあります.異なる数du -s
を生成します. df
だから私はいくつかのテストを行いました:
サイズが約 3TB のテスト ディレクトリを /home に配置しました。これは、/home ディレクトリ全体の部分的なコピーであり、ドキュメント、テキスト ファイル、画像、およびプログラムが一般的に混在しています。
.tar.gz を使用してこのディレクトリを圧縮した結果、ファイルのサイズは
# du -s ./test.tar.gz
1672083116 ./test.tar.gz
- ファイルシステムに存在するこのファイルを使用して、次のことを行いました。
# 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%
圧縮比があるということです
- 次に、このファイルを削除したところ、次のようになりました。
# 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 コンプレッサーに期待される典型的な結果だと思います。
ファイルに 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