Ubuntu Server 23.04下基于LVM实现NVMe磁盘镜像配置及挂载疑问咨询
嗨,Christopher!我来一步步帮你理清这个LVM镜像配置的思路和操作步骤,顺便解答你的挂载疑问~
首先先纠正几个小概念:你提到的“2 drives act as one”如果是指合并容量,那是LVM里将物理卷(PV)加入同一个卷组(VG)的操作;而你说的“镜像到另外2块盘”,其实用LVM的镜像逻辑卷(LV)就能实现,不需要单独把后2块盘再建一个独立VG(当然也可以这么做,但不是最优解)。下面分两种方案给你参考,先讲最推荐的通用方案:
推荐方案:单卷组+镜像逻辑卷(最灵活)
这个方案把4块NVMe都加入同一个卷组,然后创建带镜像的逻辑卷,LVM会自动把镜像副本分散到不同的物理盘上,保证冗余性。
1. 准备物理卷(PV)
先确认你的NVMe磁盘路径(通常是/dev/nvme0n1、/dev/nvme1n1、/dev/nvme2n1、/dev/nvme3n1),确保磁盘无重要数据(操作会清盘),然后为每块盘创建PV:
pvcreate /dev/nvme0n1 pvcreate /dev/nvme1n1 pvcreate /dev/nvme2n1 pvcreate /dev/nvme3n1
2. 创建卷组(VG)
把4块PV全部加入同一个卷组,比如命名为vg_data:
vgcreate vg_data /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
3. 创建镜像逻辑卷(LV)
创建一个带1份镜像副本的逻辑卷(总可用容量等于2块4T盘的总和,也就是8T,因为镜像会占用一半冗余空间):
lvcreate -L 8T -m 1 -n lv_data vg_data
-m 1表示创建1份镜像副本,总共2份数据(原数据+镜像)-n lv_data是逻辑卷的名字,你可以自定义
4. 格式化逻辑卷
用ext4格式化(也可以选其他文件系统,比如xfs):
mkfs.ext4 /dev/vg_data/lv_data
5. 配置开机自动挂载
你提到的用blkid+fstab是完全正确的,但要注意:是用逻辑卷(LV)的UUID,而不是卷组(VG)的ID,因为VG只是容器,LV才是可挂载的块设备。
- 先获取LV的UUID:
blkid /dev/vg_data/lv_data
- 编辑
/etc/fstab,添加一行(把xxxx-xxxx-xxxx-xxxx替换成你拿到的UUID,/mnt/data是自定义的挂载点):
UUID=xxxx-xxxx-xxxx-xxxx /mnt/data ext4 defaults 0 2
- 创建挂载点并测试挂载:
mkdir -p /mnt/data mount /mnt/data
按你的需求:双卷组跨VG镜像
如果你坚持要把前2块盘做一个VG,后2块做另一个VG再做镜像,也可以这么操作:
1. 创建两个独立卷组
vgcreate vg_main /dev/nvme0n1 /dev/nvme1n1 vgcreate vg_mirror /dev/nvme2n1 /dev/nvme3n1
2. 创建主逻辑卷和镜像逻辑卷
# 在主VG创建8T的逻辑卷 lvcreate -L 8T -n lv_data vg_main # 在镜像VG创建相同大小的逻辑卷 lvcreate -L 8T -n lv_data_mirror vg_mirror
3. 配置跨VG镜像
lvconvert -m 1 /dev/vg_main/lv_data /dev/vg_mirror/lv_data_mirror
4. 格式化与挂载
和上面的步骤一样,只需要挂载/dev/vg_main/lv_data,镜像的LV是后台冗余副本,不需要挂载。
你的挂载疑问解答
- 不需要挂载两个VG或LV:你只需要挂载主逻辑卷就行,镜像副本是LVM后台自动同步的冗余存储,用户完全不需要手动挂载它。
- 用blkid+UUID配置fstab是正确的:相比直接用设备路径(比如
/dev/vg_data/lv_data),UUID更稳定,不会因为磁盘顺序变化导致挂载失败。
最后补充几个小提示:
- 镜像同步过程可能需要一段时间(取决于磁盘大小和速度),可以用
lvs命令查看同步进度。 - 如果某块磁盘故障,你可以用
lvconvert移除故障的镜像副本,替换新磁盘后再重新添加镜像。 - 操作前一定要备份好重要数据,避免意外损失!
备注:内容来源于stack exchange,提问作者Christopher von Blum

