lsblk如何获取扇区大小?

lsblk如何获取扇区大小?

我的磁盘是sda。有尺寸文件/sys/dev/block/8:0/size。它的单位是扇区。当我运行时,strace lsblk我可以看到它正在读取该文件。

但是 lsblk 如何获取扇区大小以便稍后显示磁盘总大小(以字节为单位)?因为我不能请参阅 lsblk 读取文件hw_sector_sizephysical_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在实际需要物理大小时读取文件。)

相关内容