Linux

linux + 列印根文件系統大小

  • December 23, 2020

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

但我想改進我的語法變得更好

有什麼建議麼 ?

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'
)

要查找/文件系統的大小,您可以使用df(假設 GNU 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))

儘管上面的所有命令還允許指定不同的單位(但要注意 gigabyte 與 ggibyte,大多數會為您提供浮點數,並且可能會以不同的方式進行舍入,並根據語言環境對十進制基數使用不同的字元)。

引用自:https://unix.stackexchange.com/questions/624912