在Recovery模式下收缩系统根目录的LVM逻辑卷(LV)

我在 Incus使用ZFS作为存储 实践中,需要将操作系统根目录所在的 /dev/ubuntu-vg/ubuntu-lv 逻辑卷LV收缩,以便能够创建一个用于 ZFS 存储池的新LV逻辑卷。

操作的关键是 lvreduce 需要确保根文件系统卸载状态才能 resize2fs ,所以最简单的方式是 进入Recovery模式,这样可以避免挂载根文件系统,也就能够shrink EXT4文件系统。

  • 重启主机,在物理主机POST自检完成后,立即长按 Shift 键,强制唤醒GRUB引导菜单

  • 在GRUB菜单中,使用方向键选择 Advanced options for Ubuntu 并回车

  • 选择带有 recover mode 的最新内核( Ubuntu, with Linux 6.8.0-124-generic (recovery mode) ),进入recovery模式

警告

实践发现进入recovery模式以后,根文件系统实际已经挂载,这导致我最初想要在recovery模式下shrink根文件系统失败。所以改为手工修订启动参数

  • 再次重启熊,在选择 recover mode 的最新内核( Ubuntu, with Linux 6.8.0-124-generic (recovery mode) ) 时,不要回车直接进入,而是按下 e 进入GRUB脚本编辑模式

  • 将光标移动到 linux 开头的行,将 root= 等内容清除掉,并在行尾提啊家 init=/bin/sh ,即修改

原本的linux行配置
linux   /vmlinuz-6.8.0-124-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro single nomodeset dis_ucode_ldr
  • 然后按下 ctrl-x 引导启动,并看到提示符号如下

看到initramfs提示符
(initramfs)

备注

此时系统的系统提供了一个shell,但是没有挂载根文件系统,所以能够操作磁盘。注意,这是一个简单的运维环境,缺少很多常用的工具

  • 执行以下命令,激活LVM,并检查文件系统和收缩LV:

收缩LV
# 激活磁盘上的蠲租
vgchange -ay

#强制进行文件系统自检
e2fsck -fy /dev/ubuntu-vg/ubuntu-lv

#缩减LVM
lvm lvreduce -L 400G /dev/mapper/ubuntu--vg-ubuntu--lv

警告

这里我实际上遇到了一个问题,就是Ubuntu发行版的 initramfs 实际上缺少维护LVM的工具,例如执行 lvreduce 命令实际上该工具没有集成在initramfs中。所以上述执行过程会报错,如果要通过这种方式,实际上要自己重构initramfs,将必要的哦凝固集成进去。

所以,我最终改成采用 Ubuntu Live CD 来完成上述操作,其步骤区别仅仅是启动方式不同。