我的主要问题是权威地查看扇区中使用的块大小是否计数:
/sys/block/<disk>/<partition>/size
实际上是 512 B,或者这可能会有所不同。
我认为这很容易找到答案,但例如这里:
https://lore.kernel.org/lkml/[电子邮件保护]/T/#u
有人问:
There are /sys/block/<device>/size and
/sys/block/<device>/<device><partition>/size.
But these values are reported in sectors, not in bytes. As discs with 4K
sectors are on the horizon now, I don't want to make wrong assumptions on the
sector size.
So what is the correct sector size for /sys/block/<device>/size?
并且在文档中提供了一个补丁,显然可以一劳永逸地回答文档中的这个问题: https://lore.kernel.org/lkml/[电子邮件保护]/T/
由于其含义 13 年来从未改变,我希望将这些属性形式化,以便用户可以依赖它[1][2]。扇区定义受到 block/stat.txt 文档的启发。
使用补丁:
diff --git a/Documentation/ABI/testing/sysfs-block b/Documentation/ABI/testing/sysfs-block
+What: /sys/block/<disk>/<partition>/size
+Date: October 2002
+Contact: [email protected]
+Kernel Version: 2.5.43
+Description:
+ Size of the partition in standard UNIX 512-byte sectors
+ (not a device-specific block size).
这一切看起来都很简单,但是当我查看当前现有的文档时: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block
没有这个补丁的存在。这是否意味着,事实上这个看似简单的问题可能并不简单?
有人可以指出这个问题的真正权威答案吗,最好使用内核文档或带有注释的代码?
目前我依赖于工具的输出,但如果它实际上不总是 512B,那么输出可能会有误,这会导致我正在处理的代码在某些情况下也会出现错误。
我很惊讶找到一个真正权威的答案竟然如此困难,
https://unix.stackexchange.com/questions/52215/determine-the-size-of-a-block-device
其中一些指向此处的补丁,但似乎没有人意识到该补丁似乎尚未被接受,尽管它似乎已被签署,但据我所知它并不在文档代码中。
如果我们能够一劳永逸地确定内部内核代码到底在做什么,并且这种行为是否有记录,或者仅仅是假设,那就太好了,这意味着理论上它可以随时随机改变。
答案1
Linux 始终认为扇区长度为 512 字节,与设备实际块大小无关
也就是说,我认为扫描/sys/block/<disk>/
是获取磁盘和分区大小的最糟糕(或至少最难)的方法: