我正在使用tune2fs,但它以块的形式提供数据,并且我无法获得分区总大小的准确值。
我也使用过fdisk -l /dev/mmcblk0p1
,但从这里得到的尺寸也是不同的值。
如何找到准确的分区大小?
答案1
命令是:
blockdev --getsize64 /dev/mmcblk0p1
它以字节为单位给出结果,作为 64 位整数。它查询字节大小的一个块设备,因为内核看到它的大小。
之所以fdisk -l /dev/mmcblk0p1
不起作用,是因为它fdisk
做了一些完全不同的事情:它读取块设备的分区表(=第一个扇区),并打印找到的内容。它不检查任何内容,只说明分区表中的内容。
如果分区表损坏,或者块设备没有分区表,它甚至不会打扰:它会打印一条警告,指出校验和不正确,但它仍然打印找到的内容,即使这些值明显不正确-感觉。
这就是您的案例中发生的情况:/dev/mmcblk0p1
不具有一个分区表。正如设备名称所示,它已经是物理磁盘的第一个分区/dev/mmcblk0
。该磁盘包含一个分区表,如果您使用 查询它fdisk -l /dev/mmcblk0
,它已经工作(假设它有一个 msdos 分区表)。
答案2
尝试一下lsblk
,它甚至不需要root:
$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 34359738368 0 disk
├─xvda1 202:1 0 1676673024 0 part [SWAP]
└─xvda2 202:2 0 32682016768 0 part /var/spool
该-b
参数告诉它输出大小(以字节为单位)。
答案3
要获取分区总大小的准确值,请运行:
awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
答案4
我的解决方案:
part_dev='/dev/hda2'
total_block=`tune2fs -l $part_dev | awk '/Block count/ {print $3}'`
block_size=`tune2fs -l $part_dev | awk '/Block size/ {print $3}'`
total_size=$(($total_block* $block_size))
echo $total_size
其中/dev/hda2
是不一定挂载的分区。它是用tune2fs
版本 1.42.4测试的