LVM分区创建、数据迁移与重新挂载操作文档

0 阅读9分钟

LVM分区创建、数据迁移与重新挂载操作文档

文档说明

  1. 操作场景:将原有数据目录(/opt/data)迁移至新建LVM逻辑卷,提升磁盘存储的灵活性(扩容、缩容等),可在虚拟机上先操作
  2. 操作对象:Linux服务器(以CentOS 7/8为例)
  3. 前置条件:
    • 拥有服务器root权限(避免权限不足导致操作失败)
    • 确认待使用磁盘(如/dev/vdb)有未分区空闲空间
    • 备份/opt/data下重要数据(避免操作失误导致数据丢失,双重保障)
  4. 核心工具:fdisk(分区)、pvcreate/vgcreate/lvcreate(LVM创建)、mkfs(格式化)、mount/umount(挂载/卸载)、rsync(数据迁移,比cp更稳定)

一、前置准备工作

1. 安装LVM相关工具(若未安装)

# CentOS/RHEL 系列
yum install lvm2 -y

# Ubuntu/Debian 系列
apt install lvm2 -y

2. 查看磁盘与分区状态(确认空闲磁盘)

# 查看所有磁盘及分区信息,确认目标磁盘(如/dev/vdb)
fdisk -l

# 查看当前挂载状态,记录/opt/data的原有挂载信息(如原有分区/dev/vdb1)
df -hT

3. 确认目标服务名称(后续关闭/启动服务)

# 示例:假设服务名称为data-service(请替换为实际服务名)
# 查看服务状态
systemctl status data-service

# 记录服务启动/停止命令(后续复用)
# 启动:systemctl start data-service
# 停止:systemctl stop data-service

二、详细操作步骤

步骤1:创建LVM分区(完整流程:分区→物理卷→卷组→逻辑卷→格式化)

