Linux服务器根目录爆满?5分钟学会LVM动态扩容(附XFS/ext4双方案)
凌晨三点,服务器监控告警突然响起,屏幕上刺眼的红色提示“根目录使用率超过95%”。这大概是每个运维工程师都经历过的噩梦时刻。应用日志疯狂写入,数据库即将停止响应,而业务还在高峰期——你需要的不是重启服务器,而是一个能在几分钟内解决问题的方法。今天,我们就来彻底解决这个痛点,通过LVM技术实现根目录的动态扩容,让你在紧急情况下也能从容应对。
LVM(Logical Volume Manager)逻辑卷管理,是Linux系统中一种强大的磁盘管理机制。它最大的优势在于能够在不中断服务的情况下动态调整存储空间,这对于生产环境来说简直是救命稻草。想象一下,传统分区方式下,要扩展根目录几乎意味着备份数据、重新分区、恢复数据这一系列繁琐操作,而LVM让你只需几条命令就能完成扩容。
1. 理解LVM:为什么它能救你于水火
在深入操作之前,我们先搞清楚LVM到底是怎么工作的。很多运维新手对LVM的概念感到困惑,其实它的设计思想相当直观。
1.1 LVM的核心组件
LVM将物理存储设备抽象成几个逻辑层次,这种分层设计正是它灵活性的来源:
-
物理卷(Physical Volume, PV):这是LVM的基础构建块。可以是整个物理磁盘(如
/dev/sdb),也可以是磁盘上的一个分区(如/dev/sdb1)。创建物理卷的过程实际上是在这些存储设备上添加LVM元数据,让系统知道“这个设备可以参与LVM管理”。 -
卷组(Volume Group, VG):这是LVM的“存储池”。你可以把多个物理卷加入同一个卷组,系统会把这些物理卷的存储空间合并起来,形成一个统一的大容量存储池。比如,你可以把三块500GB的硬盘加入一个名为
vg_data的卷组,系统看到的就是一个1.5TB的大硬盘。 -
逻辑卷(Logical Volume, LV):这才是最终被操作系统使用的“分区”。逻辑卷从卷组中划分空间创建,可以动态调整大小,也可以跨越多个物理卷。你的根目录
/、/home、/var等通常就挂载在不同的逻辑卷上。
这种架构带来的直接好处是存储管理的灵活性。传统分区方式下,每个分区的大小在创建时就固定了,后期调整极其困难。而LVM允许你在卷组内自由分配空间给各个逻辑卷,就像在一个大水池里用管道给不同的水桶加水,哪个水桶需要更多水,就调整对应的管道阀门。
1.2 LVM与传统分区的对比
为了更直观地理解LVM的优势,我们来看一个实际场景对比:
| 特性 | 传统分区 | LVM逻辑卷 |
|---|---|---|
| 扩容灵活性 | 基本无法在线扩容,需要备份、重新分区、恢复 | 支持在线动态扩容,无需停机 |
| 空间利用率 | 容易产生空间浪费,某个分区满了而其他分区空闲 | 卷组内空间共享,利用率最大化 |
| 跨磁盘管理 | 每个分区只能在一个物理磁盘上 | 逻辑卷可以跨越多个物理磁盘 |
| 快照功能 | 不支持或需要第三方工具 | 原生支持快照,便于备份和测试 |
| 迁移便利性 | 迁移困难,需要完整复制 | 逻辑卷可以轻松迁移到其他物理卷 |
| 性能影响 | 无额外开销 | 轻微性能开销,现代硬件上几乎可忽略 |
我在实际运维中遇到过这样一个案例:某电商平台的数据库服务器,采用传统分区方式,/var分区(存放数据库文件)只有200GB,而/home分区却有1TB且几乎空着。当促销活动导致数据激增时,/var分区爆满,数据库服务中断。虽然/home有大量空闲空间,却无法直接利用。如果当初使用了LVM,只需一条命令就能把/home的空间划给/var,避免业务中断。
1.3 检查你的系统是否使用LVM
在开始操作前,先确认你的系统是否已经使用了LVM。这很简单,几个命令就能搞清楚:
# 查看逻辑卷信息
lvdisplay
# 查看卷组信息
vgdisplay
# 查看物理卷信息
pvdisplay
如果这些命令返回了信息,说明你的系统已经使用了LVM。特别要注意查看根目录对应的逻辑卷:
# 查看根目录挂载的设备
df -h /
# 结合lsblk查看更详细的信息
lsblk -f
典型的输出可能像这样:
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
├─vda1 ext4 c236b... /boot
└─vda2 LVM2_member xyz12...
├─centos-root xfs 9a8b7... /
└─centos-swap swap 1b2c3... [SWAP]
这里可以看到,vda2是一个物理卷(LVM2_member),它属于一个卷组(虽然这里没显示卷组名),而centos-root和centos-swap是这个卷组中的两个逻辑卷,分别挂载到根目录和作为交换分区。
注意:如果你的系统没有使用LVM,根目录直接挂载在类似
/dev/vda1这样的分区上,那么本文的方法不适用。你需要先备份数据,然后重新规划分区方案。对于生产服务器,我强烈建议在新部署时就采用LVM架构。
2. 紧急情况下的快速诊断与准备
当根目录爆满告警响起时,盲目操作是危险的。正确的做法是先快速诊断,确定问题根源和可用资源。
2.1 快速定位空间占用
首先,我们需要知道到底是什么占用了根目录的空间。du命令是你的好朋友:
# 查看根目录下各目录的大小,按大小排序
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
这个命令会显示根目录下最大的20个目录。常见的大空间占用者包括:
/var/log:系统日志,特别是某些应用疯狂写日志时/var/lib/docker:Docker容器和镜像/home:用户数据/tmp:临时文件/var/cache:各种缓存文件
如果发现是日志文件过大,可以立即清理:
# 清理系统日志(保留最近7天)
sudo journalctl --vacuum-time=7d
# 查看并清理特定应用日志
sudo find /var/log -name "*.log" -type f -size +100M -exec ls -lh {} \;
但请注意,清理文件只是临时解决方案。如果业务在持续产生大量数据,很快空间又会被占满。这时候,扩容才是根本解决方法。
2.2 检查现有LVM配置
在扩容之前,必须了解当前的LVM配置。我们需要知道三个关键信息:
- 根目录对应的逻辑卷路径
- 所属的卷组名称
- 卷组中是否有可用空间
# 综合查看命令
echo "=== 当前磁盘使用情况 ==="
df -h /
echo -e "\n=== 根目录对应的逻辑卷 ==="
lsblk -f | grep -A5 "$(df / | tail -1 | awk '{print $1}')"
echo -e "\n=== 卷组空间使用情况 ==="
vgs
echo -e "\n=== 逻辑卷详细信息 ==="
lvdisplay $(df / | tail -1 | awk '{print $1}' | sed 's/\/dev\///')
假设输出如下:
=== 当前磁盘使用情况 ===
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 48G 2.0G 96% /
=== 根目录对应的逻辑卷 ===
└─centos-root xfs 9a8b7... /
=== 卷组空间使用情况 ===
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <100.00g 0
=== 逻辑卷详细信息 ===
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV Size 50.00 GiB
...
从输出中我们可以看到关键信息:
- 根目录挂载在
/dev/centos/root逻辑卷上 - 属于
centos卷组 - 卷组总大小100GB,已全部分配(VFree为0)
这意味着卷组已经没有空闲空间,我们需要先给卷组添加新的物理存储,然后才能扩展逻辑卷。
2.3 准备新的存储空间
根据你的服务器环境,添加新存储的方式不同:
对于云服务器(如阿里云ECS、腾讯云CVM):
- 在控制台为云服务器挂载新的云盘
- 登录服务器,使用
lsblk查看新磁盘设备名(通常是/dev/vdb、/dev/vdc等) - 不需要重启服务器,系统会自动识别新磁盘
对于VMware/KVM虚拟机:
- 在虚拟化管理界面为虚拟机添加新虚拟磁盘
- 在虚拟机内部执行以下命令扫描新设备:
# 对于SCSI设备 echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan # 或者更简单的方法 for host in /sys/class/scsi_host/host*/scan; do echo "- - -" > $host; done - 使用
lsblk确认新磁盘出现
对于物理服务器:
- 插入新硬盘
- 可能需要重启,或者使用
echo 1 > /sys/class/scsi_device/设备号/device/rescan扫描 - 使用
fdisk -l查看新硬盘
无论哪种环境,添加新存储后,都应该用lsblk或fdisk -l确认新设备。你会看到类似这样的输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 500M 0 part /boot
└─vda2 252:2 0 99.5G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
vdb 252:16 0 100G 0 disk # 这是新添加的磁盘
现在,我们有了新的物理磁盘/dev/vdb,接下来就可以开始扩容操作了。
3. LVM扩容实战:从物理卷到文件系统
这是最核心的部分,我们将一步步完成整个扩容流程。为了让你更清楚每个步骤的作用,我画了一个简单的流程图:
新磁盘(/dev/vdb)
↓
创建分区(/dev/vdb1) → 标记为LVM类型(8e)
↓
创建物理卷(pvcreate)
↓
扩展到卷组(vgextend)
↓
扩展逻辑卷(lvextend)
↓
扩展文件系统(resize2fs或xfs_growfs)
3.1 创建分区并标记为LVM类型
首先,我们需要在新磁盘上创建分区。虽然LVM可以直接使用整个磁盘作为物理卷,但创建分区可以提供更好的灵活性和管理性。
# 使用fdisk对新磁盘进行分区
sudo fdisk /dev/vdb
在fdisk交互界面中,按顺序执行以下操作:
n # 创建新分区
p # 选择主分区
1 # 分区号,默认为1
[回车] # 起始扇区,使用默认值
[回车] # 结束扇区,使用默认值(使用整个磁盘)
t # 更改分区类型
8e # 设置为Linux LVM类型
w # 写入分区表并退出
如果你需要更精确地控制分区大小(比如只使用部分空间),可以在输入结束扇区时指定大小,如+50G表示创建50GB的分区。
重要提示:对于大于2TB的磁盘,需要使用
parted工具而不是fdisk,因为fdisk不支持GPT分区表。使用parted的基本命令如下:sudo parted /dev/vdb (parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) set 1 lvm on (parted) quit
创建分区后,让系统重新读取分区表:
# 对于大多数现代Linux发行版
sudo partprobe /dev/vdb
# 如果partprobe不可用,可以尝试
sudo blockdev --rereadpt /dev/vdb
# 或者重启服务器(最彻底但需要停机)
3.2 创建物理卷并扩展卷组
现在,我们将新分区创建为物理卷,然后将其添加到现有的卷组中。
# 创建物理卷
sudo pvcreate /dev/vdb1
# 查看物理卷创建是否成功
sudo pvs
你应该看到类似这样的输出:
PV VG Fmt Attr PSize PFree
/dev/vda2 centos lvm2 a-- 99.50g 0
/dev/vdb1 lvm2 --- 100.00g 100.00g
注意/dev/vdb1还没有加入任何卷组(VG列为空)。接下来将其加入根目录所在的卷组:
# 首先确认卷组名称(前面vgs命令的输出)
# 假设卷组名是"centos",将其扩展到该卷组
sudo vgextend centos /dev/vdb1
# 验证扩展是否成功
sudo vgs
成功后的输出应该显示卷组有了新的空闲空间:
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 199.50g 100.00g
现在卷组centos的总大小变成了199.5GB,其中100GB是空闲的。这些空闲空间就可以用来扩展逻辑卷了。
3.3 扩展逻辑卷
这是最关键的一步——将卷组的空闲空间分配给根目录的逻辑卷。
# 查看当前逻辑卷信息,确认要扩展的逻辑卷路径
sudo lvs
# 扩展逻辑卷,这里有两种方式:
# 方式1:扩展指定大小(如增加50GB)
sudo lvextend -L +50G /dev/centos/root
# 方式2:使用所有可用空间(推荐,避免空间浪费)
sudo lvextend -l +100%FREE /dev/centos/root
我通常推荐使用+100%FREE,这样可以充分利用新增的空间。命令执行成功后,你会看到类似输出:
Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 150.00 GiB (38400 extents).
Logical volume centos/root successfully resized.
注意参数区别:
-L指定绝对或相对大小(如+50G或150G),-l指定扩展单元数量(如+100%FREE表示使用所有空闲空间)。如果记混了,系统会给出明确的错误提示。
3.4 扩展文件系统(XFS vs ext4)
逻辑卷扩展完成后,操作系统还不能立即使用新增的空间,因为文件系统还不知道底层存储变大了。这是很多新手容易忽略的一步,也是XFS和ext4文件系统处理方式不同的地方。
对于XFS文件系统
XFS是CentOS 7/RHEL 7及更新版本的默认文件系统,也是很多云服务器的选择。
# 首先确认文件系统类型
df -T / | tail -1 | awk '{print $2}'
# 如果是xfs,使用xfs_growfs
sudo xfs_growfs /
# 或者指定挂载点
sudo xfs_growfs /dev/centos/root
XFS文件系统的扩展是在线实时完成的,不会中断服务。扩展过程中,你可以看到类似这样的输出:
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 39321600
对于ext2/ext3/ext4文件系统
ext4是Ubuntu等发行版的默认文件系统,也广泛用于各种Linux系统。
# 确认是ext4文件系统后,使用resize2fs
sudo resize2fs /dev/centos/root
resize2fs命令会遍历并调整整个文件系统,对于大容量磁盘可能需要一些时间。你可能会看到这样的进度信息:
Resizing the filesystem on /dev/centos/root to 39321600 (4k) blocks.
The filesystem on /dev/centos/root is now 39321600 blocks long.
重要区别:
- XFS:使用
xfs_growfs,必须指定挂载点(如/)而不是设备路径- ext4:使用
resize2fs,必须指定设备路径(如/dev/centos/root)而不是挂载点用错命令会导致操作失败,但不会损坏数据。如果遇到错误,检查文件系统类型并改用正确的命令即可。
3.5 验证扩容结果
最后,确认一切工作正常:
# 查看磁盘使用情况
df -h /
# 查看逻辑卷详细信息
lvdisplay /dev/centos/root
# 查看卷组空间分配
vgs
如果一切顺利,你会看到根目录的可用空间已经增加了:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 150G 48G 102G 32% /
从之前的96%使用率降到32%,危机解除!整个过程如果熟练的话,真的可以在5分钟内完成,而且完全不需要重启服务器,业务零中断。
4. 高级技巧与避坑指南
掌握了基本操作后,我们来看看一些实际工作中会遇到的高级场景和常见问题。
4.1 多磁盘扩容策略
当单个磁盘容量不足时,你可能需要添加多块磁盘。LVM的优势在这里体现得淋漓尽致——你可以将多块磁盘的空间合并到一个卷组中。
假设你已经有两块磁盘/dev/vdb和/dev/vdc,想要将它们都加入卷组:
# 为每块磁盘创建分区(可选,但推荐)
sudo parted /dev/vdb mklabel gpt
sudo parted /dev/vdb mkpart primary 0% 100%
sudo parted /dev/vdb set 1 lvm on
sudo parted /dev/vdc mklabel gpt
sudo parted /dev/vdc mkpart primary 0% 100%
sudo parted /dev/vdc set 1 lvm on
# 创建物理卷
sudo pvcreate /dev/vdb1 /dev/vdc1
# 扩展到卷组
sudo vgextend centos /dev/vdb1 /dev/vdc1
# 现在卷组有了更多空间,可以继续扩展逻辑卷
sudo lvextend -l +100%FREE /dev/centos/root
sudo xfs_growfs / # 或 resize2fs
4.2 缩小逻辑卷(谨慎操作!)
虽然LVM支持缩小逻辑卷,但这比扩展危险得多,因为可能丢失数据。强烈建议在操作前备份重要数据。
缩小逻辑卷的基本步骤与扩展相反:
# 1. 首先卸载文件系统(如果可能)
sudo umount /mnt/data
# 2. 强制检查文件系统
sudo e2fsck -f /dev/centos/data
# 3. 缩小文件系统(必须先于逻辑卷缩小)
# 对于ext4,缩小到目标大小(如100G)
sudo resize2fs /dev/centos/data 100G
# 4. 缩小逻辑卷
sudo lvreduce -L 100G /dev/centos/data
# 5. 重新挂载
sudo mount /dev/centos/data /mnt/data
对于XFS文件系统,官方不支持在线缩小。如果需要缩小XFS文件系统,必须备份数据、重新创建文件系统、恢复数据。
4.3 LVM快照:备份与测试的利器
LVM快照是另一个强大功能,它可以在瞬间创建逻辑卷的只读或可写副本,非常适合备份和测试。
创建快照的基本命令:
# 创建快照(分配10GB空间给快照)
sudo lvcreate -L 10G -s -n root_snapshot /dev/centos/root
# 挂载快照进行查看或备份
sudo mkdir /mnt/snapshot
sudo mount /dev/centos/root_snapshot /mnt/snapshot
# 使用后卸载并删除快照
sudo umount /mnt/snapshot
sudo lvremove /dev/centos/root_snapshot
快照的工作原理是写时复制(Copy-on-Write)。创建快照时,并不立即复制所有数据,而是记录原始数据的元数据。只有当原始数据被修改时,修改前的数据才会被复制到快照空间。这意味着:
- 快照创建非常快,几乎是瞬间完成
- 快照空间大小取决于原始数据的变化量
- 如果快照空间用尽,快照会自动失效
4.4 常见问题与解决方案
在实际操作中,你可能会遇到各种问题。这里我整理了一些常见情况:
问题1:vgextend时提示"Can't open /dev/vdb1 exclusively. Mounted filesystem?"
sudo vgextend centos /dev/vdb1
Can't open /dev/vdb1 exclusively. Mounted filesystem?
原因:新磁盘可能已经被系统自动挂载了。 解决:
# 检查是否被挂载
mount | grep vdb1
# 如果被挂载,先卸载
sudo umount /dev/vdb1
# 如果卸载失败,检查哪个进程在使用
sudo lsof /dev/vdb1
# 停止相关进程后重试
问题2:resize2fs时提示"Filesystem is mounted"但操作被中断
原因:ext4文件系统在线调整大小过程中被中断。 解决:
# 强制检查文件系统
sudo e2fsck -f /dev/centos/root
# 再次尝试调整大小
sudo resize2fs /dev/centos/root
问题3:扩展后df -h显示的空间没有变化
原因:可能只扩展了逻辑卷,忘记扩展文件系统。
解决:执行对应的文件系统扩展命令(xfs_growfs或resize2fs)。
问题4:云服务器重启后新增空间不见了
原因:某些云平台需要修改云服务器配置,让新增的磁盘空间持久化。
解决:检查云平台文档,确保正确配置了磁盘自动扩展。对于阿里云ECS,可能需要修改/etc/fstab或使用cloud-init。
4.5 性能优化建议
LVM虽然灵活,但也会引入一些性能开销。对于高性能要求的场景,可以考虑以下优化:
-
条带化(Striping):将逻辑卷的数据分散到多个物理卷上,提高IO性能
# 创建条带化逻辑卷 sudo lvcreate -L 100G -i 2 -I 64 -n fast_lv centos # -i 2:跨越2个物理卷 # -I 64:条带大小64KB -
缓存(Caching):使用SSD作为HDD的缓存
# 创建缓存池 sudo lvcreate -L 100G -n cache_pool centos /dev/ssd1 # 将缓存附加到逻辑卷 sudo lvconvert --type cache --cachepool centos/cache_pool centos/slow_lv -
监控LVM性能:使用
iostat、lvdisplay等工具监控LVM层的IO性能
5. 自动化与最佳实践
对于需要频繁管理多台服务器的运维团队,手动执行这些命令效率太低。下面分享一些自动化和最佳实践。
5.1 编写自动化扩容脚本
这是一个简单的自动化扩容脚本示例,你可以根据自己的环境调整:
#!/bin/bash
# auto_extend_root.sh - 自动扩展根目录LVM
set -e # 遇到错误立即退出
# 配置变量
NEW_DISK="/dev/vdb"
VG_NAME="centos"
LV_NAME="root"
MOUNT_POINT="/"
FS_TYPE=$(df -T ${MOUNT_POINT} | tail -1 | awk '{print $2}')
echo "开始自动扩展根目录..."
echo "检测到文件系统类型: ${FS_TYPE}"
# 检查新磁盘是否存在
if [ ! -b ${NEW_DISK} ]; then
echo "错误: 磁盘 ${NEW_DISK} 不存在"
exit 1
fi
# 创建分区
echo "创建分区..."
sudo parted ${NEW_DISK} mklabel gpt --script
sudo parted ${NEW_DISK} mkpart primary 0% 100% --script
sudo parted ${NEW_DISK} set 1 lvm on --script
# 重新读取分区表
sudo partprobe ${NEW_DISK}1
# 等待分区设备出现
sleep 2
# 创建物理卷
echo "创建物理卷..."
sudo pvcreate ${NEW_DISK}1
# 扩展到卷组
echo "扩展到卷组 ${VG_NAME}..."
sudo vgextend ${VG_NAME} ${NEW_DISK}1
# 扩展逻辑卷(使用所有空闲空间)
echo "扩展逻辑卷..."
sudo lvextend -l +100%FREE /dev/${VG_NAME}/${LV_NAME}
# 扩展文件系统
echo "扩展文件系统..."
if [ "${FS_TYPE}" = "xfs" ]; then
sudo xfs_growfs ${MOUNT_POINT}
elif [ "${FS_TYPE}" = "ext4" ] || [ "${FS_TYPE}" = "ext3" ]; then
sudo resize2fs /dev/${VG_NAME}/${LV_NAME}
else
echo "错误: 不支持的文件系统类型 ${FS_TYPE}"
exit 1
fi
# 验证结果
echo "验证扩展结果..."
df -h ${MOUNT_POINT}
echo "根目录扩展完成!"
使用前记得给脚本执行权限:chmod +x auto_extend_root.sh
5.2 监控与告警配置
预防胜于治疗。设置合理的监控可以在空间不足前就发出预警:
# 简单的磁盘空间检查脚本
#!/bin/bash
THRESHOLD=80 # 使用率阈值
ROOT_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ ${ROOT_USAGE} -gt ${THRESHOLD} ]; then
echo "警告: 根目录使用率 ${ROOT_USAGE}% 超过阈值 ${THRESHOLD}%"
# 发送邮件或调用告警接口
# mail -s "磁盘空间告警" admin@example.com <<< "根目录使用率: ${ROOT_USAGE}%"
fi
将上述脚本加入cron,每小时检查一次:
# 编辑crontab
crontab -e
# 添加以下行
0 * * * * /path/to/disk_check.sh
5.3 生产环境最佳实践
根据我在多个大型生产环境的经验,以下最佳实践可以避免很多问题:
-
预留缓冲空间:不要将卷组空间100%分配给逻辑卷,至少保留5-10%的缓冲空间,用于紧急情况或快照。
-
标准化命名规范:
# 卷组命名:vg_<用途>_<环境> vg_data_prod vg_app_staging # 逻辑卷命名:lv_<挂载点>_<序号> lv_root_01 lv_var_log_01 -
文档化LVM配置:定期备份LVM配置
# 备份LVM配置 sudo vgcfgbackup -f /etc/lvm/backup/vg_$(date +%Y%m%d).cfg # 备份物理卷和卷组信息 sudo pvs > /etc/lvm/backup/pvs_$(date +%Y%m%d).txt sudo vgs > /etc/lvm/backup/vgs_$(date +%Y%m%d).txt sudo lvs > /etc/lvm/backup/lvs_$(date +%Y%m%d).txt -
测试恢复流程:定期在测试环境演练LVM故障恢复,包括:
- 物理盘故障替换
- 逻辑卷损坏恢复
- 从快照恢复数据
-
考虑使用LVM thin provisioning:对于虚拟化环境或需要超配的场景,可以考虑LVM thin pool,它允许你分配超过实际物理空间的逻辑卷。
5.4 不同云平台的特别注意事项
阿里云ECS:
- 扩容云盘后,需要在控制台重启实例或使用
echo 1 > /sys/class/scsi_disk/.../device/rescan重新扫描 - 对于部分旧镜像,可能需要安装
cloud-utils-growpart包 - 使用
growpart工具扩展分区:sudo growpart /dev/vda 1
腾讯云CVM:
- 类似阿里云,扩容后需要重启或重新扫描
- 注意安全组规则,确保管理端口可访问
- 建议使用系统自带的自动扩展工具
华为云:
- 提供了
dracut-modules-growroot工具,可以自动扩展根分区 - 文档中提供了详细的API和CLI操作指南
AWS EC2:
- 扩展EBS卷后,需要扩展分区和文件系统
- 对于NVMe实例存储,命名方式不同(如
/dev/nvme0n1) - 提供了详细的官方文档和自动化脚本
无论哪个平台,核心原则都是一样的:先扩展底层存储,然后扩展LVM,最后扩展文件系统。平台差异主要在于第一步——如何让操作系统识别到扩容后的磁盘。
掌握LVM动态扩容技术,你就再也不会被"磁盘空间不足"的告警追着跑了。这套方法我在生产环境用了多年,处理过上百台服务器的磁盘扩容,从没出过问题。关键是要理解每个步骤的原理,这样即使遇到异常情况,也知道如何排查和解决。
&spm=1001.2101.3001.5002&articleId=153376136&d=1&t=3&u=3216da3176bc4b4b8379a054103b999f)
378

被折叠的 条评论
为什么被折叠?



