虚拟机根分区满了,最直接的处理逻辑是:先排查占用来源,能安全清理的优先清理;如果清理后仍不足或业务持续增长,就用LVM或云平台磁盘扩容解决。 根分区爆满通常不会立刻宕机,但数据库写入、日志记录、SSH登录都可能失败,所以别拖。
虚拟机根分区满了怎么办?先分清清理还是扩容
当你收到监控告警,或者SSH敲命令提示“No space left on device”,第一步不是慌着删文件,得先判断:这台虚拟机的根分区是临时被日志撑爆,还是业务数据长期增长导致容量不足。
- 如果根分区使用率在短时间内从低位飙升,多半是日志、缓存、临时文件或容器镜像堆积,这时清理最划算。
- 如果根分区使用率长期在80%以上,且每次清理后几天又满,说明初始分区规划偏小,扩容才是根本方案。
- 如果根分区所在磁盘还有空闲空间,或者云平台支持在线扩容,优先考虑扩容。
- 如果磁盘已无未分配空间,且无法停机,先清理再规划迁移或加盘。
业内专家指出,根分区使用率超过80%就应触发告警,超过90%必须人工介入,这个阈值不是死规定,但能留出处理窗口。
根分区占用过高如何排查:三条命令定位元凶
别急着删,先看谁在占地方。
- df -h:查看各分区使用率,根分区通常是,挂载点显示为
/dev/mapper/xxx-root或/dev/vda1。 - du -sh / | sort -rh | head -20:按目录从大到小排序,快速锁定
/var、/usr、/home、/opt等。 - find / -xdev -type f -size +1G 2>/dev/null:找出大于1G的文件,排除挂载点干扰。
- lsof | grep deleted:如果删了文件但空间没释放,可能是进程还持有文件句柄,重启对应服务即可释放。
- ncdu:交互式磁盘分析工具,比du更直观,适合巡检。
常见元凶包括:/var/log下的应用日志、/var/lib/docker的镜像和容器层、/var/cache的包缓存、数据库的binlog或慢查询日志、Java应用的GC日志,行业共识认为,多数根分区爆满事件都源于日志和容器数据未做分离。
云服务器根分区满了清理方法:日志与缓存优先
确认占用来源后,按风险从低到高清理,下面这些操作适合大多数Linux发行版。
日志清理
- 对于systemd环境:
journalctl --vacuum-size=200M,只保留最近200M日志。 - 手动清理旧日志:
find /var/log -type f -name ".gz" -delete,删除已压缩的历史日志。 - 检查logrotate配置:
/etc/logrotate.conf和/etc/logrotate.d/,确保日志按天或按大小轮转。 - 应用日志:比如Nginx的
access.log,可以用truncate -s 0 /var/log/nginx/access.log清空,不要直接rm,否则文件句柄不释放。
包管理器缓存
- CentOS/RHEL:
yum clean all或dnf clean all。 - Ubuntu/Debian:
apt-get clean和apt-get autoclean。 - 旧内核:
package-cleanup --oldkernels --count=1,保留一个备用内核即可。
容器与临时文件
- Docker:
docker system prune -a清理停止的容器、无用镜像和网络,如果确定无用的卷,再加--volumes。 - 临时目录:
/tmp和/var/tmp下的陈旧文件可以清理,但注意别删正在使用的。 - 不要直接删除
/var/lib/mysql、/var/lib/pgsql等数据库目录,会导致数据损坏。
清理完成后,用df -h确认释放效果,如果释放后仍然紧张,进入扩容环节。
Linux虚拟机根分区扩容步骤:LVM在线扩容实战
LVM是Linux虚拟机最常见的磁盘管理方式,它的好处是可以在线扩展逻辑卷,无需停机,下面分场景说明。
LVM根分区扩容:lvextend加resize2fs或xfs_growfs
先确认卷组是否有剩余空间。
vgs查看卷组剩余空间,如果有空闲,直接扩展逻辑卷。lvextend -l +100%FREE /dev/mapper/centos-root,把卷组剩余空间全部分配给根逻辑卷。- 扩展文件系统:
- ext4:
resize2fs /dev/mapper/centos-root - xfs:
xfs_growfs /
- ext4:
- 再次
df -h验证。
如果卷组没有剩余空间,需要添加新磁盘:
- 云平台挂载一块新云盘,假设为
/dev/vdb。 pvcreate /dev/vdbvgextend centos /dev/vdb(卷组名以vgs输出为准)lvextend -l +100%FREE /dev/mapper/centos-rootresize2fs或xfs_growfs。
云平台磁盘扩容后,根分区还是原大小怎么处理?
很多用户先在云控制台把系统盘从40G扩到100G,重启后发现df -h还是40G,这是因为分区表和LVM还没扩展。
以最常见的/dev/vda为例,操作路径如下:
growpart /dev/vda 2,扩展第二个分区,如果提示命令不存在,安装cloud-utils-growpart或growpart。pvresize /dev/vda2,让LVM识别新增空间。lvextend -l +100%FREE /dev/mapper/centos-rootresize2fs /dev/mapper/centos-root或xfs_growfs /- 如果根分区不是LVM,而是直接挂在
/dev/vda1上,需要先删除分区再重建,风险较高,建议先做快照,用parted或gparted调整。
北京、上海等地的IDC托管虚拟机,扩容逻辑与公有云一致,区别在于可能要走硬件采购流程。
根分区空间不足扩容价格和停机时间怎么评估?
扩容成本取决于平台和方式。
- 公有云:按磁盘增量计费,比如系统盘从40G扩到100G,通常按每GB每月单价计算,不同厂商价格有差异,具体以控制台为准,部分平台支持在线扩容,无需重启。
- 自建虚拟化:如VMware、KVM,需要宿主机有剩余存储,扩展虚拟磁盘后,在虚拟机内执行分区和文件系统扩展,通常无需停机,但操作前建议快照。
- 物理机或独立服务器:需要采购新硬盘或扩阵列,成本和停机时间更高,适合长期容量规划。
- 非LVM分区:调整分区表有数据丢失风险,通常需要停机并备份,时间从半小时到数小时不等。
清理和扩容怎么选? 如果只是日志临时占满,清理成本几乎为零,如果业务数据每月增长稳定,扩容更省心,据统计,相当一部分根分区告警在清理后一周内会再次出现,因为日志轮转没配好或容器数据没迁走。
预防根分区再次爆满:监控与规划
清理和扩容都是事后补救,想少折腾,得从规划入手。
- 独立分区:安装系统时就把
/var、/var/log、/home、/data分成独立分区或逻辑卷,根分区只放系统文件,给20G到50G足够。 - 日志轮转:所有应用日志接入logrotate,设置
daily、rotate 7、compress,容器日志用json-file驱动时配置max-size和max-file。 - 容器数据分离:把Docker的
data-root改到独立数据盘,比如/data/docker,避免镜像和容器层撑爆根分区。 - 监控告警:用Prometheus加node_exporter采集
node_filesystem_avail_bytes,设置80%和90%两级告警,Zabbix、云监控也支持。 - 定期巡检:每月执行一次
du -sh /var/ | sort -rh,发现异常增长及时处理。
这些措施不复杂,但能避免大多数根分区爆满事故。
虚拟机根分区满了怎么办?常见问题解答
问:删除大文件后,df显示空间没释放怎么办?
答:通常是有进程仍持有已删除文件的句柄,用lsof | grep deleted找到对应进程,重启该服务或杀掉进程,空间就会释放,也可以echo > /proc/<pid>/fd/<fd>清空,但不推荐,容易出错。
问:LVM扩容后df还是原大小,是什么原因?
答:只做了lvextend,没扩展文件系统,ext4需要resize2fs,xfs需要xfs_growfs /,如果是云盘扩容,还要先growpart和pvresize。
问:云服务器根分区扩容需要重启吗?
答:LVM在线扩容通常不需要重启,云平台系统盘扩容后,如果支持在线扩展,执行growpart、pvresize、lvextend、resize2fs即可生效,非LVM分区调整或文件系统不支持在线扩展时,才需要重启或停机。
核心结论:根分区爆满先排查再清理,清理无效就扩容,LVM和云盘扩容都能在线完成,关键是别等到100%才动手。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/762955.html





