Bashスクリプトからディスク統計を取得する最も簡単な方法は何ですか?
すでに使っています。
cat /sys/block/*/stat
全体の帯域幅はディスク/パーティションごとに計算されますが、ディスクの合計サイズと使用/使用可能なセクタも確認しようとしました。
この統計が利用可能であることを知っていますが、df
代替案を探しています(方法dfバックエンドは機能しますか? )、/sys/class/
またはを使用することをお勧めします/sys/block/
。
可能ですか?または、df | awk
私が探している統計を取得するにはtopを使用する必要がありますか?
編集する
例:
これは、システムからさまざまな情報を収集してグラフィックスシステムに報告するメトリックレポートスクリプトに使用されます。
つまり、セクタの読み取り/書き込み統計をキャプチャします。
for device in /sys/block/*
do
stats=$( cat $device/stat )
sectorsRead=$( echo $stats | awk '{print $3}' )
sectorsWrite=$( echo $stats | awk '{print $7}' )
doSomethingWith sectorsRead
doSomethingWith sectorsWrite
done
同様の作業をしたいのですが、セクターの総数と使用/無料のセクター数を求めたいです。
答え1
あなたが望む仕事のための最も移植性の高いツールですdf
。むやみに使用しないでください。/sys
Linux以外のシステムでは動作は保証されません。そして車輪を再発明しないでください。それがまさにその目的df
であり、その理由は指定済みPOSIX経由。
もちろん、状況はそれほど単純ではありません。いくつかのdf
実装があり、そのいくつかは異なる形式を使用します。しかし、無限の知恵でPOSIX仕様を書いた素晴らしい人々は、仕様に次のオプションを含めましたdf
。
-P
Produce output in the format described in the STDOUT section.
したがって、常に使用している場合は、df -P
できるだけ携帯性が良いはずです。このフラグを使用すると、すべてのPOSIX互換df
バージョン(すべてのバージョン、または可能な限り類似している必要があり、違いはありません)は、次の仕様に従って出力を生成します(から取得)。POSIXdf
ページ):
-kオプションと-Pオプションの両方を指定した場合は、次のヘッダー行を作成する必要があります(POSIXロケールで)。
「ファイルシステムブロック1024が利用可能な容量を使用してインストールされました\ n」
-kオプションなしで-Pオプションを指定した場合は、次のヘッダー行を作成する必要があります(POSIXロケール)。
"利用可能な容量を使用してファイルシステム512ブロックがインストールされました。\n"
実装では、情報がソートされた列に表示されるように、ヘッダー行と個々のデータ行の間の間隔を調整できます。
-Pの残りの出力には、指定された各ファイルシステムに関する1行の情報を含める必要があります。この行の形式は次のようになります。
"%s %d %d %d %d%% %s\n", , , , , ,
次のリストで、512バイト単位(-kが指定されている場合は1024バイト)で表されるすべての数量を、次に高い単位に丸める必要があります。これらのフィールドは次のとおりです。
実装定義形式のファイルシステム名。ファイルシステムの合計サイズ(512バイト)。この数値の正確な意味は、実装によって定義されますが、通常は使用できないシステムで予約されているスペース、、、およびすべてのスペースを含める必要があります。ファイルシステム内の既存のファイルに割り当てられた合計スペースサイズ(512バイト単位)。権限のないユーザーが新しいファイルを生成するために使用できるファイルシステムの合計スペースサイズ(512バイト単位)。この数が0以下の場合、プロセスに適切な権限がないと、最初に他のファイルを削除しないと、ファイルシステムに新しいファイルを作成できません。書かれた数字はゼロより小さいかもしれません。ファイルシステム内のすべてのファイルに現在割り当てられている一般的な空き容量の割合。これは分数を使用して計算する必要があります:/(+)
パーセントで表示されます。 0より小さい場合、パーセンテージは100より大きくなる可能性があります。パーセンテージ値は正の整数で表され、小数点の結果は次に最大の整数に丸められます。
ファイルシステム階層はその下にディレクトリを表示します。
-k
結果を常に512ではなく1024バイト単位で印刷するには、このフラグを使用する必要があります。またLC_ALL=POSIX
、ロケールが出力に影響を与えないように設定することもできます。これらすべてを総合すると、次のようになります。
優れた携帯性と組み合わせて、次のことがawk
できます。
totalSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $2}')
usedSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $3}')
availableSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $4}')