1. 首页 > Linux教程 > 正文

Linux教程FG068-df/du命令磁盘容量目录大小查看

本文档风哥主要介绍Linux磁盘管理相关知识,包括df命令查看磁盘容量、du命令查看目录大小、磁盘监控策略、磁盘清理案例等内容,参考Red Hat Enterprise Linux 10官方文档,适合运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 磁盘使用概念与作用

磁盘使用管理是Linux系统管理的重要组成部分。df命令用于查看文件系统磁盘空间使用情况,du命令用于查看目录或文件占用的磁盘空间。合理管理磁盘空间可以确保系统稳定运行。

磁盘使用管理的重要性:

  • 系统稳定性:防止磁盘空间不足导致系统故障
  • 性能优化:合理分配磁盘空间提高性能
  • 容量规划:为未来增长预留空间
  • 故障预防:及时发现和处理磁盘空间问题

1.2 df与du命令区别

df和du命令的区别:

# df与du命令区别

# 1. df命令特点
– 查看文件系统磁盘空间使用情况
– 显示整个文件系统的使用情况
– 包含已挂载的文件系统
– 显示总容量、已用、可用空间

# 2. du命令特点
– 查看目录或文件占用的磁盘空间
– 显示指定目录或文件的使用情况
– 可以递归统计子目录
– 显示实际占用的磁盘块

# 3. df与du对比
特性 df du
查看对象 文件系统 目录/文件
统计方式 文件系统级别 文件级别
显示内容 总容量、已用、可用 占用空间大小
使用场景 查看磁盘整体使用 查看目录占用

# 4. df使用场景
– 查看磁盘空间使用率
– 检查磁盘是否快满
– 查看文件系统挂载点
– 查看文件系统类型

# 5. du使用场景
– 查看目录占用空间
– 查找大文件
– 清理磁盘空间
– 分析磁盘使用

# 6. 常用组合
– df -h:人类可读格式显示磁盘使用
– du -sh *:查看当前目录下各文件/目录大小
– du -h –max-depth=1:查看目录一级子目录大小

1.3 磁盘监控重要性

磁盘监控是系统运维的重要工作:

# 磁盘监控重要性

# 1. 监控指标
– 磁盘使用率
– 磁盘IO性能
– 磁盘剩余空间
– 文件系统类型

# 2. 监控阈值
– 警告阈值:80%
– 严重阈值:90%
– 紧急阈值:95%

# 3. 监控频率
– 实时监控:关键系统
– 定时监控:普通系统
– 手动检查:日常巡检

# 4. 监控工具
– df/du命令
– 监控系统(Zabbix/Prometheus)
– 日志分析
– 自动告警

# 5. 监控策略
– 定期检查磁盘使用率
– 设置自动告警
– 记录历史数据
– 分析增长趋势

# 6. 应急预案
– 磁盘空间不足时的处理流程
– 临时文件清理策略
– 日志文件轮转策略
– 数据迁移方案

Part02-生产环境规划与建议

2.1 磁盘规划原则

在生产环境中,磁盘规划应遵循以下原则:

# 磁盘规划原则

# 1. 分区规划
/ 根分区 50GB
/boot 引导分区 1GB
/var 日志分区 20GB
/home 用户分区 根据需求
/tmp 临时分区 10GB
/data 数据分区 根据需求

# 2. 空间预留
– 系统分区:预留30%空间
– 数据分区:预留20%空间
– 日志分区:预留40%空间
– 临时分区:预留50%空间

# 3. 文件系统选择
– 系统分区:XFS(RHEL 10默认)
– 数据分区:XFS(大文件)
– 小文件分区:ext4
– 共享存储:GFS2

# 4. LVM规划
– 使用LVM便于扩展
– 预留VG空间
– 配置快照
– 定期备份

# 5. 监控规划
– 设置磁盘使用率告警
– 监控磁盘IO
– 记录历史数据
– 分析增长趋势

# 6. 维护规划
– 定期清理临时文件
– 定期轮转日志文件
– 定期备份数据
– 定期检查磁盘健康

2.2 磁盘告警建议

生产环境磁盘告警建议:

磁盘告警最佳实践:

  • 设置多级告警阈值
  • 区分不同分区告警
  • 配置告警通知渠道
  • 记录告警历史
  • 定期测试告警
  • 建立应急响应流程
