我正在向设备刷新新操作系统,但该过程完成后,我无法启动它。然后我检查了磁盘,发现了一些奇怪的事情。
不同的工具报告的磁盘大小不同,尽管其大小应该约为 120GB。
所以,我决定:
dd if=/dev/zero of=/dev/sda
但结果几乎是一样的。
和lsblk
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 115.2G 0 disk
├─sda1 8:1 1 243M 0 part
└─sda2 8:2 1 2.2G 0 part
和fdisk
:
$ fdisk -l /dev/sda
Disk /dev/sda: 7.66 GiB, 8225689600 bytes, 16065800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaeaa381a
和cfdisk
:
Disk: /dev/sda
Size: 7.66 GiB, 8225689600 bytes, 16065800 sectors
Label: dos, identifier: 0xaeaa381a
Device Boot Start End Sectors Size Id Type
>> Free space 2048 16065799 16063752 7.7G
我没有接触过硬件。所以磁盘可能仍然在~120G。
我应该怎么做才能收回可用空间?
答案1
通过“将新操作系统刷新到设备”,您的意思是写入完整的磁盘映像,包括分区表吗?
请注意,您dd if=/dev/zero of=/dev/sda
当然应该覆盖 DOS 类型的分区表,但如果您之后没有触发磁盘重新扫描,系统仍将使用旧分区表中的信息。
由于缓存的分区表信息还包括创建映像的原始磁盘的大小,因此它会欺骗fdisk
和cfdisk
工具。另一方面,lsusb
查看磁盘的实际大小,忽略分区表中报告的总大小。
partprobe /dev/sda
如果可用,请尝试,或者echo 1 > /sys/block/sda/device/rescan
(两个命令都需要 root 权限)。
如果您需要非破坏性地更新现有分区表,例如在映像操作后识别磁盘的完整大小,那么该growpart
工具可能是最简单的方法。