防止 du 命令报告有关 /snap 目录的夸大信息

Fed*_*eli 5 disk squashfs df du snap

我在单个 8GB 驱动器上安装了 Ubuntu 20.04 服务器。默认安装还安装了一些“快照”。因此,该df命令还报告了一些“squashfs”文件系统:

# df -mT
Filesystem     Type     1M-blocks  Used Available Use% Mounted on
/dev/root      ext4          7877  1837      6025  24% /
devtmpfs       devtmpfs       465     0       465   0% /dev
tmpfs          tmpfs          477     0       477   0% /dev/shm
tmpfs          tmpfs           96     1        95   1% /run
tmpfs          tmpfs            5     0         5   0% /run/lock
tmpfs          tmpfs          477     0       477   0% /sys/fs/cgroup
/dev/loop0     squashfs        18    18         0 100% /snap/amazon-ssm-agent/1566
/dev/loop1     squashfs        94    94         0 100% /snap/core/9066
/dev/loop2     squashfs        55    55         0 100% /snap/core18/1705
/dev/loop3     squashfs        69    69         0 100% /snap/lxd/14804
/dev/loop4     squashfs        70    70         0 100% /snap/lxd/14890
/dev/loop5     squashfs        55    55         0 100% /snap/core18/1754
tmpfs          tmpfs           96     0        96   0% /run/user/1000
Run Code Online (Sandbox Code Playgroud)

如您所见,(唯一的)磁盘中仅存储了 1837MB 的数据。

现在,我正在尝试/使用以下命令列出 root ( )下存在的每个目录的磁盘使用情况:

# du -smc /* 2>/dev/null
0   /bin
48  /boot
0   /dev
8   /etc
1   /home
0   /lib
0   /lib32
0   /lib64
0   /libx32
1   /lost+found
1   /media
1   /mnt
1   /opt
0   /proc
1   /root
1   /run
0   /sbin
1116    /snap
1   /srv
0   /sys
1   /tmp
1166    /usr
601 /var
2938    total
Run Code Online (Sandbox Code Playgroud)

输出显示/snap目录使用了大量磁盘空间,这当然不是真的。

计算驻留在“真实磁盘”文件系统上的文件大小的正确方法是什么?添加选项-xtodu并没有让我感到舒服,因为将来我可能会安装另一个“真实磁盘”文件系统/home,例如,我确实希望将其计入du的输出中。

ste*_*ver 4

与此不同df,据我所知,du它不提供--exclude-type跳过特定文件系统类型的功能。但是,您可以通过 glob 模式排除特定的顶级目录:

du -smc --exclude=/snap /* 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

或(也排除临时文件系统)并假设您的 shell 支持大括号扩展:

du -smc --exclude=/{proc,run,sys,snap} /* 2>/dev/null
Run Code Online (Sandbox Code Playgroud)


N0r*_*ert 3

您必须正确使用 的du参数。就像是:

du --one-file-system -smc /* --exclude=/snap 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

man du供本地或在线参考使用。