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