我有一个来自 android 设备的示例 emmc 块信息
从
/proc/partitions
major minor #blocks name
179 1 5120 mmcblk0p1
使用我的小智慧我假设/proc/partitions
使用块,因为它说分区 1 有 5120 个块
从
/sys/dev/block/179:0/mmcblk0p1/size
10240
/sys/…/size 中的分区值似乎是 /proc/partitions 值的两倍。因此,为什么它们不同,因此它们中的单位是什么?
/proc/partitions
显示 1024 字节块的大小。/sys/dev/block/*/*/size
显示 512 字节扇区的大小。两者都与设备的逻辑/物理块/扇区大小无关。
首先,您可以查看
proc(5)
手册页:对于第二个,它当然应该记录在某个地方,但您也可以直接查看以下 Linux 源代码
block/partition-generic.c
:以及它与生成
/proc/partitions
信息的代码的关系block/genhd.c
:两者都使用
part_nr_sects_read()
which/proc/partitions
除以 2 (with>> 1
)。part_nr_sects_read()
检索 的nr_sects
字段,该字段struct hd_struct
始终位于 512 字节扇区中,与设备的扇区/块大小无关。例如,您可以查看如何drivers/block/nbd.c
使用字节大小除以 512的set_capacity()
函数(设置相同的字段)(使用):nr_sects
>> 9