我在 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
来做到这一点,
只需使用
sudo cfdisk
进入 的权限cfdisk
,使用上下方向键选择您的分区,使用左右方向键选择您的操作,例如:- 调整大小
/dev/vda2
为 171.5GB,起始磁柱 513MB,结束磁柱 172GB - 调整大小
/dev/vda7
为 156GB,起始磁柱为 16GB,结束磁柱为 172GB
- 调整大小
调整新扩展逻辑分区的大小
/dev/vda7
:sudo resize2fs /dev/vda7
。重新启动或重启您的虚拟机:
sudo reboot
。
您的想法“只需改变我的脚本就能sudo growpart /dev/vda 2 && sudo growpart /dev/vda 7 && sudo resize2fs /dev/vda7
让一切完美运行!”太棒了!
这有助于我避免每次创建新的 Debian VM 时扩大 VM 的磁盘空间。
另外,你的自动化想法太棒了!谢谢!