ext4 および btrfs ファイルシステムのブロック サイズをどのように決定しますか?

ext4 および btrfs ファイルシステムのブロック サイズをどのように決定しますか?

ext4 と btrfs でフォーマットされたドライブの割り当て量を教えてくれるコマンドを探しています。

背景: ユーザーが個々のファイルを復元できるバックアップ システムを使用しています。このシステムは rsync のみを使用し、サーバー側のソフトウェアはなく、バックアップは圧縮されません。その結果、約 3.6 TB のファイルがあり、そのほとんどは小さいです。

私のデータ セットのストレージは、LVM 下の btrfs ボリュームでは、通常の ext4 ボリュームよりも効率が悪いようです。これは、最小ファイル サイズ、つまりブロック サイズに関係していると思われますが、比較のためにそれらのサイズを取得する方法がわかりません。btrfs の wiki には、「ページ サイズ」を使用すると書かれていますが、その数値を取得する方法が見つかりません。

答え1

データ ブロック割り当てサイズを確認する必要があります。これは、どのファイルでも割り当てることができる最小ブロックです。大きなファイルは複数のブロックで構成されます。また、大きなファイル (またはすべての小さなファイル) の最後には、最後のブロックが完全に埋められず、使用されない「無駄」が常に存在します。

私の知る限り、一般的な Linux ファイルシステムはすべてデフォルトで 4K ブロックを使用しています。これは、それが最新の CPU のデフォルトのページ サイズであるためです。つまり、メモリ マップ ファイルとディスク ブロック間のマッピングが容易です。BTRFS と Ext4 ではデ​​フォルトでページ サイズ (ほとんどのシステムでは 4K) が使用されることは事実です。

ext4 では、tune2fs次のようにしてブロック サイズを確認します (/dev/sda1独自のデバイス パスに変更します)。

[root@centos8 ~]# tune2fs -l /dev/sda1 |grep "^Block size:"
Block size:               4096
[root@centos8 ~]#

btrfs では、次のコマンドを使用してブロック サイズを確認します (/dev/mapper/cr_root独自のデバイス パスに変更します。この例では、一般的な暗号化された BTRFS-on-LUKS パスを使用します)。

sudo btrfs inspect-internal dump-super -f /dev/mapper/cr_root | grep "^sectorsize"

答え2

stat -f任意のファイルシステムの回答を取得するために使用できます。例:

% stat -f /home
  File: "/home"
    ID: 5013a37be3cd6a47 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 113391734  Free: 472450     Available: 468304
Inodes: Total: 28868608   Free: 27969906

答え3

無関係な情報を大量に調べたい場合は、 がありますbtrfs-show-super -f /dev/md1。それ以外の場合は、 についての答えstat -f …が最も簡単で普遍的なものです。

関連情報