# 磁盘告警配置示例

# 1. 告警阈值配置
警告级别 使用率 处理时间
警告 80% 24小时内
严重 90% 4小时内
紧急 95% 立即处理

# 2. 告警脚本
# cat > /tmp/disk_alert.sh << 'EOF' #!/bin/bash WARNING_THRESHOLD=80 CRITICAL_THRESHOLD=90 EMERGENCY_THRESHOLD=95 df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1) partition=$(echo $output | awk '{ print $2 }') if [ $usep -ge $EMERGENCY_THRESHOLD ]; then echo "EMERGENCY: $partition is ${usep}% full" # 发送紧急告警 elif [ $usep -ge $CRITICAL_THRESHOLD ]; then echo "CRITICAL: $partition is ${usep}% full" # 发送严重告警 elif [ $usep -ge $WARNING_THRESHOLD ]; then echo "WARNING: $partition is ${usep}% full" # 发送警告告警 fi done EOF # 3. 定时任务配置 # crontab -e */30 * * * * /tmp/disk_alert.sh # 4. 告警通知配置 # 邮件通知 # 钉钉通知 # 企业微信通知 # 短信通知 # 5. 告警历史记录 # 记录告警时间、分区、使用率、处理结果 # 6. 告警测试 # 手动触发告警测试 # 验证告警通知 # 验证处理流程

2.3 磁盘审计策略

定期审计磁盘使用情况:

# 磁盘审计脚本

# 1. 创建磁盘审计脚本
# cat > /tmp/disk_audit.sh << 'EOF' #!/bin/bash REPORT="/tmp/disk_audit_report.txt" echo "========================================" > $REPORT
echo “Disk Audit Report – $(date)” >> $REPORT
echo “========================================” >> $REPORT
echo “” >> $REPORT

# 1. 磁盘使用情况
echo “1. Disk Usage” >> $REPORT
echo “————-” >> $REPORT
df -h >> $REPORT
echo “” >> $REPORT

# 2. 磁盘inode使用情况
echo “2. Inode Usage” >> $REPORT
echo “————–” >> $REPORT
df -i >> $REPORT
echo “” >> $REPORT

# 3. 大目录统计
echo “3. Large Directories (>1GB)” >> $REPORT
echo “—————————” >> $REPORT
du -h –max-depth=1 / 2>/dev/null | grep ‘[0-9]G’ | sort -hr >> $REPORT
echo “” >> $REPORT

# 4. 大文件统计
echo “4. Large Files (>100MB)” >> $REPORT
echo “———————–” >> $REPORT
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk ‘{ print $5, $9 }’ | sort -hr >> $REPORT
echo “” >> $REPORT

# 5. 临时文件统计
echo “5. Temporary Files” >> $REPORT
echo “——————” >> $REPORT
du -sh /tmp /var/tmp 2>/dev/null >> $REPORT
echo “” >> $REPORT

