RAID 与 LVM 在 Linux 上的组合实践:在线扩容与快照管理

在 Linux 服务器运维中,存储管理始终是核心课题之一。RAID 提供磁盘级别的冗余与性能,LVM 则赋予逻辑卷层级的灵活性。将两者结合,既能保障数据安全,又能实现在线扩容与快照管理,是生产环境中广泛采用的方案。本文将从架构设计、实践操作到快照管理,系统性地介绍 RAID 与 LVM 的组合使用。

一、为什么需要 RAID + LVM 组合

单独使用 RAID 或 LVM 都有各自的局限。RAID 的容量在创建时基本固定,扩容往往需要重建阵列;而 LVM 虽然灵活,但缺乏物理磁盘级的冗余能力。将二者叠加,可以形成清晰的分层结构:

  • 物理层:多块硬盘通过 RAID 控制器或软件 RAID 组成冗余阵列。
  • 卷组层:将 RAID 设备注册为 LVM 物理卷(PV),加入卷组(VG)。
  • 逻辑层:在卷组上创建逻辑卷(LV),按需分配给业务使用。

这种分层带来的好处是:底层 RAID 负责磁盘故障容错,上层 LVM 负责容量弹性和快照。扩容时只需关注 LVM 层面,无需触碰 RAID 阵列。

二、环境准备与 RAID 构建

假设服务器有四块 1TB 硬盘(/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde),我们使用 mdadm 创建 RAID 10 阵列,兼顾性能与冗余。

# 安装 mdadm
sudo apt install mdadm -y

# 创建 RAID 10 阵列
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 \
  /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 查看阵列状态
cat /proc/mdstat

创建完成后,将阵列信息写入配置文件,确保重启后自动组装:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

此时 /dev/md0 就是一个具备冗余能力的块设备,容量约为 2TB(四块盘做 RAID 10,可用容量为一半)。

三、在 RAID 之上构建 LVM

接下来把 /dev/md0 纳入 LVM 管理体系。

# 创建物理卷
sudo pvcreate /dev/md0

# 创建卷组,命名为 vg_data
sudo vgcreate vg_data /dev/md0

# 创建逻辑卷,分配 500GB 给业务使用
sudo lvcreate -L 500G -n lv_app vg_data

# 格式化并挂载
sudo mkfs.ext4 /dev/vg_data/lv_app
sudo mkdir -p /data/app
sudo mount /dev/vg_data/lv_app /data/app

为了开机自动挂载,需要在 /etc/fstab 中添加对应条目。建议使用 UUID 而非设备路径,避免设备名变化导致挂载失败:

sudo blkid /dev/vg_data/lv_app
# 将输出的 UUID 写入 /etc/fstab

至此,一个兼具冗余与弹性的存储卷就搭建完成了。

四、在线扩容实践

LVM 最大的优势之一就是在线扩容。假设业务增长,/data/app 空间不足,我们有两种扩容路径。

4.1 卷组有剩余空间时

如果卷组中还有未分配空间,直接扩展逻辑卷并调整文件系统即可:

# 扩展逻辑卷增加 200GB
sudo lvextend -L +200G /dev/vg_data/lv_app

# 在线扩展 ext4 文件系统
sudo resize2fs /dev/vg_data/lv_app

如果是 XFS 文件系统,则使用 xfs_growfs /data/app。整个过程无需卸载,业务无感知。

4.2 卷组空间不足时

当卷组空间耗尽,就需要先扩充底层 RAID 阵列。假设新增两块 1TB 硬盘(/dev/sdf、/dev/sdg),将其加入现有 RAID 10:

# 将新盘加入阵列
sudo mdadm --add /dev/md0 /dev/sdf
sudo mdadm --add /dev/md0 /dev/sdg

# 扩容 RAID 阵列至 6 块盘
sudo mdadm --grow /dev/md0 --raid-devices=6

RAID 重塑过程可能持续数小时,期间系统仍可正常读写。完成后,需要扩展物理卷以识别新增容量:

sudo pvresize /dev/md0
sudo vgs   # 确认卷组容量已增加

之后重复 lvextendresize2fs 即可完成端到端扩容。

五、快照管理

LVM 快照基于写时复制(CoW)机制,可以在几乎不中断业务的情况下创建某一时刻的数据副本,非常适合备份和测试场景。

5.1 创建快照

# 创建 100GB 的快照卷
sudo lvcreate -L 100G -s -n lv_app_snap /dev/vg_data/lv_app

快照容量不需要等于原卷大小,只需容纳快照生命周期内发生变化的数据量。如果变化量超过快照空间,快照会失效,因此需要合理预估。

5.2 挂载与使用快照

sudo mkdir -p /mnt/snapshot
sudo mount /dev/vg_data/lv_app_snap /mnt/snapshot

挂载后可以像普通目录一样读取快照数据,用于验证数据、恢复误删文件,或作为备份源。

5.3 快照的监控与清理

快照使用率是运维重点监控指标:

sudo lvs -o lv_name,lv_size,data_percent vg_data

data_percent 表示快照空间使用比例,接近 100% 时需要及时处理。使用完毕的快照应及时删除,避免影响原卷性能:

sudo umount /mnt/snapshot
sudo lvremove /dev/vg_data/lv_app_snap

六、注意事项与最佳实践

在实际生产环境中,有几点值得特别留意:

  1. RAID 重塑期间避免高强度写入:重塑会占用大量 I/O,建议安排在业务低峰期。
  2. 快照不是备份:快照与原卷位于同一卷组,若底层 RAID 整体故障,快照同样丢失。快照应配合异地备份使用。
  3. 文件系统选择:ext4 支持在线缩小,XFS 只能扩大不能缩小,扩容前需确认文件系统类型。
  4. 监控告警:对 RAID 阵列状态(/proc/mdstat)、LVM 空间使用率、快照使用率设置监控,提前发现隐患。
  5. 操作前备份元数据vgcfgbackup 可以备份卷组配置,便于故障恢复。

结语

RAID 与 LVM 的组合是 Linux 存储管理的经典范式。RAID 提供底层的数据冗余,LVM 提供上层的灵活调度,二者结合后,在线扩容和快照管理都变得从容可控。掌握这套方案,不仅能提升存储资源的利用率,也能显著降低运维过程中因容量不足或数据误操作带来的风险。建议在测试环境中完整演练一遍扩容与快照流程,再应用到生产系统。

未经允许不得转载:任鹏个人博客 » RAID 与 LVM 在 Linux 上的组合实践:在线扩容与快照管理

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