为什么要管理磁盘空间?¶
服务器运行久了,磁盘空间可能会不知不觉被占满,导致新软件无法安装、服务报错甚至系统崩溃。比如日志文件越积越多、临时文件没人清理、大文件长期不删,都会让磁盘告急。合理管理磁盘空间,能让服务器更稳定,还能避免不必要的停机。
基础概念:先懂”仓库”和”身份证”¶
要管理磁盘,得先理解两个核心概念: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)、分离分区/用外部存储,就能让服务器存储一直”够用”。