如何解决Linux服务器上的磁盘已满错误?
查找大文件、安全清理日志和释放服务器空间的指南。
Linux 服务器上最常见的问题之一是磁盘完全满了。当磁盘已满时,网站无法写入文件,数据库服务可能停止工作,游戏服务器可能不记录日志,某些服务可能根本无法启动。
此错误通常通过以下症状来识别:
- 上传文件到服务器失败
- 数据库服务关闭或错误
- 面板上出现“设备上没有剩余空间”错误
- 游戏服务器因无法登录而关闭。
- 网站出现 500 错误或空白页
1. 检查磁盘使用情况
首先,检查服务器上哪个磁盘分区已满。
df -h
这里特别是 使用% 面积被考虑。如果某个部分达到90%或以上,则意味着风险已经开始。如果 100% 已满,服务将无法写入文件。
2.找到占用空间最多的文件夹
当磁盘已满时,问题通常是日志、备份或缓存文件累积在单个文件夹中。从根目录开始检查大文件夹。
du -h --max-depth=1 / 2>/dev/null | sort -h
此命令显示主目录占用了多少空间。通常会检查以下目录:
- /var/日志 - 系统和服务日志
- /主页 - 用户和网站文件
- /备份 - 旧的备份文件
- /tmp - 临时文件
- /var/lib/mysql - MySQL/MariaDB 数据库文件
3. 列出大文件
有时,单个日志文件可能会增长到 10 GB 或更多。要查找大文件,可以使用以下命令:
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null此命令列出超过 500 MB 的文件。仔细检查生成的文件。尤其是 .log, .旧, .gz, .bak 并应检查旧的备份文件。
4. 日志文件的安全清理
直接删除正在运行的服务的日志文件有时不会给出预期的结果。因为服务可以继续保持文件打开。因此,清理大型日志文件时最安全的方法是清空该文件。
truncate -s 0 /var/log/dosya_adi.log
示例:
truncate -s 0 /var/log/syslog truncate -s 0 /var/log/messages truncate -s 0 /var/log/nginx/error.log
5. 包缓存清理
在基于 Ubuntu 和 Debian 的系统上,包缓存文件可能会随着时间的推移而占用磁盘空间。
apt clean apt autoremove -y
在 CentOS、AlmaLinux 或 Rocky Linux 系统上:
yum clean all dnf clean all
6.检查旧备份
在托管和游戏服务器上占用最多空间的文件通常是旧备份。特别是如果有自动备份系统,可能每天都会进行新的备份,而旧的备份可能不会被删除。
find /backup -type f -mtime +7 -name "*.tar.gz" -ls
此命令列出 7 天之前的备份。确认后删除:
find /backup -type f -mtime +7 -name "*.tar.gz" -delete
7. 使用 Logrotate 设置防止重新加载
即使磁盘被清理干净,如果不纠正原因,几天后同样的问题还会再次出现。为此,必须检查 logrotate 配置。
nano /etc/logrotate.conf
简单 logrotate 逻辑示例:
/var/log/*.log {
daily
rotate 7
compress
missingok
notifempty
}此设置每天返回日志文件,保留 7 天并压缩旧日志。
常见错误
- 删除系统文件而不知道它是哪个文件
- 删除运行日志文件并且不重新启动服务
- 无限期保留旧备份
- 根本不检查 logrotate 设置
- 在磁盘 100% 已满之前不要进行干预
常见问题解答
为什么当磁盘已满时服务器会报错?
因为服务无法写入日志、缓存、临时文件或数据库。当写入操作失败时,服务可能会关闭。
删除或清空日志文件是否更好?
而不是完全删除正在运行的服务中的日志文件 截断 使用清空它更安全。
我清理了磁盘,但空间没有释放,为什么?
已删除的文件可能仍由正在运行的服务保持打开状态。可能需要重新启动相关服务。
性能和安全建议
- 定期监控磁盘使用情况。
- 将备份存储在单独的磁盘或远程备份区域上。
- 不要在不使用 logrotate 的情况下让服务长时间运行。
- 当磁盘达到85%水平时,请采取预防措施。
- 不要让调试日志在游戏服务器上持续打开。
本文是专门为PvPServer准备的。