Дисковое пространство во FreeBSD как числовое значение

Интересно, есть ли способ получить емкость диска в виде числового значения во FreeBSD?

Я не хочу использовать df потому что он не возвращает ни одного числового значения, du -sch / занимает слишком много времени, подводя итоги.

Может быть, есть переменная, доступная через sysctl? Я старался sysctl -a -d | grep -e disk но ничего не нашел.

Заранее спасибо,

Штеффен

1 ответ

Решение

Быстрый набросок awk принтер использования физического диска (nb: пробовал только в 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

Сохраните приведенный выше скрипт как dfsum и запустите его как, например:

$ 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, Меня интересует только последнее.

Другие вопросы по тегам