如何获取块特殊文件的大小?

如何获取块特殊文件的大小?

我需要能够确定块特殊文件的大小。

例如,给定/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

相关内容