如何自动扩展 /home 分区以使用磁盘末尾的可用空间?

如何自动扩展 /home 分区以使用磁盘末尾的可用空间?

我在 25mb 虚拟磁盘上创建了 Ubuntu 20.04 的黄金映像,其分区如下:

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 26.8GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number    Start    End      Size    Type      File system      Flags
 1        1049kB   512MB    511MB   primary   linux-swap(v1)   boot
 2        513MB    26.8GB   26.3GB  extended
 5        513MB    1012MB   499MB   logical   ext4
 6        1013MB   16.0GB   15.0G   logical   ext4
 7        16.0GB   26.8GB   10.8GB  logical   ext4

/dev/vda6/root并且/dev/vda7/home

此磁盘将作为要创建的虚拟机的映像导出。我正在尝试创建一个脚本,该脚本将在首次启动新创建的虚拟机时运行,该脚本将扩展主分区以使用磁盘末尾的可用空间,但我没有得到预期的结果。

我跟着这个建议并在导出之前在黄金映像磁盘上创建以下文件:

/etc/rc.local

#!/bin/sh -e

type /etc/init.d/extend-home-part.sh && /etc/init.d/extend-home-part.sh

exit 0

/etc/init.d/extend-home-part.sh

#!/bin/sh

sudo growpart /dev/vda 7 && sudo resize2fs /dev/vda7
sudo mv /etc/init.d/extend-home-part.sh /etc/init.d/extended-home-part.sh

exit 0

在我创建一个具有更大虚拟磁盘的虚拟机后,我可以看到脚本运行了,因为脚本已被重命名,但是 /home 分区没有改变。parted print free给出以下输出:

(parted) print free
Model: Virtio Block Device (virtblk)
Disk: /dev/vda: 172GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number    Start    End      Size    Type      File system      Flags
          32.3kB   1049kB   1016kB            Free Space
 1        1049kB   512MB    511MB   primary   linux-swap(v1)   boot
          512MB    513MB    1048kB            Free Space
 2        513MB    26.8GB   26.3GB  extended
 5        513MB    1012MB   499MB   logical   ext4
          1012MB   1013MB   70kB              Free Space
 6        1013MB   16.0GB   15.0G   logical   ext4
          16.0GB   16.0GB   639kB             Free Space
 7        16.0GB   26.8GB   10.8GB  logical   ext4
          26.8GB   172GB    145GB             Free Space

当我尝试在新虚拟机上手动运行命令时,我得到以下输出:

$ sudo growpart /dev/vda 7
CHANGED: partition=7 start=31275008 old: size=21151744 end=52426752 new: size=304269279 end=335544287

$ sudo resize2fs /dev/vda7
resize2fs 1.45.5 (07-Jan-2020)
The filesystem is already 2643968 (4k) blocks long. Nothing to do!

最后的可用空间仍然未使用,parted print free输出没有变化。我不明白为什么/home即使手动运行命令后分区也没有扩展。

我在这里做错了什么?有没有更好的方法来执行此任务?

注意:我知道可以使用 Ubuntu 中的磁盘实用程序来调整/home分区大小,但我们不希望虚拟机用户每次创建新的 Ubuntu VM 时都必须这样做。自动化此过程是必要的。

答案1

MSDOS 分区表限制为四个主分区。更多分区要求一个主分区是扩展分区,它可以容纳许多逻辑分区。您不能将逻辑分区扩展到扩展分区之外。要么先使用 GPT 分区,要么先扩展分区 2。使用已安装的分区可能可以在右侧扩展,请查看工具手册页 - gparted 可以,不知道 growpart 是否可行。

答案2

我看到您的虚拟机的空间大小为 172GB,但是您的虚拟机的磁盘空间大小为 26.8GB。

所有 您 需要 做 的 就是 扩大 扩展 分区/dev/vda2, 扩大 逻辑 分区/dev/vda7, 并 调整 扩展 分区 的 文件 类型/dev/vda7.

我建议使用cfdisk来做到这一点,

  1. 只需使用sudo cfdisk进入 的权限cfdisk,使用上下方向键选择您的分区,使用左右方向键选择您的操作,例如:

    1. 调整大小/dev/vda2为 171.5GB,起始磁柱 513MB,结束磁柱 172GB
    2. 调整大小/dev/vda7为 156GB,起始磁柱为 16GB,结束磁柱为 172GB
  2. 调整新扩展逻辑分区的大小/dev/vda7sudo resize2fs /dev/vda7

  3. 重新启动或重启您的虚拟机:sudo reboot

您的想法“只需改变我的脚本就能sudo growpart /dev/vda 2 && sudo growpart /dev/vda 7 && sudo resize2fs /dev/vda7让一切完美运行!”太棒了!

这有助于我避免每次创建新的 Debian VM 时扩大 VM 的磁盘空间。

另外,你的自动化想法太棒了!谢谢!

相关内容