![如何在没有 LiveCD 或重启的情况下调整 Fedora 中的根 LVM 分区大小](https://linux22.com/image/595044/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%20LiveCD%20%E6%88%96%E9%87%8D%E5%90%AF%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%B0%83%E6%95%B4%20Fedora%20%E4%B8%AD%E7%9A%84%E6%A0%B9%20LVM%20%E5%88%86%E5%8C%BA%E5%A4%A7%E5%B0%8F.png)
我有一台虚拟机,最近其磁盘映像从 20GB 增加到了 50GB,并fdisk -l
验证虚拟机是否可以看到这个新大小。现在我需要调整根 LVM 分区的大小以填充额外的 30GB。
我发现一些 文章 关于调整 LVM 大小,但少数涉及调整根分区大小的都声称您需要从 LiveCD 启动。有没有办法在不关闭服务器的情况下做到这一点?服务器至关重要,所以我想尽量减少停机时间。
编辑:输出fdisk -l
:
[root@fedora-host ~]# sudo fdisk -l
Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders, total 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00097c90
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM
Disk /dev/mapper/VolGroup-lv_root: 36.1 GB, 36104568832 bytes
255 heads, 63 sectors/track, 4389 cylinders, total 70516736 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_root doesn't contain a valid partition table
Disk /dev/mapper/VolGroup-lv_swap: 6308 MB, 6308233216 bytes
255 heads, 63 sectors/track, 766 cylinders, total 12320768 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap doesn't contain a valid partition table
编辑:如何调整物理分区的大小?fdisk 可以看到可用空间,但我不知道如何调整主 LVM 分区的大小以使用它。我尝试启动 LiveCD 并使用 parted'dresize
命令,但它只给我错误“无法检测文件系统”。我发现本指南,这意味着我需要删除分区并创建一个具有正确大小的新分区,但这听起来非常危险。
最后编辑:奇怪的是,Parted 的resize
命令无法调整 LVM 分区的大小。想想看。相反,我只是删除了旧分区并创建了一个具有新范围的新分区,如上面的链接中所述,这正确地调整了 LVM 分区的大小。然后我按照下面的建议调整了卷和文件系统的大小里面LVM 分区。
答案1
您可以在线增加逻辑卷。您必须卸载它才能缩小它(这需要 LiveCD / 救援模式)。
pvresize /dev/sda2
(假设您的 LVM 分区是sda2
。根据需要进行替换。)lvextend /dev/mapper/root -l+100%FREE
(或者,无论您的根逻辑卷叫什么。)resize2fs /dev/mapper/root
(假设 ext2/3/4)
答案2
安装 gparted。以 root 身份运行(如果是远程,请使用 ssh -X 或 x2go)。选择分区。它应该显示末尾(右侧)的可用空间。如果没有,您需要重新启动虚拟机才能看到虚拟设备的新大小。这应该是 systemd 的最低停机时间。
右键单击并选择调整大小。将末尾拖到磁盘末尾。确保不要触摸开头。 gparted 能够在调整大小期间移动分区,但这当然会破坏正在运行的系统。但移动末尾是可以的。查看 gparted 将执行的待处理操作,以确保您正在扩展和不是移动分区。单击应用。gparted 将更改磁盘上的分区,然后发出内核 ioctl 以重新读取分区表,同时更改活动块设备的大小。然后,由于它看到它是 LVM PV,它会为您运行 pvresize。退出 gparted,vgs 现在显示您的新空间。
我曾听说 parted 可以做到这一切,而且不需要 GUI 的开销,但我始终无法弄清楚其中的奥妙。Parted 是我尝试过的最差的 CLI 界面之一。
不要使用 fdisk,您必须删除并重新分配分区才能调整大小,默认情况下它会在写入时擦除 LVM2 签名。我想我看到了一个“高级”选项来关闭这种破坏性行为,但我从未测试过它。
您也可以尝试 cfdisk(curses fdisk)。它可能具有可用的分区大小调整功能。手动运行 pvresize 非常简单,并且有一个命令可以告诉内核重新读取分区表。但我必须进行测试以确保它不会像 fdisk 那样擦除 LVM 签名。
答案3
您的系统真的从 20 GB 变为 50 GB 了吗?这看起来真的很奇怪,因为您的 sda2 设备约为 40GB,lv_root 显示 36GB,而 swap 显示 6GB。
您的输出fdisk -l
显示总扇区数为/dev/sda
。104857600
使用的最后一个扇区数/dev/sda2
为83886079
。这告诉我您尚未调整分区大小以使用驱动器上的所有可用空间。 pvresize 命令不会更改分区表。您需要先更改分区表。
答案4
如果您的发行版上有 ssm(系统存储管理器),我会考虑检查一下。
查看此处了解更多信息:https://unix.stackexchange.com/a/293173
ssm 似乎使调整逻辑卷大小变得更容易,而无需您自己做所有事情。
重新启动操作系统并首先以 root 身份登录后,我能够使用它来扩展我的主分区。(总共必须重新启动两次,但最终成功了,现在我的 /home 分区中多了 50G 可用空间。)