命令简介


dudf 是 Linux 系统中常用的两个磁盘空间管理命令,用于查看磁盘的使用情况。

  • du (disk usage):用于显示文件和目录所占用的磁盘空间。
  • df (disk free):用于显示文件系统的磁盘使用情况统计。
命令区别

命令

功能

作用范围

du

显示文件或目录的大小

文件或目录

df

显示文件系统的磁盘使用情况

文件系统

简单来说,du 是从文件角度去查看磁盘占用情况,而 df 是从文件系统角度去查看磁盘占用情况。

命令参数
du 命令常用参数
  • -h:以人类可读的格式显示大小,例如 1K、2.3M、4G。
  • -s:仅显示总计,只显示指定目录或文件的大小。
  • -a:显示目录中所有文件的大小。
  • -m:以 MB 为单位显示。
  • -k:以 KB 为单位显示。
  • –max-depth=N:指定递归的最大深度。
df 命令常用参数
  • -h:以人类可读的格式显示大小,例如 1K、2.3M、4G。
  • -k:以 KB 为单位显示。
  • -m:以 MB 为单位显示。
  • -T:显示文件系统的类型。
  • -i:显示 inode 信息。
命令用法示例
du 命令示例
  • 查看当前目录下所有文件和子目录的大小,并以人类可读的格式显示:```
    du -sh *
  • 查看 /var 目录的大小,并以 MB 为单位显示:```
    du -sm /var
  • 递归显示 /home 目录下所有文件和子目录的大小,并指定最大递归深度为 2:```
    du -h --max-depth=2 /home
df 命令示例
  • 查看所有文件系统的磁盘使用情况,并以人类可读的格式显示:```
    df -h
  • 查看 /boot 分区的使用情况,并显示文件系统类型:```
    df -hT /boot
运维示例

案例:查找占用空间最大的10个目录

  1. 使用 du 命令递归统计所有目录大小:
du -sh /*
  • 1.
  1. 将输出结果排序,并取前10行:
du -sh /* | sort -nr | head -n 10
  • 1.

案例:检查系统是否有磁盘空间不足的风险

  1. 使用 df 命令查看所有文件系统的使用情况:
df -h
  • 1.
  1. 过滤出使用率超过80%的文件系统:
df -h | awk '$5 >= "80%" {print $6}'
  • 1.

运维问题:dfdu 查询结果不一致分析与解决方案

问题根源

df -hdu -sh 两者虽然都用于查看磁盘使用情况,但其计算方式和统计范围存在差异:

  • df -h 从文件系统层面统计磁盘使用情况,包括文件数据、目录结构、元数据等。
  • du -sh 从文件层面统计磁盘使用情况,主要统计文件的大小,但不包括所有元数据。

因此,当出现结果不一致时,通常是以下因素导致:

  • 文件系统元数据: 包括 inode、目录条目、权限信息等,这些数据 df 会统计,而 du 通常不统计。
  • 特殊文件: 软链接、硬链接、设备文件、管道等特殊文件,其大小计算方式不同。
  • 文件系统碎片: 严重的磁盘碎片可能导致 dudf 计算结果的差异。
  • 未释放的资源: 已删除的文件被进程持有句柄、缓存数据未同步等情况。
  • 文件系统错误: 文件系统损坏可能导致统计不准确。
解决方案
  1. 检查文件系统元数据:
  • 使用 tune2fs 检查文件系统状态:```
    tune2fs -l /dev/sda1
  • 使用 fsck 检查并修复文件系统错误:```
    fsck -f /dev/sda1
  • 注意: fsck 操作可能导致数据丢失,请谨慎使用,建议在备份数据后进行。
  1. 检查特殊文件:
  • 使用 find 命令查找软链接和硬链接:```
    find /path/to/directory -type l
    find /path/to/directory -samefile 
  • 使用 ls -l 查看文件类型:```
    ls -l /path/to/file
  1. 检查未释放的资源:
  • 使用 lsof 查找持有已删除文件句柄的进程:```
    lsof | grep deleted
  • 终止相关进程:```
    kill -9 
  • 同步文件系统缓存:```
    sync
  1. 检查磁盘碎片:
  • 使用 fsck 命令检查磁盘碎片:```
    fsck -c /dev/sda1
  • 使用 e4fsdefrag 或其他工具进行碎片整理:```
    e4fsdefrag -f /dev/sda1
  1. 深入分析:
  • 使用 du -a 查看每个文件的大小: 逐一排查异常大的文件。
  • 使用 find 结合 xargs 进行批量处理:```
    find /path/to/directory -type f -size +1G -exec du -sh {} ;
  • 使用 tree 可视化目录结构: 帮助快速定位问题。
脚本自动化
#!/bin/bash

# 检查文件系统
tune2fs -l /dev/sda1
fsck -f /dev/sda1

# 检查未释放资源
lsof | grep deleted > /tmp/deleted_files.txt
if [ -s /tmp/deleted_files.txt ]; then
  echo "Found deleted files with open file descriptors:"
  cat /tmp/deleted_files.txt
fi

# 检查软链接和硬链接
find /path/to/directory -type l -print
find /path/to/directory -samefile <file> -print

# 检查磁盘碎片
e4fsdefrag -v /dev/sda1

# 其他检查和处理
# ...
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
注意事项
  • 备份数据: 在进行任何操作前,务必备份重要数据。
  • 谨慎操作: fscke4fsdefrag 等命令可能导致数据丢失,请谨慎使用。
  • 针对性处理: 根据具体情况选择合适的处理方案。
  • 定期检查: 将上述脚本集成到系统监控中,定期检查并处理。
总结

dudf 命令是 Linux 系统中非常重要的磁盘管理工具。通过灵活运用这两个命令,可以方便地查看磁盘使用情况,查找占用空间大的文件或目录,及时发现潜在的磁盘空间不足问题,从而更好地管理系统资源。