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

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

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

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

Штеффен

1 ответ1

0

Краткий обзор принтера использования физического диска 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 . Меня интересует только последнее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .