FreeBSD 上的磁盘空间以数值表示

FreeBSD 上的磁盘空间以数值表示

我想知道在 FreeBSD 中是否有办法将磁盘容量作为数值获取。

我不想使用,df因为它不返回单个数值,du -sch /需要花费太多时间进行总结。

也许有一个可通过 sysctl 访问的变量?我试过了,sysctl -a -d | grep -e disk但没有找到任何东西。

提前致谢,

斯特芬

答案1

物理磁盘使用情况打印机的快速草图awk(注:仅在 Linux 上尝试过):

#!/bin/sh
while ! [ $# -eq 0 ]; do
    df --block-size=1G | awk '$1 ~ /\/dev\/'"${1}"'/ {free+=$4; total+=$2} END {printf "%4s: %4sG / %4sG\n", "'"${1}"'", free, total}'
    shift
done

将上述脚本保存为 egdfsum并以以下形式运行:

$ dfsum sda sdb
sda:   19G /  916G
sdb:   59G / 1834G

编辑:带有标题和磁盘自动检测的更新版本:

#!/bin/sh
df --block-size=1G | awk '
    BEGIN {printf "%-5s%5s   %5s\n", "disk", "free", "total"}
    !match($1, "^/dev/([[:alpha:]]+)", disk) {next} \
    {free[disk[1]]+=$4; total[disk[1]]+=$2} \
    END {for (var in free) printf "%3s: %4sG / %4sG\n", var, free[var], total[var]}'

注意:这需要gawk


再次编辑:

#!/bin/sh
df --block-size=1G |\
awk '
    BEGIN {
        printf "%-5s%5s   %5s\n", "disk", "free", "total"
    }

    !match($1, "^/dev/([[:alpha:]]+)[[:digit:]]", disk) {next} 

    {
        free[disk[1]]+=$4
        total[disk[1]]+=$2
    }

    END {
        for (var in free) {
            printf "%3s: %4sG / %4sG\n", var, free[var], total[var]
            totalfree+=free[var]
            totalsize+=total[var]
        } 
        printf "     -------------\n     %4sG / %4sG\n", totalfree, totalsize
    }
'

这也给出了总和,并修复了系统重启后发生的变化,其中输出/dev/disk/by-uuid/中显示带有 ... 的列表示根文件系统df,但也作为单独的条目显示/dev/sda1。我只对后者感兴趣。

相关内容