如何从 df 输出中过滤只读文件系统?

如何从 df 输出中过滤只读文件系统?

我用来df检查我安装的文件系统是否接近满。我有一个 cron 作业,如果其中任何一个的使用率超过 90%,它就会向我发送电子邮件。

问题是一些应用程序(Ubuntu 发行版)现在使用 snap 来安装,它会创建一个专门为该应用程序安装的只读文件系统。正如 所报告的,它们始终是 100% 满的df。我想这是合适的,因为它们是只读的并且无法变得更完整。我想将它们从df输出中排除。

df有一个-x, --exclude-type=TYPE命令行标志,看起来可能会有帮助,但手册页没有记录可能的值,所以TYPE我不确定是否可以使用它来排除只读文件系统。

df以下是我的一个系统上的输出示例:

$ df --output=pcent,target 
Use% Mounted on
  0% /dev
  1% /run
  7% /
  1% /dev/shm
  1% /run/lock
  0% /sys/fs/cgroup
100% /snap/gnome-3-26-1604/74
100% /snap/gnome-characters/139
100% /snap/core/5662
100% /snap/gnome-system-monitor/57
100% /snap/gnome-calculator/238
100% /snap/gnome-logs/45
100% /snap/gtk-common-themes/701
100% /snap/core/5742

这是我的由 cron 运行的脚本:

#!/bin/bash    
set -e 
THRESHOLD_PERCENT=90    
host=`hostname -f`
df --output=pcent,target | while read line 
do
    if [[ "$line" != Use* ]]
    then
        percent=${line/\%*/};
        if (( percent >= THRESHOLD_PERCENT ))
        then
            file=${line/* /}
            echo "$percent% disk usage on $host:$file"
        fi
    fi
done

我想删除所有这些完整的快照条目以及将来可能以只读方式安装的任何其他文件系统。

答案1

是的,snap 对文件系统列表的入侵可能会很烦人......

你是对的df -x- 作为Snapcraft说,所有快照都使用只读 Squashfs 文件系统,因此您可以使用以下方法将它们全部过滤掉:

df -xsquashfs

答案2

中使用的文件系统类型df是指文件系统的格式,例如ext4.

/proc/mounts您可以通过过滤(或 的输出mount)找到读写文件系统rw,然后使用它们来过滤 的输出df

您不能使用其中的所有rw条目,/proc/mounts因为其中还包含/proc您不希望出现在列表中的条目。

编辑

#!/bin/bash
df --output=pcent,target | grep -f <(awk '$4 ~ /^rw.*/ { print $2"$" }' /proc/mounts)

答案3

据我所知 df 不知道挂载选项,因为有挂载命令。您可以使用它来获取设备列表并将它们作为参数传递给 df.像这样:

df --output=pcent,target $(mount -t ext4 | grep rw | cut -d" " -f1)

这会按文件系统 ext4 进行过滤,然后 grep 查找具有 mount options 的文件系统rw,清理要用于 df 的输出,然后将设备列表传递给 df。您可以使用mount中的命令$(...)来使过滤符合您的目的。

相关内容