我最近安装了 Ubuntu 20.04 服务器*,过了一段时间,因为“设备上没有剩余空间”而遇到了麻烦。直到那时,我才意识到 Ubuntu 安装没有完全使用可用的磁盘空间:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1 259:0 0 931.5G 0 disk
├─nvme0n1p1 259:1 0 1.1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 1.5G 0 part /boot
└─nvme0n1p3 259:3 0 929G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 100G 0 lvm /
据我了解,该分区nvme0n1p3
的大小为 929 GB,但 Ubuntu 只使用了其中的 100 GB。我不知道为什么会发生这种情况,因为我有一个较旧的 Ubuntu 20.04 Server 安装,它看起来与我预期的一样:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1 259:0 0 953.9G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 952.4G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 952.4G 0 lvm /
$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 929G
resize2fs 1.45.5 (07-Jan-2020)
The containing partition (or device) is only 26214400 (4k) blocks.
You requested a new size of 243531776 blocks.
所以它告诉我包含的分区大小只有 100 GB,而lsblk
显然它却告诉我一些不同的东西。
我怎样才能让 Ubuntu 使用所有可用的 929 GB?
*Ubuntu 22.04.1 LTS 服务器上仍然发生同样的情况,尽管我确定我告诉安装程序使用所有可用磁盘空间。
答案1
由于 Ubuntu 使用 LVM 卷,因此需要先更改卷的大小,然后才能resize2fs
增加底层文件系统的大小。
lvextend
可以使用如下方法完成:
$ sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from 100.00 GiB (25600 extents) to <928.96 GiB (237813 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
该-l +100%FREE
选项指示lvextend
将包含的卷组的所有可用空间添加到逻辑卷。
现在我们可以resize2fs
修改文件系统,以便它使用所有可用空间:
~$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 117
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 243520512 (4k) blocks long.
现在确实如此:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1 259:0 0 931.5G 0 disk
├─nvme0n1p1 259:1 0 1.1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 1.5G 0 part /boot
└─nvme0n1p3 259:3 0 929G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 929G 0 lvm /
我找到了解决方案如何调整 Ubuntu 根 LVM 分区的大小。我推荐这篇文章,其中包含更详细的背景信息。
您还可以通过一个步骤完成扩展/调整大小:
sudo lvextend -l +100%FREE -r /dev/mapper/ubuntu--vg-ubuntu--lv