1.1 磁盘分区(设置LVM专用分区类型8e

以目标磁盘/dev/vdb为例,创建一个新分区/dev/vdb2(避免覆盖原有分区/dev/vdb1

# 进入fdisk分区工具,操作/dev/vdb磁盘
fdisk /dev/vdb

# 后续交互命令(按顺序输入):
n  # 新建分区
p  # 选择主分区(新手优先选择主分区,简单易管理)
<回车>  # 分区号,默认即可(如2)
<回车>  # 起始扇区,默认即可(使用空闲磁盘起始位置)
<回车>  # 结束扇区,默认即可(使用全部空闲空间,或指定大小如+100G)
t  # 修改分区类型
<回车>  # 选择刚创建的分区(如2)
8e  # 改为LVM专用分区类型(8e对应LVM)
w  # 保存分区表并退出fdisk
1.2 刷新磁盘分区表(让系统识别新分区)
partprobe /dev/vdb
1.3 创建LVM物理卷(PV)
# 基于刚创建的分区/dev/vdb2创建物理卷
pvcreate /dev/vdb2

# 验证物理卷创建结果(查看PV状态、容量)
pvdisplay
1.4 创建LVM卷组(VG)

卷组名称自定义(示例:data-vg),后续可向该卷组添加更多物理卷扩容

# 基于物理卷/dev/vdb2创建卷组data-vg
vgcreate data-vg /dev/vdb2

# 验证卷组创建结果(查看VG名称、容量、包含的PV)
vgdisplay
1.5 创建LVM逻辑卷(LV)

逻辑卷名称自定义(示例:data-lv),指定容量(示例:使用卷组全部容量-l 100%VG,或指定大小-L 100G

# 基于卷组data-vg创建逻辑卷data-lv,使用全部卷组容量
lvcreate -l 100%VG -n data-lv data-vg

# 验证逻辑卷创建结果(查看LV路径、容量、所属VG)
# 核心路径:/dev/mapper/data--vg-data--lv(或简化路径/dev/data-vg/data-lv)
lvdisplay
1.6 格式化逻辑卷(必须步骤,否则无法挂载)

选择文件系统类型(推荐xfsext4,CentOS 7默认xfs

# 格式化逻辑卷(xfs格式,示例路径)
mkfs.xfs /dev/mapper/data--vg-data--lv

# 若需ext4格式,使用以下命令
# mkfs.ext4 /dev/mapper/data--vg-data--lv
1.7 临时挂载逻辑卷(验证可用性,后续将替换为原目录)
# 先创建临时挂载目录(可选,仅用于验证)
mkdir -p /opt/data_temp

# 挂载逻辑卷到临时目录
mount /dev/mapper/data--vg-data--lv /opt/data_temp

# 验证挂载结果(查看是否挂载成功、磁盘容量)
df -hT | grep data-lv

# 验证完成后,卸载临时目录(准备后续正式挂载)
umount /opt/data_temp
rm -rf /opt/data_temp

步骤2:停止相关服务,迁移原有数据

2.1 停止目标服务(避免数据读写冲突,保证数据一致性)
# 替换为实际服务名称(示例:data-service)
systemctl stop data-service

# 验证服务是否停止(确保状态为inactive (dead))
systemctl status data-service
2.2 迁移/opt/data数据至临时目录(或直接迁移,推荐rsync更稳定)

rsync相比cp -r,支持断点续传、保留文件权限/属性,更适合生产环境数据迁移

# 方法1:使用rsync迁移(推荐,保留文件所有属性,显示迁移进度)
rsync -avz /opt/data/ /opt/new/

# 方法2:使用cp -r迁移(你的原始命令,备用)
# cp -rp /opt/data /opt/new (添加-p参数保留文件权限)

# 验证数据迁移结果(对比源目录和目标目录的文件数量、大小,确保无丢失)
diff -r /opt/data /opt/new  # 无输出则表示数据一致
du -sh /opt/data  # 查看源目录大小
du -sh /opt/new   # 查看目标目录大小,应与源目录一致

步骤3:卸载原有分区(解除原目录与旧分区的关联)

3.1 先确认原有分区是否被占用(避免卸载失败)
# 方法1:查看/opt/data的占用进程
fuser -mv /opt/data

# 方法2:查看/opt/data的打开文件
lsof /opt/data
3.2 若有占用进程,先终止进程(或再次确认服务已停止)
# 终止占用进程(替换为实际进程ID,示例:12345)
kill -9 12345
3.3 卸载原有分区(两种方式二选一,优先选择挂载点卸载)
# 方式1:通过挂载点卸载(推荐,更稳妥)
umount /opt/data

# 方式2:通过设备名卸载(备用,若方式1失败)
# umount /dev/vdb1
3.4 验证卸载结果(/opt/data不再关联任何设备)
df -hT | grep /opt/data  # 无输出则表示卸载成功

步骤4:挂载LVM逻辑卷至原目录/opt/data

4.1 挂载逻辑卷到/opt/data
# 挂载LVM逻辑卷到原目录(核心命令,路径与步骤1.5的LV路径一致)
mount /dev/mapper/data--vg-data--lv /opt/data
4.2 验证挂载结果(确认逻辑卷已成功挂载到/opt/data
df -hT | grep /opt/data
# 输出应包含:/dev/mapper/data--vg-data--lv  xfs/ext4  容量  已用  可用  使用率  /opt/data
4.3 恢复原有数据(将迁移至/opt/new的数据复制回/opt/data
# 用rsync恢复数据(保留属性,覆盖空目录/opt/data)
rsync -avz /opt/new/ /opt/data/

# 验证数据恢复结果(确保数据完整)
diff -r /opt/new /opt/data
du -sh /opt/data
4.4 配置开机自动挂载(避免服务器重启后挂载失效,核心优化步骤)

若不配置,重启服务器后逻辑卷将无法自动挂载,导致服务异常

# 步骤1:查看LVM逻辑卷的UUID(唯一标识,避免设备名变更导致挂载失败)
blkid /dev/mapper/data--vg-data--lv

# 示例输出:/dev/mapper/data--vg-data--lv: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="xfs"

# 步骤2:编辑/etc/fstab文件,添加自动挂载配置
vi /etc/fstab

# 步骤3:在文件末尾添加以下内容(复制上述UUID,替换对应字段)
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /opt/data  xfs  defaults  0  0
# 字段说明:UUID → 逻辑卷唯一标识;/opt/data → 挂载点;xfs → 文件系统类型;defaults → 挂载选项;0 0 → 备份与检查参数

# 步骤4:验证/etc/fstab配置是否正确(无报错则表示配置正常)
mount -a

# 步骤5:再次验证挂载状态(确保开机自动挂载配置生效)
df -hT | grep /opt/data

步骤5:启动服务,验证业务可用性

5.1 启动目标服务
# 替换为实际服务名称(示例:data-service)
systemctl start data-service
5.2 验证服务运行状态
# 确保服务状态为active (running)
systemctl status data-service

# 查看服务日志,确认无报错(示例日志路径,替换为实际路径)
tail -f /var/log/data-service.log
5.3 验证业务最终可用性(关键步骤)
  • 访问该服务对应的业务功能(如接口调用、页面访问等)
  • 查看/opt/data目录下是否有新的业务数据生成(确认读写正常)
  • 再次验证挂载状态(确保服务运行过程中挂载未失效)
df -hT | grep /opt/data

步骤6:清理临时文件(可选,生产环境建议保留备份一段时间后再清理)

# 确认数据完整、业务正常后,删除临时目录/opt/new
# rm -rf /opt/new

三、常见异常处理

  1. 卸载失败:umount: /opt/data: target is busy.
    • 原因:目录被进程占用,或服务未完全停止
    • 解决:使用fuser -mv /opt/data查看占用进程,kill -9终止进程,或重启服务器后再尝试卸载(需先停止服务)
  2. 挂载失败:mount: /opt/data: wrong fs type, bad option, bad superblock...
    • 原因:逻辑卷未格式化,或文件系统类型不匹配,或/etc/fstab配置错误
    • 解决:重新格式化逻辑卷(mkfs.xfs),检查/etc/fstab中的文件系统类型与实际一致
  3. 开机自动挂载失效:重启后/opt/data未挂载
    • 原因:/etc/fstab配置错误(UUID错误、挂载点错误、文件系统类型错误)
    • 解决:编辑/etc/fstab修正错误,执行mount -a验证,重启服务器后再次检查

四、后续优化建议

  1. 定期备份/etc/fstab文件(避免挂载配置丢失)
  2. 若后续需要扩容LVM,可执行:vgextend(扩展卷组)→ lvextend(扩展逻辑卷)→ xfs_growfs/resize2fs(扩展文件系统)
  3. 监控/opt/data目录的磁盘使用率,避免磁盘满导致业务异常

总结

  1. 整个操作的核心是保证数据一致性(停止服务、可靠迁移、验证数据)和挂载有效性(格式化、配置/etc/fstab)。
  2. LVM创建的完整流程是「磁盘分区(8e类型)→ PV → VG → LV → 格式化 → 挂载」,缺一不可。
  3. 操作完成后必须验证「服务运行状态」和「业务可用性」,确保生产环境无影响。