/proc/partitions 中的大小单位没有意义

/proc/partitions 中的大小单位没有意义

我有一块 Seagate 750GB 硬盘。

Parted显示驱动器为 750GB

parted /dev/sdc print
Model: ST375064 0AS (scsi)
Disk /dev/sdc: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  750GB  750GB  ext3         primary

但是,大小条目/proc/partitions据称是以块为单位的:

cat /proc/partitions
major minor  #blocks  name
8       32  732574584 sdc

Parted 说块大小为 512B,blockdev --getbsz /dev/sdc说块大小为 4096。

但是……很明显,/proc/partition错误地以 KiB 而不是块为单位报告设备大小。

这种行为是否可以跨 Linux 和/或内核版本依赖?(我需要一种可编写脚本且一致的方式来查找块设备的大小)

Centos 6.6,带有 3.10 内核。

編輯

lsblk -o kname,phy-sec,log-sec,min-io
KNAME PHY-SEC LOG-SEC MIN-IO
sda       512     512    512
sda1      512     512    512
sda2      512     512    512

答案1

partedlsblk正确报告逻辑/物理块(又称扇区)大小。您可以使用 仔细检查smartctl -i /dev/sda

blockdev --getpbsz --getss /dev/sda也报告了正确的信息。

/proc/partitions以 KiB 为单位报告大小,但它与设备的物理块大小完全无关,而是缓冲区缓存块大小。

blockdev --getbsz /dev/sda可能报告实际的 IO 大小( 4KiB 与内核页面大小匹配)。

答案2

使用 /proc/partitions 或 (c)fdisk。某些东西不会漂亮地打印结果,以便更好地供人类阅读。

/proc/partitions 中的块始终为 512B 块...较新的磁盘将在内部使用 4k 块,但通常会在外部模拟 512B 块。有些磁盘只会使用 4k 块,在外部也是如此,但 /proc/partitions 仍会以 512B 块的形式打印结果。

相关内容