为什么要管理磁盘空间?

服务器运行久了,磁盘空间可能会不知不觉被占满,导致新软件无法安装、服务报错甚至系统崩溃。比如日志文件越积越多、临时文件没人清理、大文件长期不删,都会让磁盘告急。合理管理磁盘空间,能让服务器更稳定,还能避免不必要的停机。

基础概念:先懂”仓库”和”身份证”

要管理磁盘,得先理解两个核心概念:inode块(block)

  • inode(身份证):每个文件/目录都有一个inode,像身份证一样记录文件的元数据(大小、修改时间、权限等),但不存文件内容。磁盘空间不足时,可能是inode先被用完(即使磁盘空间还有剩余)。

  • 块(block):存储数据的最小单位,比如4KB/块。文件内容被拆分成多个块存储在磁盘上,inode会记录这些块的位置。

如何快速查看磁盘空间?

1. 查看整体磁盘使用情况(df命令)

df -h
  • 参数-h:以人类可读的单位(GB/MB)显示,避免数字太复杂。
  • 输出解释
  • Filesystem:磁盘设备名(如/dev/sda1)
  • Size:磁盘总容量
  • Used:已用空间
  • Avail:可用空间
  • Use%:使用率(超过85%就该警惕了)
  • Mounted on:挂载点(如/、/home)

2. 查看目录/文件大小(du命令)

du -sh /path/to/dir  # 查看单个目录总大小(-s=汇总,-h=人类可读)
du -ah /var | sort -hr | head -10  # 查看/var目录下最大的10个文件/目录
  • du -sh /var/log:快速看日志目录大小,日志常是”空间杀手”。

3. 排查inode使用情况(df -i)

df -i
  • 如果 IUse% 接近100%,即使磁盘空间还有,也无法创建新文件(inode用完了)。

常见问题:磁盘空间突然满了怎么办?

1. 日志文件过大(最常见)

  • 原因:服务日志(如Nginx、MySQL)不清理,导致单个日志文件几十GB。
  • 解决
  • logrotate 自动管理日志(系统自带,会按大小/时间分割日志)。
  • 手动清理:先备份关键日志(如 cp /var/log/messages messages.bak),再用 > /var/log/messages 清空(日志会自动重新创建)。

2. 临时文件堆积(/tmp、/var/tmp)

  • 原因:程序产生的临时文件未及时清理(如缓存、下载残留)。
  • 解决
  • tmpwatch 定时清理临时文件:tmpwatch 72 /tmp(72小时内未修改的文件删除)。
  • 重启服务器前手动清理:rm -rf /tmp/*(谨慎,避免删除正在使用的临时文件)。

3. 大文件未清理(如备份、旧数据)

  • 原因:备份包、旧版本代码、大日志等未及时归档。
  • 解决
  • find 查找大文件:find / -type f -size +100M -print0 | xargs -0 du -h(找100MB以上的文件)。
  • 确认后删除:find / -name "*.old" -delete(删除所有.old后缀的文件)。

4. 分区设计不合理

  • 原因:所有数据都放在根分区(/),导致单个分区满后影响全局。
  • 解决
  • 调整分区:若用 LVM(逻辑卷管理),可动态扩容(如 lvextend -L +10G /dev/mapper/root)。
  • 分离分区:/var(日志)、/home(用户数据)单独分区,避免互相影响。

长期优化:如何让磁盘空间”健康”运行?

1. 定期清理+备份

  • 每周用 cron 任务自动清理临时文件(0 3 * * 0 /usr/sbin/tmpwatch 7 /tmp)。
  • 定期删除历史备份包(如 find /backup -name "*.tar.gz" -mtime +30 -delete)。

2. 用外部存储分担压力

  • 挂载NAS/SAN:将用户数据(/home)或日志(/var/log)挂载到单独存储设备。
  • 示例:mount /dev/sdb1 /mnt/external_data,之后修改 /etc/fstab 永久挂载。

3. 设置告警+监控

  • nagios/zabbix 监控磁盘使用率,超过80%发邮件告警。
  • 或简单用 df -h | grep -vE 'tmpfs|udev' | awk '{print $5}' | sort -nr | head -1 检查最高使用率分区。

4. 避免”踩坑”的注意事项

  • 删除前确认:用 ls/file 确认文件用途,误删系统配置文件会导致服务崩溃。
  • 日志别乱删:若日志文件被服务占用(如 tail -f 正在看),直接 rm 会导致服务写日志失败,需先重启服务再清理。
  • 小目录优先删:若inode满,优先删除/tmp、/var/spool等小文件目录,而非大文件。

总结

磁盘空间管理是Linux服务器运维的基础,核心是定期检查+主动清理+长期规划。记住:别等磁盘满了才处理,提前发现问题(如告警)、用工具自动化清理(logrotate、tmpwatch)、分离分区/用外部存储,就能让服务器存储一直”够用”。

小夜