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_BSIZE
param.h
该值在大多数系统上为 512,但在 HP-UX 上为 1024。
顺便说一句:该值与驱动器的扇区大小无关。