# 6. 日志文件统计
echo “6. Log Files” >> $REPORT
echo “————” >> $REPORT
du -sh /var/log/* 2>/dev/null | sort -hr >> $REPORT
echo “” >> $REPORT

# 7. 用户目录统计
echo “7. User Directories” >> $REPORT
echo “——————-” >> $REPORT
for user in $(awk -F: ‘$3 >= 1000 && $3 != 65534 {print $1}’ /etc/passwd); do
home_dir=$(awk -F: -v u=$user ‘$1 == u {print $6}’ /etc/passwd)
if [ -d “$home_dir” ]; then
size=$(du -sh “$home_dir” 2>/dev/null | awk ‘{print $1}’)
echo “$user: $size” >> $REPORT
fi
done
echo “” >> $REPORT

# 8. 磁盘IO统计
echo “8. Disk I/O” >> $REPORT
echo “———–” >> $REPORT
iostat -x 1 3 >> $REPORT
echo “” >> $REPORT

echo “Audit completed. Report saved to $REPORT”
EOF

# 2. 执行审计脚本
# chmod +x /tmp/disk_audit.sh
# /tmp/disk_audit.sh
Audit completed. Report saved to /tmp/disk_audit_report.txt

# 3. 查看审计报告
# cat /tmp/disk_audit_report.txt

Part03-生产环境项目实施方案

3.1 df命令基础操作

df命令用于查看文件系统磁盘空间使用情况:

# df命令基础用法

# 1. 查看所有文件系统磁盘使用情况
# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 917644 0 917644 0% /dev
tmpfs 933024 0 933024 0% /dev/shm
tmpfs 933024 18760 914264 3% /run
tmpfs 933024 0 933024 0% /sys/fs/cgroup
/dev/mapper/rhel-root 52403200 1234567 51168633 3% /
/dev/sda1 1038336 123456 914880 12% /boot
tmpfs 186604 0 186604 0% /run/user/0

# 2. 以人类可读格式显示
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 896M 0 896M 0% /dev
tmpfs 911M 0 911M 0% /dev/shm
tmpfs 911M 19M 892M 3% /run
tmpfs 911M 0 911M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
/dev/sda1 1014M 121M 894M 12% /boot
tmpfs 183M 0 183M 0% /run/user/0

# 3. 查看inode使用情况
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 229411 368 229043 1% /dev
tmpfs 233256 1 233255 1% /dev/shm
tmpfs 233256 510 232746 1% /run
tmpfs 233256 16 233240 1% /sys/fs/cgroup
/dev/mapper/rhel-root 26214400 12345 26202055 1% /
/dev/sda1 524288 326 523962 1% /boot
tmpfs 233256 4 233252 1% /run/user/0

# 4. 查看文件系统类型
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 917644 0 917644 0% /dev
tmpfs tmpfs 933024 0 933024 0% /dev/shm
tmpfs tmpfs 933024 18760 914264 3% /run
tmpfs tmpfs 933024 0 933024 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 52403200 1234567 51168633 3% /
/dev/sda1 xfs 1038336 123456 914880 12% /boot
tmpfs tmpfs 186604 0 186604 0% /run/user/0

# 5. 查看指定文件系统
# df -h /dev/mapper/rhel-root
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 1.2G 49G 3% /

# 6. 查看指定目录所在文件系统
# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 1.2G 49G 3% /

# 7. 显示总计
# df -h –total
Filesystem Size Used Avail Use% Mounted on
devtmpfs 896M 0 896M 0% /dev
tmpfs 911M 0 911M 0% /dev/shm
tmpfs 911M 19M 892M 3% /run
tmpfs 911M 0 911M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
/dev/sda1 1014M 121M 894M 12% /boot
tmpfs 183M 0 183M 0% /run/user/0
total 3.8G 140M 3.7G 4% –

# 8. 排除指定文件系统类型
# df -h -x tmpfs
Filesystem Size Used Avail Use% Mounted on
devtmpfs 896M 0 896M 0% /dev
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
/dev/sda1 1014M 121M 894M 12% /boot

# 9. 只显示指定文件系统类型
# df -h -t xfs
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
/dev/sda1 1014M 121M 894M 12% /boot

# 10. 显示所有文件系统(包括虚拟文件系统)
# df -a
Filesystem 1K-blocks Used Available Use% Mounted on
sysfs 0 0 0 – /sys
proc 0 0 0 – /proc
devtmpfs 917644 0 917644 0% /dev
securityfs 0 0 0 – /sys/kernel/security
tmpfs 933024 0 933024 0% /dev/shm

# 11. 以POSIX格式输出
# df -P
Filesystem 1024-blocks Used Available Capacity Mounted on
devtmpfs 917644 0 917644 0% /dev
tmpfs 933024 0 933024 0% /dev/shm
tmpfs 933024 18760 914264 3% /run

# 12. 查看磁盘使用率排序
# df -h | sort -k5 -hr
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1014M 121M 894M 12% /boot
tmpfs 911M 19M 892M 3% /run
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
devtmpfs 896M 0 896M 0% /dev
tmpfs 911M 0 911M 0% /dev/shm
tmpfs 911M 0 911M 0% /sys/fs/cgroup
tmpfs 183M 0 183M 0% /run/user/0

# 13. 查看磁盘使用率超过阈值的分区
# df -h | awk ‘$5+0 > 10 {print $0}’
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1014M 121M 894M 12% /boot

# 14. 查看本地文件系统
# df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 1.2G 49G 3% /
/dev/sda1 1014M 121M 894M 12% /boot

# 15. 监控磁盘使用变化
# watch -n 1 df -h

3.2 du命令基础操作

du命令用于查看目录或文件占用的磁盘空间:

# du命令基础用法

# 1. 查看当前目录占用空间
# du
4 ./dir1
4 ./dir2
12 .

# 2. 以人类可读格式显示
# du -h
4.0K ./dir1
4.0K ./dir2
12K .

# 3. 查看指定目录占用空间
# du -h /var/log
4.0K /var/log/private
4.0K /var/log/samba
4.0K /var/log/sssd

12M /var/log

# 4. 查看目录总大小
# du -sh /var/log
12M /var/log

# 5. 查看当前目录下各文件/目录大小
# du -sh *
4.0K dir1
4.0K dir2
4.0K file1.txt
4.0K file2.txt

# 6. 查看目录一级子目录大小
# du -h –max-depth=1 /var
4.0K /var/adm
4.0K /var/cache
4.0K /var/crash
4.0K /var/db
4.0K /var/empty
4.0K /var/ftp
4.0K /var/games
4.0K /var/gopher
4.0K /var/kerberos
4.0K /var/lib
4.0K /var/local
12M /var/log
4.0K /var/mail
4.0K /var/nis
4.0K /var/opt
4.0K /var/preserve
0 /var/run
4.0K /var/spool
4.0K /var/tmp
4.0K /var/www
4.0K /var/yp
25M /var

# 7. 查看目录二级子目录大小
# du -h –max-depth=2 /var
4.0K /var/adm
4.0K /var/cache/dnf
4.0K /var/cache/ldconfig
4.0K /var/cache/man
8.0K /var/cache

25M /var

# 8. 按大小排序
# du -h /var | sort -hr | head -n 10
25M /var
12M /var/log
8.0K /var/cache
4.0K /var/lib/systemd
4.0K /var/lib/rpm
4.0K /var/lib/rpm-state
4.0K /var/lib/sss
4.0K /var/lib
4.0K /var/log/private
4.0K /var/log/samba

# 9. 查看指定文件大小
# du -h /var/log/messages
4.0K /var/log/messages

# 10. 查看多个文件大小
# du -h /var/log/messages /var/log/secure
4.0K /var/log/messages
4.0K /var/log/secure

# 11. 排除指定目录
# du -h –exclude=/var/log /var
4.0K /var/adm
4.0K /var/cache

13M /var

# 12. 只统计指定文件类型
# find /var/log -name “*.log” -exec du -h {} \;
4.0K /var/log/boot.log
4.0K /var/log/dnf.log
4.0K /var/log/dnf.librepo.log
4.0K /var/log/hawkey.log

# 13. 查看目录占用空间(包括硬链接)
# du -l /var/log
4 /var/log/private
4 /var/log/samba

12 /var/log

# 14. 查看目录占用空间(显示时间)
# du -h –time /var/log
4.0K 2026-04-02 10:00 /var/log/private
4.0K 2026-04-02 10:00 /var/log/samba

12M 2026-04-02 10:00 /var/log

# 15. 查看目录占用空间(按修改时间排序)
# du -h –time /var/log | sort -k2
4.0K 2026-04-02 10:00 /var/log/private
4.0K 2026-04-02 10:00 /var/log/samba

12M 2026-04-02 10:00 /var/log

3.3 磁盘管理高级用法

磁盘管理的高级用法和技巧:

# 磁盘管理高级用法

# 1. 查找大文件
# find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk ‘{ print $5, $9 }’ | sort -hr
500M /var/lib/mysql/ibdata1
200M /var/log/audit/audit.log
150M /var/lib/docker/overlay2/…

# 2. 查找大目录
# du -h –max-depth=1 / 2>/dev/null | grep ‘[0-9]G’ | sort -hr
5.0G /usr
2.0G /var
1.0G /home

# 3. 查找指定时间内修改的文件
# find /var/log -type f -mtime -7 -exec ls -lh {} \;
-rw——-. 1 root root 4.0K Apr 2 10:00 /var/log/messages
-rw——-. 1 root root 4.0K Apr 2 10:00 /var/log/secure

# 4. 查找并删除临时文件
# find /tmp -type f -mtime +7 -delete

# 5. 查找并删除大文件
# find /var/log -type f -size +100M -delete

# 6. 磁盘使用率监控脚本
# cat > /tmp/disk_monitor.sh << 'EOF' #!/bin/bash THRESHOLD=80 df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1) partition=$(echo $output | awk '{ print $2 }') if [ $usep -ge $THRESHOLD ]; then echo "Warning: $partition is ${usep}% full" # 查找大文件 echo "Large files on $partition:" find $(df -h | grep $partition | awk '{print $NF}') -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -n 10
fi
done
EOF

# 7. 磁盘清理脚本
# cat > /tmp/disk_cleanup.sh << 'EOF' #!/bin/bash echo "Starting disk cleanup..." # 清理临时文件 echo "Cleaning temporary files..." find /tmp -type f -mtime +7 -delete find /var/tmp -type f -mtime +7 -delete # 清理日志文件 echo "Cleaning old log files..." find /var/log -type f -name "*.log" -mtime +30 -delete find /var/log -type f -name "*.gz" -mtime +30 -delete # 清理包管理器缓存 echo "Cleaning package manager cache..." dnf clean all # 清理journal日志 echo "Cleaning journal logs..." journalctl --vacuum-time=7d echo "Disk cleanup completed" df -h EOF # 8. 磁盘使用趋势分析 # cat > /tmp/disk_trend.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/disk_usage.log" # 记录当前磁盘使用情况 echo "$(date): $(df -h / | tail -n 1 | awk '{print $5}')" >> $LOG_FILE

# 显示最近7天的趋势
echo “Disk usage trend (last 7 days):”
tail -n 7 $LOG_FILE
EOF

# 9. 磁盘IO监控
# iostat -x 1 5
Linux 4.18.0-477.el8.x86_64 (localhost) 04/02/2026 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 0.50 0.00 0.00 99.00

Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

# 10. 磁盘健康检查
# smartctl -H /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-4.18.0-477.el8.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Part04-生产案例与实战讲解

4.1 不同场景磁盘监控案例

不同场景下的磁盘监控案例:

# 不同场景磁盘监控

# 1. Web服务器磁盘监控
# cat > /tmp/web_disk_monitor.sh << 'EOF' #!/bin/bash echo "Web Server Disk Monitor - $(date)" # 检查磁盘使用率 df -h | grep -E '/$|/var|/data' # 检查日志目录大小 echo "" echo "Log directory size:" du -sh /var/log/nginx /var/log/httpd 2>/dev/null

# 检查上传目录大小
echo “”
echo “Upload directory size:”
du -sh /var/www/html/uploads 2>/dev/null

# 检查缓存目录大小
echo “”
echo “Cache directory size:”
du -sh /var/cache/nginx 2>/dev/null

# 检查大文件
echo “”
echo “Large files (>100MB):”
find /var/www -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -n 10
EOF

# 2. 数据库服务器磁盘监控
# cat > /tmp/db_disk_monitor.sh << 'EOF' #!/bin/bash echo "Database Server Disk Monitor - $(date)" # 检查磁盘使用率 df -h | grep -E '/$|/data|/var' # 检查数据目录大小 echo "" echo "Data directory size:" du -sh /var/lib/mysql /var/lib/pgsql 2>/dev/null

# 检查日志目录大小
echo “”
echo “Log directory size:”
du -sh /var/log/mysql /var/log/pgsql 2>/dev/null

# 检查备份目录大小
echo “”
echo “Backup directory size:”
du -sh /backup 2>/dev/null

# 检查大文件
echo “”
echo “Large files (>1GB):”
find /var/lib/mysql /var/lib/pgsql -type f -size +1G -exec ls -lh {} \; 2>/dev/null | head -n 10
EOF

# 3. 应用服务器磁盘监控
# cat > /tmp/app_disk_monitor.sh << 'EOF' #!/bin/bash echo "Application Server Disk Monitor - $(date)" # 检查磁盘使用率 df -h | grep -E '/$|/opt|/data|/var' # 检查应用目录大小 echo "" echo "Application directory size:" du -sh /opt/app 2>/dev/null

# 检查日志目录大小
echo “”
echo “Log directory size:”
du -sh /var/log/app 2>/dev/null

# 检查数据目录大小
echo “”
echo “Data directory size:”
du -sh /data/app 2>/dev/null

# 检查临时目录大小
echo “”
echo “Temporary directory size:”
du -sh /tmp /var/tmp 2>/dev/null

# 检查大文件
echo “”
echo “Large files (>500MB):”
find /opt/app /data/app -type f -size +500M -exec ls -lh {} \; 2>/dev/null | head -n 10
EOF

# 4. 文件服务器磁盘监控
# cat > /tmp/file_disk_monitor.sh << 'EOF' #!/bin/bash echo "File Server Disk Monitor - $(date)" # 检查磁盘使用率 df -h | grep -E '/$|/data|/shared' # 检查共享目录大小 echo "" echo "Shared directory size:" du -sh /shared/* 2>/dev/null

# 检查用户目录大小
echo “”
echo “User directory size:”
for user in $(awk -F: ‘$3 >= 1000 && $3 != 65534 {print $1}’ /etc/passwd); do
home_dir=$(awk -F: -v u=$user ‘$1 == u {print $6}’ /etc/passwd)
if [ -d “$home_dir” ]; then
size=$(du -sh “$home_dir” 2>/dev/null | awk ‘{print $1}’)
echo “$user: $size”
fi
done

# 检查大文件
echo “”
echo “Large files (>1GB):”
find /shared /home -type f -size +1G -exec ls -lh {} \; 2>/dev/null | head -n 10
EOF

# 5. 容器服务器磁盘监控
# cat > /tmp/container_disk_monitor.sh << 'EOF' #!/bin/bash echo "Container Server Disk Monitor - $(date)" # 检查磁盘使用率 df -h | grep -E '/$|/var' # 检查Docker目录大小 echo "" echo "Docker directory size:" du -sh /var/lib/docker 2>/dev/null

# 检查容器镜像大小
echo “”
echo “Container images:”
docker images –format “table {{.Repository}}\t{{.Tag}}\t{{.Size}}” 2>/dev/null

# 检查容器日志大小
echo “”
echo “Container logs:”
find /var/lib/docker/containers -name “*-json.log” -exec ls -lh {} \; 2>/dev/null | head -n 10

# 检查大文件
echo “”
echo “Large files (>1GB):”
find /var/lib/docker -type f -size +1G -exec ls -lh {} \; 2>/dev/null | head -n 10
EOF

4.2 磁盘清理案例

磁盘清理的实际案例:

# 磁盘清理案例

# 1. 清理系统临时文件
# cat > /tmp/cleanup_temp.sh << 'EOF' #!/bin/bash echo "Cleaning temporary files..." # 清理/tmp目录 find /tmp -type f -mtime +7 -delete find /tmp -type d -empty -delete # 清理/var/tmp目录 find /var/tmp -type f -mtime +30 -delete find /var/tmp -type d -empty -delete echo "Temporary files cleaned" EOF # 2. 清理日志文件 # cat > /tmp/cleanup_logs.sh << 'EOF' #!/bin/bash echo "Cleaning log files..." # 清理旧日志文件 find /var/log -type f -name "*.log" -mtime +30 -delete find /var/log -type f -name "*.gz" -mtime +30 -delete find /var/log -type f -name "*.old" -mtime +30 -delete # 清空大日志文件 find /var/log -type f -name "*.log" -size +100M -exec truncate -s 0 {} \; # 清理journal日志 journalctl --vacuum-time=7d echo "Log files cleaned" EOF # 3. 清理包管理器缓存 # cat > /tmp/cleanup_package.sh << 'EOF' #!/bin/bash echo "Cleaning package manager cache..." # 清理DNF缓存 dnf clean all # 清理旧内核 package-cleanup --oldkernels --count=2 # 清理未安装的包 dnf autoremove echo "Package manager cache cleaned" EOF # 4. 清理Docker # cat > /tmp/cleanup_docker.sh << 'EOF' #!/bin/bash echo "Cleaning Docker..." # 删除未使用的镜像 docker image prune -a -f # 删除未使用的容器 docker container prune -f # 删除未使用的卷 docker volume prune -f # 删除未使用的网络 docker network prune -f # 删除构建缓存 docker builder prune -a -f echo "Docker cleaned" EOF # 5. 清理应用缓存 # cat > /tmp/cleanup_app.sh << 'EOF' #!/bin/bash echo "Cleaning application cache..." # 清理应用缓存目录 find /opt/app/cache -type f -mtime +7 -delete find /opt/app/tmp -type f -mtime +7 -delete # 清理会话文件 find /opt/app/sessions -type f -mtime +1 -delete # 清理上传临时文件 find /opt/app/uploads/tmp -type f -mtime +1 -delete echo "Application cache cleaned" EOF # 6. 完整磁盘清理 # cat > /tmp/full_cleanup.sh << 'EOF' #!/bin/bash echo "Starting full disk cleanup..." # 记录清理前磁盘使用 echo "Before cleanup:" df -h # 执行各项清理 /tmp/cleanup_temp.sh /tmp/cleanup_logs.sh /tmp/cleanup_package.sh /tmp/cleanup_docker.sh /tmp/cleanup_app.sh # 记录清理后磁盘使用 echo "" echo "After cleanup:" df -h echo "Full disk cleanup completed" EOF # chmod +x /tmp/full_cleanup.sh # /tmp/full_cleanup.sh

4.3 磁盘故障排查案例

磁盘相关故障的排查和解决:

# 磁盘故障排查案例

# 案例1:磁盘空间不足
# 症状:提示”No space left on device”

# 排查步骤:
# 1. 检查磁盘使用率
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 50G 0 100% /

# 2. 查找大文件
# find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -n 10
-rw——-. 1 root root 5.0G Apr 2 10:00 /var/log/audit/audit.log
-rw——-. 1 root root 2.0G Apr 2 10:00 /var/log/messages

# 3. 查找大目录
# du -h –max-depth=1 / 2>/dev/null | grep ‘[0-9]G’ | sort -hr
5.0G /var
2.0G /usr
1.0G /home

# 解决:清理大文件或扩展磁盘

# 案例2:inode耗尽
# 症状:磁盘有空间但无法创建文件

# 排查步骤:
# 1. 检查inode使用率
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/rhel-root 26214400 26214400 0 100% /

# 2. 查找大量小文件
# find / -type d -exec sh -c ‘echo “$(find “$1” -type f | wc -l) $1″‘ _ {} \; 2>/dev/null | sort -nr | head -n 10
1000000 /var/log/small_files
500000 /tmp/test

# 解决:删除大量小文件

# 案例3:磁盘IO性能问题
# 症状:系统响应缓慢

# 排查步骤:
# 1. 检查磁盘IO
# iostat -x 1 5
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 1000.00 500.00 8000.00 4000.00 0.00 0.00 0.00 0.00 50.00 50.00 75.00 8.00 8.00 0.67 100.00

# 2. 检查IO等待
# top
%Cpu(s): 0.5 us, 0.5 sy, 0.0 ni, 49.0 id, 50.0 wa, 0.0 hi, 0.0 si, 0.0 st

# 解决:优化磁盘IO或升级硬件

# 案例4:文件系统只读
# 症状:无法写入文件

# 排查步骤:
# 1. 检查文件系统挂载
# mount | grep “on / ”
/dev/mapper/rhel-root on / type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

# 2. 检查文件系统错误
# dmesg | grep -i error
XFS (dm-0): metadata I/O error

# 解决:修复文件系统或重新挂载

# 案例5:磁盘空间统计不准确
# 症状:df显示空间不足,但du显示空间充足

# 排查步骤:
# 1. 检查已删除但未释放的文件
# lsof | grep deleted
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 4w REG 253,0 10000 1234 /var/log/nginx/access.log (deleted)

# 解决:重启进程或强制释放文件

# 案例6:LVM空间不足
# 症状:LVM卷空间不足

# 排查步骤:
# 1. 检查VG空间
# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz–n- <50.00g 0 # 2. 检查LV使用 # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel -wi-ao---- <45.00g swap rhel -wi-ao---- 5.00g # 解决:添加物理卷或扩展VG # 案例7:磁盘挂载失败 # 症状:无法挂载磁盘 # 排查步骤: # 1. 检查磁盘设备 # fdisk -l # 2. 检查文件系统 # blkid # 3. 检查挂载点 # mount -a mount: /data: mount(2) system call failed: Structure needs cleaning. # 解决:修复文件系统 # 案例8:磁盘配额限制 # 症状:用户无法写入文件 # 排查步骤: # 1. 检查磁盘配额 # repquota /home # 2. 检查用户配额 # quota -u username # 解决:调整配额或清理文件 # 案例9:NFS挂载问题 # 症状:NFS挂载卡住 # 排查步骤: # 1. 检查NFS服务 # showmount -e nfs-server # 2. 检查网络连接 # ping nfs-server # 3. 检查NFS挂载 # mount -t nfs nfs-server:/data /mnt # 解决:检查NFS服务和网络 # 案例10:磁盘阵列故障 # 症状:RAID阵列降级 # 排查步骤: # 1. 检查RAID状态 # cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda1[0] sdb1[1](F) 52428672 blocks super 1.2 [2/1] [_U] # 2. 检查磁盘状态 # mdadm --detail /dev/md0 # 解决:更换故障磁盘并重建RAID

Part05-风哥经验总结与分享

5.1 磁盘管理最佳实践

风哥提示:磁盘管理是Linux系统运维的核心工作,必须建立完善的磁盘监控和清理机制。

# 磁盘管理最佳实践清单

# 1. 磁盘监控原则
– 定期检查磁盘使用率
– 设置自动告警
– 记录历史数据
– 分析增长趋势

# 2. 磁盘清理原则
– 定期清理临时文件
– 定期清理日志文件
– 定期清理缓存文件
– 定期清理旧文件

# 3. 磁盘规划原则
– 合理分区
– 预留空间
– 使用LVM
– 定期备份

# 4. 磁盘告警原则
– 设置多级告警
– 区分不同分区
– 配置通知渠道
– 建立应急流程

# 5. 磁盘安全原则
– 定期检查磁盘健康
– 监控磁盘IO
– 记录磁盘变更
– 建立应急预案

5.2 常见问题与解决

# 磁盘管理常见问题与解决

# 问题1:磁盘空间不足
# 解决:查找并清理大文件
# find / -type f -size +100M -exec ls -lh {} \;

# 问题2:inode耗尽
# 解决:查找并删除大量小文件
# find / -type d -exec sh -c ‘echo “$(find “$1” -type f | wc -l) $1″‘ _ {} \;

# 问题3:磁盘IO性能问题
# 解决:优化磁盘IO或升级硬件
# iostat -x 1 5

# 问题4:文件系统只读
# 解决:修复文件系统或重新挂载
# mount -o remount,rw /

# 问题5:磁盘空间统计不准确
# 解决:检查已删除但未释放的文件
# lsof | grep deleted

# 问题6:LVM空间不足
# 解决:添加物理卷或扩展VG
# vgs, lvs

# 问题7:磁盘挂载失败
# 解决:检查磁盘设备和文件系统
# fdisk -l, blkid

# 问题8:磁盘配额限制
# 解决:调整配额或清理文件
# repquota, quota

# 问题9:NFS挂载问题
# 解决:检查NFS服务和网络
# showmount -e, ping

# 问题10:磁盘阵列故障
# 解决:更换故障磁盘并重建RAID
# cat /proc/mdstat, mdadm –detail

5.3 磁盘管理工具推荐

推荐的磁盘管理工具:

  • 基本工具:df, du, ls, find
  • 分区工具:fdisk, parted, gdisk
  • LVM工具:pvcreate, vgcreate, lvcreate
  • 文件系统工具:mkfs, xfs_admin, tune2fs
  • 监控工具:iostat, iotop, dstat
# 磁盘管理工具使用示例

# 1. 查看磁盘使用
# df -h
# du -sh *

# 2. 查找大文件
# find / -type f -size +100M -exec ls -lh {} \;

# 3. 查找大目录
# du -h –max-depth=1 / | grep ‘[0-9]G’ | sort -hr

# 4. 监控磁盘IO
# iostat -x 1 5
# iotop

# 5. 检查磁盘健康
# smartctl -H /dev/sda

# 6. 检查文件系统
# xfs_repair -n /dev/sda1
# e2fsck -n /dev/sda1

# 7. LVM管理
# vgs, lvs, pvs

# 8. 磁盘分区
# fdisk -l
# parted -l

# 9. 挂载管理
# mount, umount
# blkid

# 10. 磁盘配额
# repquota, quota, setquota

风哥总结:磁盘管理是Linux系统运维的基础,掌握df和du命令,建立完善的磁盘监控和清理机制,是每个运维人员必备的技能。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息