Prevent du command report inflated info about /snap directories

I have an Ubuntu 20.04 server installed on a single 8GB drive. The default installation has some "snap"s installed also. So, there are some "squashfs" file systems also reported by the df command:

# 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

As you see, there is only 1837MB of data stored in the (only) disk.

Now, I am trying the list that disk usage for each directory present under root (/) using the following command:

# 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

The output shows a large amount of disk space used by the /snap directory, which of course is not true.

What is the correct way to count the size of files residing only on "real disk" filesystems? Adding the option -x to du does not make me feel comfortable, because in the future I may have another "real disk" filesystem mounted under /home for example and I do want that to be counted in du's output.

2 Answers

Unlike df, as far as I know du does not provide a --exclude-type to skip particular filesystem types. However you could exclude specific top level directories by glob pattern:

du -smc --exclude=/snap /* 2>/dev/null

or (to exclude ephemeral filesystems as well) and assuming your shell supports brace expansion:

du -smc --exclude=/{proc,run,sys,snap} /* 2>/dev/null
1

You have to correctly use du's arguments. Something like:

du --one-file-system -smc /* --exclude=/snap 2> /dev/null

For reference use man du locally or online.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like