Linuxでファイルシステムの使用率を確認し、特定の制限を超えた場合の対処方法は何ですか?

Linuxでファイルシステムの使用率を確認し、特定の制限を超えた場合の対処方法は何ですか?

ファイルシステムの利用は、システム、つまりすべてのドライブの空き容量と使用スペースを計算する方法です。ドライブがしきい値制限を超える場合は、スペース使用量に基づいて最初の10個のファイルまたはディレクトリを印刷する必要があります。制限は、使用されているメモリ%と同じにすることができます。

Linux/AIX 用の bash スクリプトの作成をお手伝いします。

ベストアンサー1

調査するIBM Knowledge Center必要なコマンドの違いは解決されたようです。通知された、AIXではテストできなかったため、上記のサイトでAIXの違いについて学んだ内容に基づいて作成しました。標準のGNU / Linuxツールの特定のオプションを無視する前によくテストされています。 YMMV。

まず、ファイルシステムのリスト、各ファイルシステムで使用される割合、ファイルシステムのサイズ(閉じることができない)、および後で処理する必要があるマウントポイントを取得できます。使用すると、df -F %z %m次の結果が返されます。これは/dev/sda1 1545476 78% /home、デバイスにインストールされている1545476ブロックのうち78%が使用中であることを意味します。/dev/sda1/home

さらなる調査のために、ファイルシステムとマウントポイントと使用されたパーセント(「%」記号を除く)だけがわかるので、sed出力を使用して修正しますawk。これを行うときは、最初にuasgeと入力し、名前を2番目に指定し、実際のファイルシステムを表す行を削除して、各ファイルシステムのマウントポイントを取得することもできます。これにより、将来の処理が容易になります。最後に、最も重要な項目が最初に表示されるように、使用率に基づいて降順に並べ替えることができます。これにより、次のコマンドが提供されます。

df -F %z %m | grep -e '^/dev/[sh]d' | sed 's/%//g' | awk '{print $3" "$1" \""$4"\""}' | sort -rn

1行の最終出力は次のとおりです78 /dev/sda1 /home

これで、各行を読み取ってプリセット(ここでは75に設定)に従って、必要に応じて処理するループへの入力として使用できます。action_limit実行権限を持つシェルスクリプトとして保存します。

#!/bin/bash
action_limit=75;
df -F %z %m \
    | grep -e '^/dev/[sh]d' \
    | sed 's/%//g' \
    | awk '{print $3" "$1" "$4}' \
    | sort -r -n \
    | while read -r pct dsk mnt; do
        if test $action_limit -le $pct; then
            echo "$mnt for $dsk is using ${pct}%";
        fi;
    done

echoこれで適切なファイルシステムがわかったので、そのファイルシステムで実行したい操作のコマンドで行を置き換える必要があります。このechoコマンドは、他のコマンドを呼び出す必要がある場所を示し、スクリプトに渡すことができる情報を表示します。すべてを使用する必要はありません。おそらく$mnt取り付けポイントだけが必要です。スペースやその他の危険なシェル文字を含む可能性のあるディレクトリパスは、他のスクリプトまたはコマンドの引数$mntとして使用するときに引用符で囲む必要があります。

サイズごとに適切なファイルシステムの最上位のファイル/ディレクトリのみを一覧表示するために呼び出すまったく新しいスクリプトを作成する必要はありません。上記のコマンドを追加して、変更されたシェルスクリプトを提供できます。

#!/bin/bash
action_limit=75;
top_count=10;
df -F %z %m \
    | grep -e '^/dev/[sh]d' \
    | sed 's/%//g' \
    | awk '{print $3" "$1" "$4}' \
    | sort -r -n \
    | while read -r pct dsk mnt; do
        if test $action_limit -le $pct; then
            echo "$mnt for $dsk is using $pct%";
            du -s -x -m "$mnt"/* | sort -rn | head -$top_count| awk '{SZ=$1;$1="";print "\t"SZ"\t"$0}';
        fi;
    done

出力は、設定された制限を満たすか超過するファイルシステムに基づいて降順にソートされ、action_limitその後、そのファイルシステムで最も多くのスペースを使用するファイルまたはディレクトリがソートされます。リストされているファイルまたはディレクトリの数は新しい変数によって設定されますtop_count。きれいで読みやすくするために、マウントポイントの下にインデントされており、各ファイルまたはディレクトリの合計サイズ(MB)が含まれています。 (制御してキロバイトまたはギガバイトに-m変更できます。メガバイトは良いトレードオフのようです。)-k-g

最後にタグを使用しているため、/bashすべてのテストが内部で完了し、bashbash固有のテストまたは構文が使用されている場合は、それをキャッチできませんでした。したがって、他のシェルがある場合は、信頼する前に慎重にテストしてください。

おすすめ記事