我需要能够确定块特殊文件的大小。
例如,给定/dev/sda
,我需要一个提供设备大小的命令。 (我所说的大小是指容量,因为这是一个存储设备。)
理由:
我可以通过以下方式将信息存储在设备中:
echo "12345" >/dev/sda # 需要以root身份运行
(顺便说一下,不要运行该命令......除非您不关心您的数据。)
但是,我需要知道设备上可以存储多少数据,但我不知道该怎么做。
答案1
blockdev
提供了一种设置/获取块设备属性的方法。要获取以字节为单位的大小:
blockdev --getsize64 /dev/sda
或者,目录下提供了一些信息/sys/block/<device>
,例如cat /sys/block/sda/size
给出以 512 字节块为单位测量的 sda 大小。请/sys/block/sda/sda1/size
参阅 sda1 分区大小。
对于 sda 大小(以 KiB 为单位)
echo $[ $(cat /sys/block/sda/size) / 2 ]
对于 sda 大小(以字节为单位)
echo $[ $(cat /sys/block/sda/size) * 512 ]
答案2
解析fdisk -l /dev/sda
应该给你准确的结果:
Disk /dev/sda: 68.7 GB, 68719476736 bytes
255 heads, 63 sectors/track, 8354 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bd83f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 8009 64325632 83 Linux
/dev/sda2 8009 8355 2780161 5 Extended
/dev/sda5 8009 8355 2780160 82 Linux swap / Solaris
答案3
我认为没有通用的跨平台答案。在 Linux 上,信息位于/proc/partitions
(不管名称如何,它包含所有(大多数?)块设备,而不仅仅是 PC 风格的分区)。
awk '$4 == "sda" {print $3}' /proc/partitions
答案4
/proc/partitions
有您正在寻找的数据。这是 fdisk 从中获取数据的地方。
例如在我的系统中
major minor #blocks name
8 0 976762584 sda
8 1 8385898 sda1
8 2 968374102 sda2
8 16 976762584 sdb
8 17 8385898 sdb1
8 18 968374102 sdb2
8 32 976762584 sdc
8 33 8385898 sdc1
8 34 968374102 sdc2
8 48 976762584 sdd
8 49 8385898 sdd1
8 50 968374102 sdd2
9 2 2905122048 md2