如何找到Linux上已卸载分区的大小?


14

我正在使用tune2fs,但是它以块为单位提供数据,并且我无法获得分区总大小的确切值。

我也用过fdisk -l /dev/mmcblk0p1,但是从这里得到的大小也是一个不同的值。

如何找到确切的分区大小?


8
需要注意的是tune2fs并不能打印分区的大小,它打印的大小的文件系统。一个文件系统可以比一个分区的情况下(如果存在该分区上的未使用的空间)时,它可以比一个分区(如果该分区被以某种方式截断大;显然文件系统在这种情况下损坏,但它仍然大于分区)。它也可能跨越多个分区,甚至是“虚拟的”,即什至没有备份设备(例如sysfs,procfs,tmpfs)。
约尔格W¯¯米塔格

Answers:


22

该命令是:

blockdev --getsize64 /dev/mmcblk0p1

它以64位整数形式给出以字节为单位的结果。它查询的字节大小一个的块设备,因为内核看它的大小。

之所以fdisk -l /dev/mmcblk0p1不起作用,是因为fdisk它做了一些完全不同的事情:它读取块设备的分区表(=第一扇区),并打印找到的内容。它不检查任何内容,只说分区表中的内容。

分区表已损坏,或者块设备没有分区表,它甚至都不会打扰:它会打印一条警告,指出校验和不正确,但是即使值显然不是,它也会打印发现的内容-感。

这就是您的情况:/dev/mmcblk0p1 没有分区表。如设备名称所示,它已经是物理磁盘的第一个分区/dev/mmcblk0。该磁盘包含一个分区表,如果您曾用fdisk -l /dev/mmcblk0它查询过它,它已经起作用了(假设它具有msdos分区表)。


我的分区空间恰好是2gb,但是blockdev和fdisk的值都小于剩余空间,因此请告诉命令以获取其值
Sarthak_Bhutani

@Sarthak_Bhutani您需要的信息没有打印在fdisk -l /dev/mmcblk0哪?它应该告诉您一个块的大小,设备上块的总数,分区的大小以及每个分区的开始和结束块。您还可以根据该信息找出未分配给任何分区的块范围。
BlackJack

9

试试看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参数告诉它以字节为单位输出大小。


这是一个非常好的工具!!!谢谢!+1!
rmbianchi '18

5

要获取分区总大小的确切值,请运行:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size

2
我认为这还取决于部门的规模是否为512(这是当今绝大多数情况)。
peterh-恢复莫妮卡

1
@peterh如今,块设备仍然具有512 的物理扇区大小实际上是不寻常的,但是许多事情(我在/ sys / class / block中找不到确切的信息)被设计为以512字节为单位进行报告无论实际块大小如何。
Random832 '17

0

我的解决方案:

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分区不一定要挂载在哪里。它已通过tune2fs1.42.4版进行了测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.