Linux LVM 实战:系统盘扩容与 /var /home /opt 目录独立迁移指南
2026-01-28 / Linux / 9 次围观 / 0 次吐槽 /在生产环境中,随着业务运行,系统盘(根目录 /)往往会因为日志、应用数据增长而空间告急。最佳实践是将变动频繁的目录(如 /var、/opt、/home)从根目录剥离,挂载到独立的 LVM 逻辑卷上。
本次实战目标:
操作系统:EulerOS (基于 CentOS)
Swap: 扩容至 64G
Root (/): 扩容至 100G
New /home: 分配 200G
New /var: 分配 50G
New /opt: 分配 20G
⚠️ 风险警告
数据无价:涉及磁盘分区和文件系统操作,请务必在操作前对重要数据进行快照或备份。
谨慎操作 /var:
/var目录包含系统运行时的关键文件,迁移过程中需尽量停止业务服务。
2. 准备阶段:识别磁盘与创建分区
首先查看当前磁盘挂载情况:
lsblk
df -Th
假设新加的空间在 /dev/sda 上(例如云硬盘扩容后),我们需要先创建新分区纳管这部分空间。
假设新加的空间在 /dev/sda 上(例如云硬盘扩容后),我们需要先创建新分区纳管这部分空间。
# 1. 创建新分区
fdisk /dev/sda
# 交互步骤:
# n (新建) -> p (主分区) -> 回车 (默认号) -> 回车 (默认起始) -> 回车 (默认结束)
# t (修改类型) -> 8e (LVM)
# w (保存退出)
# 2. 刷新分区表(如果提示重启,可先尝试此命令)
partprobe
3. LVM 扩容基础:物理卷与卷组
将新分区加入现有的 LVM 卷组(VG)。
# 1. 创建物理卷 (PV)
# 假设新分区为 /dev/sda5
pvcreate /dev/sda5
# 2. 查看当前卷组名称
vgs
# 假设卷组名为 bigcloud-vg
# 3. 扩容卷组
vgextend bigcloud-vg /dev/sda5
4. 调整现有逻辑卷 (Root & Swap)
4.1 扩容 Swap (至 64G)
Swap 无法在线扩容,必须先关闭。
# 关闭 Swap
swapoff -a
# 扩展逻辑卷 (L 表示指定具体大小)
lvextend -L 64G /dev/bigcloud-vg/swap
# 重新格式化 (扩容后必须重做 mkswap)
mkswap /dev/bigcloud-vg/swap
# 重新挂载
swapon -a
4.2 扩容 Root (至 100G)
根分区支持在线扩容,关键在于扩展后刷新文件系统。
# 1. 扩展逻辑卷
lvextend -L 100G /dev/bigcloud-vg/root
# 2. 刷新文件系统 (重点!)
# 先确认文件系统类型:
df -T /
# 如果是 XFS (CentOS 7+, EulerOS):
xfs_growfs /
# 如果是 EXT4:
resize2fs /dev/bigcloud-vg/root
5. 新建分区与数据迁移 (关键步骤)
我们需要将 /opt, /home, /var 的数据迁移到新分区。以 /opt 为例,其他同理。
5.1 创建逻辑卷并格式化
# 创建 LV
lvcreate -L 20G -n opt bigcloud-vg
lvcreate -L 200G -n home bigcloud-vg
lvcreate -L 50G -n var bigcloud-vg
# 格式化 (推荐 XFS,如果是 ext4 请换成 mkfs.ext4)
mkfs.xfs /dev/bigcloud-vg/opt
mkfs.xfs /dev/bigcloud-vg/home
mkfs.xfs /dev/bigcloud-vg/var
5.2 数据同步 (以 /opt 为例)
核心思路:挂载新盘到临时目录 -> 同步数据 -> 挂载新盘到正式目录。
# 1. 临时挂载
mkdir /mnt/new_opt
mount /dev/bigcloud-vg/opt /mnt/new_opt
# 2. 同步数据 (使用 rsync 保持权限和属性)
rsync -av /opt/ /mnt/new_opt/
# 3. 卸载临时挂载
umount /mnt/new_opt
# 确认数据无误后,清空原目录
# rm -rf /opt/*
# 4. 正式挂载
mount /dev/bigcloud-vg/opt /opt
注意:对
/var进行迁移时,建议进入单用户模式或停止 Docker、Database、Rsyslog 等服务,防止数据不一致。
6. 进阶技巧:如何清理被挂载点“隐藏”的旧数据
当你把新硬盘挂载到 /var 后,原根目录下 /var 的旧数据依然占用着磁盘空间,但直接用 rm 删除会报错或误删新数据。
解决方法:Bind Mount (绑定挂载)
# 1. 将根目录绑定挂载到一个临时点
mkdir /mnt/old_root
mount --bind / /mnt/old_root
# 2. 此时 /mnt/old_root/var 就是被隐藏的旧数据
# 确认无误后清理
rm -rf /mnt/old_root/var/*
# 3. 如果遇到 "device or resource busy" (如 rpc_pipefs)
# 直接忽略即可,那是内存虚拟文件系统,不占硬盘空间。
# 4. 卸载
umount /mnt/old_root
rmdir /mnt/old_root
7. 最后一步:配置自动挂载
修改 /etc/fstab 确保重启后挂载生效。
vim /etc/fstab
添加如下内容:
/dev/mapper/bigcloud--vg-opt /opt xfs defaults 0 0
/dev/mapper/bigcloud--vg-home /home xfs defaults 0 0
/dev/mapper/bigcloud--vg-var /var xfs defaults 0 0
验证配置:
mount -a
# 如果没有报错,说明配置正确
8. 总结
通过 LVM 我们可以灵活地管理 Linux 磁盘空间。本次操作难点在于文件系统的刷新(xfs_growfs)以及使用 Bind Mount 技术安全清理被遮盖的旧数据
- 上一篇:Zabbix7.4实现钉钉告警-内置(JavaScript)脚本
- 下一篇:
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.