第24集:磁盘空间管理
教学目标
- 掌握查看磁盘空间使用情况的方法
- 学会分析磁盘空间占用情况
- 掌握清理磁盘空间的常用方法
- 了解磁盘配额管理的基本概念和设置方法
- 学会监控磁盘空间使用情况
- 能够解决常见的磁盘空间问题
核心知识点讲解
1. 磁盘空间管理概述
磁盘空间管理是Linux系统管理中的重要组成部分,它涉及到磁盘空间的监控、分析、清理和优化等方面。有效的磁盘空间管理可以确保系统正常运行,避免因磁盘空间不足导致的问题。
2. 查看磁盘空间使用情况
df命令
df命令用于查看文件系统的磁盘空间使用情况。
基本语法:
df [选项]常用选项:
| 选项 | 描述 |
|---|---|
-h |
以人类可读的格式显示(如GB、MB) |
-T |
显示文件系统类型 |
-i |
显示inode使用情况 |
-a |
显示所有文件系统,包括虚拟文件系统 |
-x |
排除指定类型的文件系统 |
示例输出解读
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 5.2G 14G 28% /
/dev/sdb1 50G 10G 37G 22% /data字段说明:
- Filesystem:文件系统
- Size:总空间大小
- Used:已使用空间
- Avail:可用空间
- **Use%**:使用百分比
- Mounted on:挂载点
3. 分析磁盘空间占用
du命令
du命令用于估算文件或目录的磁盘空间使用情况。
基本语法:
du [选项] [文件或目录]常用选项:
| 选项 | 描述 |
|---|---|
-h |
以人类可读的格式显示 |
-s |
显示总计,不显示子目录 |
-c |
显示总计,并在最后显示总和 |
-a |
显示所有文件和目录 |
--max-depth |
指定显示的目录深度 |
查找大文件和大目录
# 查找当前目录下大于100MB的文件
find . -type f -size +100M -exec ls -lh {} \;
# 查找当前目录下占用空间最大的前10个目录
du -h --max-depth=2 . | sort -hr | head -104. 清理磁盘空间
清理临时文件
# 清理/tmp目录下的临时文件
sudo rm -rf /tmp/*
# 清理用户临时目录
tmpreaper 7d ~/.tmp
# 清理系统日志文件
sudo journalctl --vacuum-time=7d清理包管理器缓存
# Debian/Ubuntu系统
sudo apt clean
# CentOS/RHEL系统
sudo yum clean all
# Fedora系统
sudo dnf clean all清理旧的内核文件
# 查看已安装的内核
dpkg --list | grep linux-image
# 删除旧内核(保留最新的两个)
sudo apt autoremove --purge清理Docker相关文件
# 清理未使用的Docker资源
docker system prune -a
# 清理Docker卷
docker volume prune5. 磁盘配额管理
磁盘配额(Disk Quota)是一种限制用户或组在文件系统上使用的磁盘空间的机制。
启用磁盘配额
修改/etc/fstab文件:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,usrquota,grpquota 0 1重新挂载文件系统:
sudo mount -o remount /创建配额文件:
sudo quotacheck -cug /启用配额:
sudo quotaon /
设置用户配额
# 设置用户的软限制和硬限制
sudo edquota -u username
# 或者使用命令行直接设置
sudo setquota -u username 1000000 2000000 0 0 /查看配额
# 查看用户配额
quota -u username
# 查看所有用户的配额
sudo repquota /6. 磁盘空间监控
使用工具监控
- df命令:定期检查
- du命令:分析具体目录
- ncdu:交互式磁盘使用分析工具
- glances:系统监控工具,包含磁盘空间监控
- nagios/zabbix:企业级监控系统
设置磁盘空间告警
# 创建简单的磁盘空间监控脚本
#!/bin/bash
THRESHOLD=80
df -h | grep -v tmpfs | grep -v devtmpfs | while read line; do
USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
if [ $USAGE -ge $THRESHOLD ]; then
echo "警告:磁盘空间使用超过阈值!"
echo $line
fi
done7. 常见磁盘空间问题及解决方法
磁盘空间不足
症状:
- 系统报错:"No space left on device"
- 无法创建新文件或写入数据
解决方法:
- 清理临时文件和日志
- 删除不需要的文件
- 移动大文件到其他存储设备
- 扩展文件系统(如果有未分配的磁盘空间)
inode不足
症状:
- 系统报错:"No space left on device",但df显示有空间
- 无法创建新文件
解决方法:
- 查找并删除大量小文件
- 检查/tmp目录是否有大量临时文件
- 考虑重新格式化文件系统,调整inode比例
大文件占用空间
解决方法:
- 使用
find命令查找大文件 - 检查日志文件是否过大
- 检查数据库文件是否需要清理
- 考虑使用压缩或归档的方式存储大文件
8. 磁盘空间管理最佳实践
- 定期检查:定期检查磁盘空间使用情况
- 设置告警:设置磁盘空间使用阈值告警
- 清理策略:制定定期清理策略
- 合理分区:根据用途合理规划分区
- 使用配额:对多用户系统使用磁盘配额
- 监控增长:监控磁盘空间增长趋势
- 备份重要数据:定期备份重要数据
- 合理使用压缩:对不常用的大文件进行压缩
操作示例
示例1:查看磁盘空间使用情况
# 以人类可读的格式查看所有文件系统
df -h
# 查看文件系统类型和使用情况
df -Th
# 查看inode使用情况
df -i
# 排除tmpfs文件系统
df -h -x tmpfs
# 查看特定挂载点的使用情况
df -h /
df -h /home示例2:分析磁盘空间占用
# 查看当前目录的总大小
du -sh
# 查看当前目录下各子目录的大小
du -h --max-depth=1
# 查看当前目录下所有文件和目录的大小
du -ah
# 查找当前目录下大于50MB的文件
find . -type f -size +50M -exec ls -lh {} \;
# 查找系统中最大的10个文件
find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5,5hr | head -10
# 分析/home目录的空间使用情况
ncdu /home示例3:清理磁盘空间
# 清理/tmp目录
sudo rm -rf /tmp/*
# 清理APT缓存
sudo apt clean
# 清理旧的日志文件
sudo find /var/log -name "*.log.*" -delete
# 清理未使用的包
sudo apt autoremove --purge
# 清理Docker未使用的资源
docker system prune -a
# 清理旧的内核文件(CentOS/RHEL)
sudo package-cleanup --oldkernels --count=2
# 清理用户主目录中的缓存
trm -rf ~/.cache/*示例4:设置磁盘配额
# 1. 编辑/etc/fstab,添加配额选项
# sudo nano /etc/fstab
# 添加usrquota,grpquota选项
# 2. 重新挂载文件系统
sudo mount -o remount /
# 3. 创建配额文件
sudo quotacheck -cug /
# 4. 启用配额
sudo quotaon /
# 5. 设置用户配额
sudo edquota -u username
# 6. 查看配额设置
quota -u username
# 7. 生成配额报告
sudo repquota /
# 8. 设置软限制的宽限期
sudo edquota -t示例5:监控磁盘空间
# 创建磁盘空间监控脚本
cat > disk_monitor.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
LOG_FILE="/var/log/disk_monitor.log"
echo "[$(date)] 开始检查磁盘空间" >> $LOG_FILE
df -h | grep -v tmpfs | grep -v devtmpfs | while read line; do
MOUNT=$(echo $line | awk '{print $6}')
USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
if [ $USAGE -ge $THRESHOLD ]; then
echo "[$(date)] 警告: $MOUNT 分区使用 $USAGE%,超过阈值 $THRESHOLD%" >> $LOG_FILE
# 这里可以添加邮件通知或其他告警机制
else
echo "[$(date)] 正常: $MOUNT 分区使用 $USAGE%" >> $LOG_FILE
fi
done
echo "[$(date)] 检查完成" >> $LOG_FILE
echo "------------------------" >> $LOG_FILE
EOF
# 使脚本可执行
chmod +x disk_monitor.sh
# 运行脚本
./disk_monitor.sh
# 将脚本添加到crontab,每天运行一次
# sudo crontab -e
# 添加: 0 0 * * * /path/to/disk_monitor.sh示例6:解决磁盘空间问题
# 问题1:磁盘空间不足
# 1. 查找大文件
find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5,5hr | head -10
# 2. 清理临时文件
sudo rm -rf /tmp/*
# 3. 清理日志文件
sudo journalctl --vacuum-time=3d
# 问题2:inode不足
# 1. 查看inode使用情况
df -i
# 2. 查找大量小文件
find /tmp -type f | wc -l
# 3. 删除大量小文件
sudo rm -rf /tmp/*
# 问题3:根目录空间不足
# 1. 分析根目录空间使用
cd / && du -h --max-depth=1 | sort -hr
# 2. 检查/var目录
cd /var && du -h --max-depth=1 | sort -hr
# 3. 清理/var/log目录
sudo find /var/log -name "*.log" -exec truncate -s 0 {} \;课后练习
基础练习:
- 使用df命令查看系统磁盘空间使用情况
- 使用du命令分析/home目录的空间占用
- 清理系统中的临时文件和包管理器缓存
进阶练习:
- 查找系统中占用空间最大的10个文件
- 为用户设置磁盘配额
- 创建一个磁盘空间监控脚本,并添加到crontab
思考问题:
- 当系统提示"No space left on device"但df显示有空间时,可能是什么原因?
- 如何区分磁盘空间不足和inode不足的问题?
- 磁盘配额的软限制和硬限制有什么区别?
- 如何制定一个有效的磁盘空间清理策略?
总结
本集介绍了Linux系统中磁盘空间管理的相关知识,包括:
- 使用df命令查看磁盘空间使用情况
- 使用du命令分析磁盘空间占用情况
- 清理磁盘空间的常用方法,如清理临时文件、包管理器缓存、旧内核文件等
- 磁盘配额管理的基本概念和设置方法
- 磁盘空间监控的工具和方法
- 常见磁盘空间问题的解决方法
- 磁盘空间管理的最佳实践
有效的磁盘空间管理是确保Linux系统稳定运行的重要因素。通过本集的学习,您应该能够掌握磁盘空间的监控、分析、清理和管理技巧,从而更好地维护系统的健康状态。在下一集中,我们将介绍Linux系统中文件系统维护的相关知识。