df出力で読み取り専用ファイルシステムをフィルタリングする方法は?

df出力で読み取り専用ファイルシステムをフィルタリングする方法は?

私はこれを使ってdfマウントされたファイルシステムがいっぱいであることを確認します。私はそのうちの1つでも90%以上の使用量を得たら私に電子メールを送るcronタスクを持っています。

問題は、一部のアプリケーション(Ubuntuディストリビューション)がスナップを使用して、そのアプリケーション用に特別にマウントされた読み取り専用ファイルシステムを作成することです。報告されているように常に100%いっぱいですdf。読み取り専用で完璧にできないので、これは適切だと思います。df出力から除外したいです。

df-x, --exclude-type=TYPE役に立つコマンドラインフラグがありますが、マニュアルページには可能な値が文書化されていないため、TYPEそれを使用して読み取り専用ファイルシステムを除外できるかどうかはわかりません。

df以下は私のシステムの1つの出力例です。

$ 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

はい、ファイルシステムのリストに対するスナップの侵入は迷惑になる可能性があります。

あなたは正しいですdf -x-スナップクラフトすべてのスナップショットは読み取り専用の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し、rwdfで使用する出力をクリーンアップし、デバイスリストをdfに渡します。mountのコマンドを使用して、$(...)目的に合わせてフィルタリングを調整できます。

関連情報