扩展主 Linux 分区以使用所有可用空间

扩展主 Linux 分区以使用所有可用空间

我正在尝试调整主/启动分区的大小以使用添加的 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

因此,我删除sda2sda5,然后写下更改。

                                                   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(没有空间)来扩大文件系统。

相关内容