我有一块 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
parted
并lsblk
正确报告逻辑/物理块(又称扇区)大小。您可以使用 仔细检查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 块的形式打印结果。