`stat -c '%B' *` 是什么意思?

`stat -c '%B' *` 是什么意思?

stat -c '%B' *每个文件报告相同的数字 512。这是什么%B意思?我看不懂手册:

%B - '%b' 报告的每个块的大小(以字节为单位)

与我的块大小有关吗:

$ sudo blockdev --getbsz /dev/sda1
4096

谢谢。

答案1

在查看文件系统时,有两个分配大小很重要:文件系统的块大小和磁盘的扇区大小。大多数 SATA 驱动器有 512 字节扇区,但也有例外:具有 4KB 扇区的驱动器并不少见。您可以通过以下方式获取此信息hdparm

# hdparm -I /dev/sdb|grep Sector
        Logical/Physical Sector size:           512 bytes

然而,当映射到文件系统块时,如果驱动器足够大,则在命名块时,512 字节会带来相当大的开销(存储分配信息所需的元数据是无法用于存储数据的空间。)通常,块大小由格式程序自动确定,但您通常可以覆盖它。例如ext3/4使用的方法如下:

-T usage-type[,...]

指定文件系统的使用方式,以便mke2fs可以选择适合该用途的最佳文件系统参数。支持的使用类型在配置文件/etc/mke2fs.conf(5)中定义 。用户可以使用逗号分隔的列表来指定一种或多种使用类型。

如果未指定此选项,mke2fs将根据要创建的文件系统的大小选择单个默认使用类型。如果文件系统大小小于或等于 3 MB,mke2fs 将使用文件系统类型floppy。如果文件系统大小大于 3 但小于或等于 512 兆字节,mke2fs(8) 将使用文件系统small。否则,mke2fs(8) 将使用默认文件系统类型default

默认值表明 4KB 块是默认值,如我/etc/mke2fs.conf所示:

[defaults]
        base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
        default_mntopts = acl,user_xattr
        enable_periodic_fsck = 0
        blocksize = 4096
        inode_size = 256
        inode_ratio = 16384

因此,%B它向您显示物理扇区的大小,将其乘以使用的扇区数%b即可得出磁盘上分配的总字节数。它通常根本不相关,因为没有文件系统分配会小于块大小,但它确实可以帮助您确定物理扇区的所有分配将是 8 的倍数(4KB/512 字节=8):

# stat test.img
  File: test.img
  Size: 536870912       Blocks: 1048584    IO Block: 4096   regular file

因此,利用此信息,您可以确定磁盘上分配的字节数以及为此文件分配的未使用空间:

块数 * 块大小 = 1048584 块 * 512 字节/块 = 536875008 字节。

未使用的已分配空间量:536875008-536870912 字节 = 4096 未使用字节。

答案2

如果 stat 命令的行为如手册页中所述,将返回包含文件中%B的值。DEV_BSIZEparam.h

该值在大多数系统上为 512,但在 HP-UX 上为 1024。

顺便说一句:该值与驱动器的扇区大小无关。

相关内容