马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、背景:根目录满、home 却空着,比重构盘
CentOS 7 默认分区方案有个非常常见的问题:根分区 / 很小(通常 50G 左右),而 /home 把剩余空间全吃掉了(上例里 /home 有 180G,只用掉 33M)。一旦根分区写到 78%–90%,系统就会开始报"磁盘空间不足",服务写日志 、装包都会失败。
最直接的解决思路:把 /home 的容量省出来给根分区。因为 LVM 逻辑卷是可以动态调整大小的,不必重装系统。
先说清楚风险:这个流程涉及卸载 /home、删除逻辑卷、扩容 /,必须先把 /home 的数据备份走,否则删除逻辑卷等于数据丢失。整个过程建议先做快照或至少完整备份。
二、第一步:查看目录布局
[root@localhost opt]# df -hl
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 18M 7.7G 1% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 39G 12G 78% /
/dev/sda2 1014M 176M 839M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 180G 33M 180G 1% /home
tmpfs 1.6G 0 1.6G 0% /run/user/0
overlay 50G 39G 12G 78% /var/lib/docker/.../merged
关键信息三条:
/dev/mapper/centos-root 挂在 /,用了 78%;
/dev/mapper/centos-home 挂在 /home,180G 只用了 33M;
- 根分区和 home 属于同一个卷组 centos(VG 名叫
centos),所以才有得借。
另外注意 docker 的 overlay 挂载点也占着 / 的空间——如果 /var/lib/docker 也在根分区上,先考虑迁走 docker 目录,效果往往比重分 home 更省事。
三、第二步:备份 /home 数据
[root@localhost opt]# mkdir /home-backup
[root@localhost opt]# mv /home/* /home-backup
用 mv 而不是 cp,图的是快、不占额外空间(同分区内只是改个目录项)。这里只是把数据挪到/home 外面暂存,并不是删除——真正的删除在下一步删逻辑卷时才发生。
改完建议立刻核对一下:
ls -la /home-backup | head
du -sh /home-backup
四、第三步:卸载并删除 /home 逻辑卷
[root@localhost /]# umount /home
[root@localhost /]# lvremove /dev/centos/home
Do you really want to remove active logical volume centos/home? [y/n]: y
Logical volume "home" successfully removed
这一步是整条流程里不可逆的点:逻辑卷一旦删掉,/home-backup 之外的数据就彻底没了。所以
- 务必确认
/home-backup 里东西齐全;
- 确认没有服务正在写
/home(lsof +D /home 或 fuser -m /home 查一下);
- 确认
/etc/fstab 里 /home 那条可以先注释掉,避免重启时挂载失败。
如果 umount 一直报 target is busy,说明还有进程占用:先去杀掉占用进程,或者进救援模式/单用户模式再操作。
五、第四步:查看卷组可用空间
[root@localhost /]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <可用空间>
删掉 home 之后,卷组 centos 里就多出一大块 Free PE,这正是等下要分给 root 的额度。
六、第五步:扩容根逻辑卷
lvextend -l +100%FREE /dev/centos/root
xfs_growfs / # CentOS 7 默认文件系统是 XFS
resize2fs /dev/centos/root # 如果文件系统是 ext4,用这条
两个动作要分清:
lvextend 只改逻辑卷(块设备)的大小,文件系统本身还没变大,此时 df -h 不会变。
- 必须紧接着让文件系统 grow,
df -h 才会看到空间增加。
CentOS 7 默认用 XFS,所以用 xfs_growfs /;如果是 ext4,用 resize2fs /dev/centos/root。用错命令不会扩容,但也不会损坏数据,只是没效果,看 df -T / 或 blkid /dev/centos/root 确认文件系统类型再选。
七、第六步:把备份迁回 home(可选)
如果日后还要用 /home(比如要重建 home 逻辑卷,或者新机器),把备份挪回去:
mv /home-backup/* /home/
rmdir /home-backup
如果确定不再需要,就直接清理掉 /home-backup,把那部分空间也还给卷组。
八、验证
df -h
lvdisplay
ls -la /home
确认 / 的 已用% 下来了、可用空间变大,/home 目录结构还在。
九、三种方案怎么选
| 方案 | 难度 | 是否不可逆 | 适用场景 |
| 删 home 逻辑卷扩 root(本文) | 中 | 是(需先备份) | home 确实有大量空余、且数据不值钱 |
迁移 docker / 日志 目录到大数据盘 | 低 | 否 | 根满的首要原因其实是 docker/日志 |
| 加一块新硬盘,把 /data 独立出去 | 低 | 否 | 有空余盘位、能停机 |
十、重排之前,请先确认这三件事
- 根满的元凶是不是 docker?上例里
/var/lib/docker/overlay2/... 有五条 overlay 挂载,它们占的是根分区的空间。很多"根满"其实迁走 docker 目录就够了,比重分 home 安全得多。
- 日志有没有在滚?
/var/log 长期不清理是第二大元凶,配好 logrotate 往往比扩盘更治本。
- 有没有做快照?CentOS 7 上 either 用 LVM 快照(
lvcreate -s)或虚拟机快照,重排前先打一个,失败还能直接回滚。
小结
把流程压成五步:
df -h # 1. 看布局,确认 root 与 home 同属一个 VG
mkdir /home-backup && mv /home/* /home-backup # 2. 备份 home
umount /home && lvremove /dev/centos/home # 3. 卸载并删 home 逻辑卷
lvextend -l +100%FREE /dev/centos/root # 4. 扩容 root 逻辑卷
xfs_growfs / # 5. 扩文件系统(ext4 用 resize2fs)
核心认知就两条:LVM 的逻辑卷能在同一卷组内自由调大小,但要"先扩逻辑卷、再扩文件系统"两步走;删逻辑卷不可逆,动手前备份 + 快照双保险。
(本文由 qidao123.com企服评测-应用市场 编辑提示整理:示例基于 CentOS 7 + LVM + XFS,适用于运维排障与磁盘容量规划场景;操作生产环境前请务必备份。) |