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
lvs
LVM ボリュームに関する情報を表示します。そのファイルシステムが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を仮定)または次のいずれかを/
使用できます。df
df
findmnt
size=$(findmnt -bno size /)
size=$(df -B1 --output=size / | awk 'NR==2{print $1}')
これは、最も正確なサイズであるバイト単位のサイズを提供します。サイズを整数GBに下げるには、1000000000で割ります。
gigabytes=$((size / 1000000000))
またはギガバイト単位で測定するには、ギガバイトではなくギガバイトを意味するlvs
1024ベースのサフィックスを使用します。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$