如何确定 ext4 和 btrfs 文件系统的块大小?

ins*_*nce 13 linux filesystems backup ext4 btrfs

我正在寻找能够告诉我 ext4 与 btrfs 格式化驱动器上的分配量的命令。

背景:我正在使用一个备份系统,允许用户恢复单个文件。该系统仅使用rsync,没有服务器端软件,备份未压缩。结果是我有一些 3.6TB 的文件,其中大部分都很小。

对于我的数据集来说,LVM 下的 btrfs 卷上的存储效率似乎比普通的旧 ext4 卷上低得多,我怀疑这与最小文件大小以及块大小有关,但我有无法弄清楚如何获得这些尺寸以进行比较。btrfs wiki 说它使用“页面大小”,但我没有找到任何关于获取该数字的信息。

ste*_*eve 15

您需要查看数据块分配大小,这是任何文件可以分配的最小块。大文件由多个块组成。而且大文件(或所有小文件)的末尾总是存在一些“浪费”,其中最后一个块没有完全填充,因此未使用。

据我所知,每个流行的 Linux 文件系统默认都使用 4K 块,因为这是现代 CPU 的默认页大小,这意味着内存映射文件和磁盘块之间有一个简单的映射。我知道 BTRFS 和 Ext4 默认的页面大小(在大多数系统上为 4K)。

在ext4上,只需使用tune2fs来检查您的块大小,如下(更改/dev/sda1为您自己的设备路径):

[root@centos8 ~]# tune2fs -l /dev/sda1 |grep "^Block size:"
Block size:               4096
[root@centos8 ~]#
Run Code Online (Sandbox Code Playgroud)

在 btrfs 上,使用以下命令检查您的块大小(更改/dev/mapper/cr_root为您自己的设备路径,本示例仅使用典型的加密 BTRFS-on-LUKS 路径):

sudo btrfs inspect-internal dump-super -f /dev/mapper/cr_root | grep "^sectorsize"
Run Code Online (Sandbox Code Playgroud)

  • 确实,这适用于 btrfs。谢谢。输出的相关部分是````nodesize 16384 leafsize 16384```` (3认同)
  • (找到这样一个基本的结构FS信息是多么晦涩的命令..因为https://www.snia.org/sites/default/files/SDC/2017/presentations/File_Systems/Conway_Alexander_File_Systems_Fated_for_Senescent_Nonsense_Says_Science.pdf而想知道它) (2认同)
  • @实例那是错误的。打开“man mkfs.btrfs”。他想要的统计数据是“sectorsize”,即“最小数据块分配单位”,即文件分配中的块有多大。在大多数系统上它默认为 4K,因为它默认为页面大小,在大多数系统上默认为 4K。至于节点大小/叶大小,手册解释说它们是彼此的别名(始终相同),只是 BTRFS 中每个元数据块使用的字节数。 (2认同)

Mat*_*lis 13

您可以用来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
Run Code Online (Sandbox Code Playgroud)

  • 是的,这个不需要root权限 (2认同)