温馨提示×

Linux磁盘空间告急试试这些清理策略

小樊
48
2025-10-06 16:19:13
栏目: 云计算

1. 快速定位大文件/目录
磁盘空间告急的首要任务是找出占用空间大的文件或目录,避免盲目清理。常用命令:

  • df -h:查看各分区磁盘使用情况,定位占用高的分区(如根分区//var等);
  • du -sh * | sort -rh | head -n 10:列出当前目录下占用空间最大的前10个文件/目录;
  • ncdu(交互式可视化工具):通过sudo apt install ncdu(Debian/Ubuntu)或sudo yum install ncdu(CentOS/RHEL)安装,扫描目录后可直观查看文件大小,支持键盘导航删除。

2. 清理无用缓存与临时文件
缓存和临时文件是磁盘空间的“常驻客”,定期清理可快速释放空间:

  • 软件包缓存:Debian/Ubuntu系统用sudo apt-get clean(清除所有已下载的软件包文件),CentOS/RHEL用sudo yum clean all(清除软件包缓存及旧头文件);
  • 系统临时文件sudo rm -rf /tmp/*(删除/tmp目录下所有临时文件,需确认无进程占用);
  • 用户缓存rm -rf ~/.cache/*(清理当前用户的缓存文件,如浏览器缓存、应用临时文件)。

3. 管理日志文件
日志文件(尤其是/var/log目录下的文件)可能无限增长,需通过轮转或删除旧日志控制大小:

  • 手动清空日志sudo truncate -s 0 /var/log/syslog(清空syslog文件,保留文件但清空内容);
  • 批量删除旧日志sudo find /var/log -type f -name "*.log" -mtime +30 -delete(删除30天前的.log文件);
  • 日志轮转:使用logrotate工具(默认已安装),编辑/etc/logrotate.conf配置文件,设置日志保留天数(如maxage 30)或大小阈值(如size 100M),自动轮转旧日志。

4. 处理旧内核与未使用软件
旧内核和未使用的软件会占用大量空间,需及时清理:

  • 旧内核清理
    • Debian/Ubuntu:dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | grep -v $(uname -r) | grep -v $(uname -r | sed 's/-generic//') | head -n -2 | xargs sudo apt-get purge -y(保留当前内核及最新的1个旧内核,删除其余旧内核);
    • CentOS/RHEL:rpm -qa kernel | grep -v $(uname -r) | xargs sudo yum remove -y(删除非当前运行的内核)。
  • 未使用软件sudo apt-get autoremove(Debian/Ubuntu,删除不再需要的依赖包);sudo yum autoremove(CentOS/RHEL,同理)。

5. 释放系统保留空间
Linux系统默认保留根分区5%的空间(用于系统恢复),可通过tune2fs调整(仅适用于ext3/ext4文件系统):
sudo tune2fs -m 1 /dev/sda1(将/dev/sda1分区的保留空间比例从5%调整为1%,释放4%的空间)。调整前需确认分区挂载状态(df -h查看),避免误操作。

6. 扩展磁盘空间(终极解决方案)
若清理后仍空间不足,需扩展磁盘容量:

  • 物理添加硬盘:插入新硬盘后,使用fdisk /dev/sdb(假设新硬盘为sdb)分区,mkfs.ext4 /dev/sdb1格式化,mount /dev/sdb1 /mnt/newdisk挂载到指定目录;
  • LVM扩展现有分区:若使用LVM(逻辑卷管理),可通过pvcreate(创建物理卷)、vgextend(扩展卷组)、lvextend(扩展逻辑卷)、resize2fs(调整文件系统大小)逐步扩展;
  • 云存储扩展:云服务器可通过控制台扩容云盘,再执行上述LVM或挂载操作。

7. 预防措施(避免再次告急)

  • 定期自动清理:通过crontab -e设置定时任务,如每周日凌晨3点执行清理脚本(0 3 * * 0 /path/to/cleanup_script.sh);
  • 监控磁盘使用:使用NagiosZabbixPrometheus等工具设置磁盘空间阈值(如85%),超过阈值时发送邮件或短信报警;
  • 合理规划分区:系统安装时为/(根分区)、/var(日志、数据库)、/home(用户数据)分配足够空间,避免单个分区过度使用。

0