排查服务器磁盘满载的常见方法&拓展硬盘挂载
在日常运维和开发中,服务器磁盘空间不足是一个非常常见的问题。尤其是当根分区 / 被写满时,不仅会影响业务正常运行,甚至可能导致系统无法登录。因此,需要快速定位磁盘占用情况,并采取合理的解决方案。
本文结合实际案例,介绍几种排查 Linux 服务器磁盘满载的方法。
一、问题场景
某台服务器业务突然报错,提示磁盘写入失败。使用 df -h 查看磁盘使用情况:
df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 493G 459G 14G 98% /
/dev/vda2 ext4 296G 163G 118G 59% /lostData
tmpfs tmpfs 16G 0 16G 0% /dev/shm
可以看到:
- 根目录
/dev/vda1已经使用 98%,即将写满 /dev/vda2还有较多剩余空间
接下来要做的,就是定位到底哪些目录或文件占用了根目录的空间。
二、快速定位占用空间的目录
1. 查看一级目录大小
sudo du -h --max-depth=1 /
输出示例:
4.0K /boot
2.1G /var
50G /usr
120G /home
...
493G /
这样可以直观看出 /var、/home、/usr 等目录的大小,从而判断哪个子目录占用异常。
2. 排序显示前 20 个最大目录
sudo du -h --max-depth=1 / | sort -hr | head -n 20
可以快速找出前 20 个占用空间最大的目录,优先检查是否为日志、缓存、数据文件。
3. 查找大文件
有时单个日志文件就可能写满整个磁盘,可以直接查找:
sudo find / -type f -size +500M -exec ls -lh {} ; | sort -k 5 -rh | head -n 20
这会列出大于 500M 的文件,并按大小排序。
三、如何判断目录属于哪个磁盘
有时根目录 / 下的子目录实际上可能挂载在别的分区,例如 /lostData。如果你在统计时不加限制,就会把其他分区也算进去,导致结果不准确。
方法 1:使用 df
df -h /lostData
结果:
/dev/vda2 296G 163G 118G 59% /lostData
说明 /lostData 在 /dev/vda2 上,不占用根分区 /dev/vda1 的空间。
方法 2:统计时忽略其他挂载点
sudo du -shx /*
参数 -x 表示只统计当前文件系统(忽略挂载的分区),这样就能只看到 /dev/vda1 的使用情况。
四、解决思路
1. 清理无用文件
-
删除大日志:
sudo truncate -s 0 /var/log/xxx.log -
清理缓存:
sudo rm -rf /var/cache/* -
清理临时文件:
sudo rm -rf /tmp/*
2. 转移数据到其他分区
例如 /home 占用较大,可以考虑迁移到 /dev/vda2:
sudo rsync -av /home/ /lostData/home/
sudo mv /home /home.bak
sudo mkdir /home
sudo mount /dev/vda2 /home
然后修改 /etc/fstab,实现开机自动挂载。
3. 规划目录挂载
对于容易增长的数据目录(如 /var/log、/home、/data),建议单独挂载到大分区,避免写满根目录。
4. 阿里云部署 Spring 项目:通过软连接挂载新盘
在阿里云服务器上部署 Spring Boot / Spring Cloud 项目时,日志文件(如 logs/)、上传文件目录(如 upload/)往往增长较快,极易导致根分区 / 被写满。
如果无法直接扩容 / 分区,可以新增一块数据盘,并通过 软链接 将项目的目录迁移到新磁盘。
步骤 1:挂载新磁盘
假设新磁盘设备为 /dev/vdb:
# 分区 & 格式化
sudo fdisk /dev/vdb
sudo mkfs.ext4 /dev/vdb1
# 创建挂载点
sudo mkdir /mnt/data
# 挂载磁盘
sudo mount /dev/vdb1 /mnt/data
步骤 2:迁移项目目录
例如 Spring Boot 项目的日志目录在 /opt/spring/logs:
# 停止服务
sudo systemctl stop spring-app
# 移动目录到新盘
sudo mv /opt/spring/logs /mnt/data/spring-logs
# 创建软链接
sudo ln -s /mnt/data/spring-logs /opt/spring/logs
# 启动服务
sudo systemctl start spring-app
步骤 3:验证
ls -l /opt/spring/
可以看到:
logs -> /mnt/data/spring-logs
此时应用继续写日志,但数据已经落到新磁盘中,根分区不会再膨胀。
步骤 4:开机自动挂载
编辑 /etc/fstab:
/dev/vdb1 /mnt/data ext4 defaults 0 2
保存后执行:
sudo mount -a
✅ 这种方式适合 临时缓解根分区写满问题,尤其是阿里云等云服务器上。通过软链接可以快速迁移目录,而无需修改项目代码或配置。
五、总结
当服务器磁盘满载时,推荐的排查步骤是:
- 先用
df -h确认问题磁盘 - 用
du或ncdu定位大目录 - 用
find查找大文件 - 确认目录是否挂载到其他分区
- 采取清理、迁移、挂载优化等措施解决
只要掌握以上方法,面对磁盘爆满的情况,能快速定位并处理,避免业务中断。
💡 实战建议
- 对于日志目录、数据库目录,提前规划挂载到独立分区
- 定期监控磁盘空间,避免突发占满











