我正在尝试调整主/启动分区的大小以使用添加的 30GB(Proxmox 上的虚拟机)。如您所见,我的启动分区已满。我对这一切都很陌生,所以我遵循了这里的答案:Ubuntu - 无法使用 growpart 扩展分区 - 分区 1 只能增长到 2046
据我了解,我的可用空间中有两个分区“妨碍”了我,所以我不能简单地这样做growpart
,因此在谷歌上搜索错误并遇到了上述线程。
porter@porter:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 5.9G 0 5.9G 0% /dev
tmpfs 1.2G 1.6M 1.2G 1% /run
/dev/sda1 19G 18G 0 100% /
tmpfs 5.9G 0 5.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.2G 0 1.2G 0% /run/user/0
tmpfs 1.2G 0 1.2G 0% /run/user/1000
使用时cfdisk
我可以看到 30 GB 的可用空间。
Disk: /dev/sda
Size: 50 GiB, 53687091200 bytes, 104857600 sectors
Label: dos, identifier: 0x0266d922
Device Boot Start End Sectors Size Id Type
>> /dev/sda1 * 2048 39942143 39940096 19G 83 Linux
/dev/sda2 39944190 41940991 1996802 975M 5 Extended
└─/dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
Free space 41940992 104857599 62916608 30G
因此,我删除sda2
和sda5
,然后写下更改。
Disk: /dev/sda
Size: 50 GiB, 53687091200 bytes, 104857600 sectors
Label: dos, identifier: 0x0266d922
Device Boot Start End Sectors Size Id Type
>> /dev/sda1 * 2048 39942143 39940096 19G 83 Linux
Free space 39942144 104857599 64915456 31G
但是,当我转到时growpart
,出现错误:
porter@porter:~$ sudo growpart -v /dev/sda 1
update-partition set to true
resizing 1 on /dev/sda using resize_sfdisk_dos
104857600 sectors of 512. total size=53687091200 bytes
## sfdisk --unit=S --dump /dev/sda
label: dos
label-id: 0x0266d922
device: /dev/sda
unit: sectors
sector-size: 512
/dev/sda1 : start= 2048, size= 39940096, type=83, bootable
padding 33 sectors for gpt secondary header
max_end=104857567 tot=104857600 pt_end=39942144 pt_start=2048 pt_size=39940096
resize of /dev/sda returned 0.
failed [pt_update:1] pt_update /dev/sda 1
partx: /dev/sda: error updating partition 1
FAILED: pt_resize failed
并且后续执行resize2fs
也会失败并出现错误:
porter@porter:~$ sudo resize2fs /dev/sda 1
resize2fs 1.46.2 (28-Feb-2021)
resize2fs: Device or resource busy while trying to open /dev/sda
Couldn't find valid filesystem superblock.
任何指导都将不胜感激。
答案1
您需要区分两种设备:
/dev/sdX
(在您的情况下为 sda)— 一个“SCSI”磁盘设备(我将其放在引号中是因为许多设备都经过模拟 SCSI 层而不是真正的 SCSI)。
它是整个磁盘。上面可以放不同的东西,但大多数情况下它是一个分区表,其他东西都放在分区中。这就是你的情况。
/dev/sdXN
(在您的例子中为 sda1)— 设备 sdX 上的分区 N。它是 sdX 的一部分,跨越多个 LBA。
这通常是文件系统(或其他存储系统层)放置的地方。与growpart
在整个磁盘级别上运行的命令不同,resize2fs
(或任何其他与文件系统相关的工具)应该准确指向包含文件系统的设备,在您的例子中应该是 /dev/sda1。请注意,这里没有空格 — 我们指的是“托管文件系统的块设备”,而不是“具有托管文件系统的分区的磁盘”,因为这非常模糊(模糊是由于那些可能的附加存储层 — RAID、缓存、加密、LVM)。
首先,您需要解决 growpart 无法扩展分区的问题。我认为这是因为您忘记了/dev/sda5
在删除该分区之前放置的交换。通常使用 来完成swapoff /dev/sda5
。如果您不再有 /dev/sda5 设备节点,我相信 VM 重新启动可以解决这个问题,但可能会完全无法启动;请注释掉与交换相关的行 fstab 以确保它能够启动。然后,growpart 应该会成功。
因此,顺序为:
- 禁用交换线路
/etc/fstab
并重新启动虚拟机; - 重复刚才的 growpart 步骤;
- 运行
resize2fs /dev/sda1
(没有空间)来扩大文件系统。