如何在 Linux 上查找未挂载分区的大小?

如何在 Linux 上查找未挂载分区的大小?

我正在使用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测试的

相关内容