linux + ルートファイルシステムサイズの印刷

linux + ルートファイルシステムサイズの印刷

lvsはファイルシステムのサイズを表示するのに最適なコマンドです。

lvs
  LV      VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root vgW -wi-ao---- 100.00g
  lv_swap vgW -wi-ao----   7.72g
  lv_var  vgW -wi-ao---- 100.87g

ルートファイルシステムのサイズをキャプチャしようとしています。

これまで、次の構文を作成しました。

lvs | awk  '$1 ~ /root/' | awk '{print $NF}' | sed s'/\./ /g' | awk '{print $1}'

そしてその印刷(予想出力は100)

100

しかし、構文をより良く改善したいと思います。

どんな提案がありますか?

答え1

lvsLVM ボリュームに関する情報を表示します。そのファイルシステムがLVMボリュームにあり、どのボリューム(いいえ、論理ボリュームの名前)でないかを知っている場合は、ルートファイルシステムを含むブロックデバイスのサイズ(そのファイルシステムのサイズではありません)を指定します。持つ「ルート」があります)。

size=$(
  lvs --unit b --nosuffix --no-headings --config 'log{prefix=""}' -o size vgW/lv_root
)

LVMボリューム、ディスクパーティション、NBD / loop / md ...デバイスなどのルートファイルシステムを含むブロックデバイスのサイズを確認する(ただし、ルートファイルシステムはブロックバックアップする必要はありません)、デバイス(ネットワークファイルシステムなど) 、zfs、btrfs...)、Linuxでは以下を使用しますlsblk

size=$(
  lsblk -Jbo size,mountpoint | jq '.blockdevices[]|select(.mountpoint=="/").size'
)

ファイルシステムのサイズを見つけるには(GNUを仮定)または次のいずれかを/使用できます。dfdffindmnt

size=$(findmnt -bno size /)
size=$(df -B1 --output=size / | awk 'NR==2{print $1}')

これは、最も正確なサイズであるバイト単位のサイズを提供します。サイズを整数GBに下げるには、1000000000で割ります。

gigabytes=$((size / 1000000000))

またはギガバイト単位で測定するには、ギガバイトではなくギガバイトを意味するlvs1024ベースのサフィックスを使用します。g

gibibytes=$((size / 1024 / 1024 / 1024))

上記のすべてのコマンドは異なる単位を指定することができますが、ギガバイトとギガバイトに注意する必要があります。

答え2

これらすべてを単一のawk呼び出しに簡単に統合できます。

lvs | awk '$1=="lv_root" {split($4,a,"."); print a[1]}'

行のような最初のフィールドのみをチェックしてプロセスを終了しますlv_root。次に、4番目のフィールドを配列.に分割しa、前のセクションに対応する最初の項目を印刷します.

印刷サイズを整数として使用すると、同じ効果が得られ、printf浮動小数点数を最も近い数字に切り捨てます。小さい整数(興味深いことに、数値部分の後の「テキスト部分」を無視します。この場合g):

lvs | awk '$1=="lv_root" {printf "%d\n",$4}'

ノートこれは、サイズを最も近い整数に丸めるのと同じではありません。これを達成するには、次のものを使用できます。

lvs | awk '$1=="lv_root" {printf "%.0f\n",$4}'

答え3

awk '$1 ~/root$/{gsub(/\..*/,"",$NF);print $NF}' filename

出力

praveen:/tmp$ awk '$1 ~/root$/{gsub(/\..*/,"",$NF);print $NF}' filename
100
praveen@praveen:/tmp$ 

関連情報