dfを使用して合計ディスク容量を計算する方法は?

dfを使用して合計ディスク容量を計算する方法は?

df -h次のコマンドの結果を追加する(つまり、すべて一緒に追加して結果を返すように)、コマンドを変更するにはどうすればよいですか?

$ df -h | awk '{print $2}'
Size
5.8G
64G
93M
3.9G
12G
108G
16G
134G
3.7T
3.7T
6.0T

答え1

GNU はdfそれ自体で合計を計算できます。最新バージョン(少なくとも8.21以降、以前のバージョンは不明)を使用すると、出力するフィールドを選択できます。

$ df -h --output=size --total
 Size
 971M
 200M
  18G
 997M
 5.0M
 997M
  82M
  84M
  84M
 200M
  22G
$ df -h --output=size --total | awk 'END {print $1}'
22G

~からman df:

--output[=FIELD_LIST]
      use the output format defined by FIELD_LIST, or print all fields
      if FIELD_LIST is omitted.
--total
      elide  all entries insignificant to available space, and produce
      a grand total

答え2

人間が読める数値形式が邪魔になるため、まず一貫した出力が必要です。移植可能な-Pオプションを使用すると、1024個のチャンクで出力できます。

df -P | awk 'NR>2{sum+=$2}END{print sum}'

GNUを使用している場合は、オプションをdf指定できます--blocksize

df --block-size=1  | awk 'NR>2{sum+=$2}END{print sum}'

NR>2Size部分的にはヘッダー行を処理する必要がないようにするためです。データを人間が読める形式に再フォーマットするには、Linuxを使用している場合はnumfmtツールを使用できます。そうでない場合はawkinを参照してください。関連回答

また、dfなどの仮想ファイルシステムを含むすべてのファイルシステムのサイズが出力されます。物理物理ディスクのみが必要な場合は、フィルタリングを検討してください。したがって、ファイルシステムに表示されているデバイスファイルがあるファイルシステムのみを考慮している場合は、おそらく次のようなものを使用できます。udevtmpfs/dev/

df -P | awk 'NR>2 && /^\/dev\//{sum+=$2}END{print sum}'

GNUの場合は、ファイルシステムの削除を無視するフラグのdf使用を検討することもできます。--local

答え3

場合によっては(btrfsなど)、ファイルシステムはdfに複数回表示されます。したがって、より良い解決策は

 df | awk '/dev\/sd/ {sums[$1]=$3} END {for (i in sums) tot += sums[i]; print tot}' | numfmt --to=iec

関連情報