Disk-Usage

如何從 df 輸出中過濾只讀文件系統?

  • February 16, 2019

df用來檢查我掛載的任何文件系統是否接近滿。我有一個 cron 工作,如果其中任何一個的使用率超過 90%,就會向我發送電子郵件。

問題是現在使用 snap 安裝了一些應用程序(Ubuntu 發行版),它創建了一個專門為該應用程序安裝的只讀文件系統。正如 報告的那樣,它們始終是 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

我想刪除所有這些完整的快照條目以及將來可能以只讀方式安裝的任何其他文件系統。

中使用的文件系統類型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)

是的,snap 侵入文件系統列表可能很煩人……

你在正確的路線上df -x...。所有快照都使用只讀 Squashfs 文件系統1,因此您可以使用以下命令將它們全部過濾掉:

df -xsquashfs

引用自:https://unix.stackexchange.com/questions/479102