LVM 简介
LVM 是 Linux 系统上一个磁盘映射工具,为 Linux 内核提供虚拟卷宗管理, 原理如图所示,LVM 主要的一个优势就是可以将多个物理磁盘(或分区)合并为一个超大逻辑分区,以满足类似超大数据库文件等存储需求。

LVM 有个局限性就是在将磁盘(或分区)纳入 LVM 管理的时候需要对磁盘或分区进行格式化操作, 这就导致我们无法直接将已经存储了数据的磁盘纳入 LVM 管理。
本案例系统版本
Ubuntu 22.04.3 LTS
具体问题
系统盘上装了 Docker ,Docker 目录迅速膨胀,导致系统磁盘空间不足,购买一块新硬盘安装后发现无法将新增硬盘空间添加到系统盘所在的卷宗,由于安装系统时没有使用 LVM 管理系统盘。
解决方案
-
将新增硬盘使用 LVM 管理,并创建逻辑卷宗
-
将原系统文件全部 copy 到 LVM 管理的逻辑卷宗
-
引导系统从 LVM 逻辑卷宗启动
-
确认新卷宗启动正常
-
将原系统所在硬盘格式
-
将原系统盘纳入 LVM 管理
-
使用 LVM 对系统逻辑卷宗扩容

方案难点
该方案难点是迁移系统,Linux 系统虽然是基于文件的系统,但是文件中涉及到文件软硬链接, mount 目录, 虚拟目录,socket 文件等,并不是简单的 copy 操作; 还有就是迁移后的系统的启动引导流程需要处理,在处理的过程中要格外小心,稍有不慎就可能导致系统无法启动、文件丢失等严重后果。
方案操作过程
该方案是从虚拟机上多次尝试最终验证成功所得;
在操作时务必确认清楚当前命令在做什么,命令参数需要根据实际情况调整。
一. 新磁盘操作
-
添加磁盘
-
fdisk -l
查看新增磁盘名称 如果新磁盘为 “/dev/nvme1n1”
fdisk /dev/nvme1n1
fdisk 命令进入操作模式按 m 键可以展示协助说明
新建 gpt 分区表, 然后 new 两个分区,一个 EFI ,另一个 linux 系统分区
使用 fdisk -l 查看新分区,如果为 /dev/nvme1n1p1 和 /dev/nvme1n1p2
apt install lvm2
安装 lvm2 工具套件
pvcreate /dev/nvme1n1p2
将新磁盘的第二分区使用 lvm 管理,使用 pvdisplay 命令查看新增的物理磁盘名(一般与原名一样 /dev/nvme1n1p2), pvs 命令也可以查看
vgcreate vg0 /dev/nvme1n1p2
创建 volume group (名称vg0) 可以使用 vgs 或 vgdisplay 命令查看创建结果
lvcreate -n lv0 -L 15G vg0
创建 logic volume (名称 lv0, 大小 15G 按需指定)之后使用 lvs 或 lvdisplay 命令可以查看创建的逻辑分区
fdisk -l
查看新建的逻辑卷 id (如果新逻辑卷为 /dev/mapper/vg0-lv0 )
mkfs.ext4 /dev/mapper/vg0-lv0
设置文件格式为 ext4
mkfs.fat -F32 /dev/nvme1n1p1
给 EFI 系统分区设置文件格式 fat32
二. 迁移系统
mkdir /root2
创建分区挂载点
mount /dev/mapper/vg0-lv0 /root2
挂载新分区
tar -cf - --one-file-system / | tar -xf - -C /root2
copy 系统文件到目标 新分区, 提示删除开头的 / 是安全警告可以忽略,提示忽略套接字也正常
mount /dev/nvme1n1p1 /root2/boot/efi
将新的 EFI 引导分区挂载到新系统的 /boot/efi 目录
- mount 必要节点
sudo mount --bind /dev /root2/dev
sudo mount --bind /proc /root2/proc
sudo mount --bind /sys /root2/sys
chroot /root2
切换到新系统盘
- 修改 mount 映射
vi /etc/fstab
修改 / 对应的 uuid 为 /dev/mapper/vg0-lv0 分区的 id,
修改 boot/efi 的 uuid 为 /dev/nvme1n1p1 EFI 分区的 id,
blkid 命令可以查看 id
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
安装引导程序,并创建系统引导配置 ubuntu (ubuntu 名称不可随意指定)
可能会弹出警告: 提示 EFI 变量无法设置在当前系统,需要手动完成 GRUB 设置, 可忽略
grub-mkconfig -o /boot/grub/grub.cfg
更新新系统下的 grub 配置
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --removable
重新安装引导程序,并创建系统引导配置
grub-mkconfig -o /boot/grub/grub.cfg
再次更新新系统下的 grub 配置
21 . 重启系统到固件,选择启动磁盘为新增磁盘
三. 处理旧的系统盘
pvcreate /dev/nvme0n1
整个磁盘创建lvm物理盘
vgextend vg0 /dev/nvme0n1
将新物理盘符添加到磁盘组 vg0
lvextend -l +100%FREE /dev/mapper/vg0-lv0
将逻辑盘扩容到 vg0 的最大可用空间
resize2fs /dev/mapper/vg0-lv0
将文件系统扩容到逻辑盘符的最大空间
操作失误遇到的问题
如果磁盘 已经被 lvm 管理, 然后你又手动的对磁盘进行分区操作,那么对应的 lvm 逻辑分区不会自动消失, 导致 /dev/mapper/ 下有个 lv 的映射一直 lvremove 删不掉
可使用 dmsetup ls 查看映射信息,然后使用 dmsetup remove 删除对应的逻辑映射。
设置面板无法打开
过了几天发现系统设置面板无法打开,不确定是不是由于系统扩容引起的,解决办法如下
apt install gnome-control-center 按转完即可。















暂无评论内容