我的磁盘是sda。有尺寸文件/sys/dev/block/8:0/size
。它的单位是扇区。当我运行时,strace lsblk
我可以看到它正在读取该文件。
但是 lsblk 如何获取扇区大小以便稍后显示磁盘总大小(以字节为单位)?因为我不能请参阅 lsblk 读取文件hw_sector_size
或physical_block_size
.
答案1
之所以不会,是因为不需要,/sys/block/<device>/size
无论设备的实际物理扇区大小如何,所使用的扇区大小始终为 512。我找不到这方面的文档,所以我参考一下这个答案其中还有一些内核代码链接在评论中指出
Linux 始终将扇区视为 512 字节长,与设备实际块大小无关。
对循环设备的快速测试也表明这是真的:
$ cat /sys/block/loop0/size
204800
$ cat /sys/block/loop0/queue/physical_block_size
512
$ cat /sys/block/loop1/size
204800
$ cat /sys/block/loop1/queue/physical_block_size
4096
这些都是 100 MiB 设备
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 100M 0 loop
loop1 7:1 0 100M 0 loop
(请注意,如果您要求lsblk
在使用 的结果中还包括物理扇区大小-o+PHY-SEC
,您可以看到它queue/physical_block_size
在实际需要物理大小时读取文件。)