Espaço em disco no FreeBSD como um valor numérico

0

Gostaria de saber se existe uma maneira de obter a capacidade de um disco como um valor numérico no FreeBSD.

Eu não quero usar df porque ele não retorna um único valor numérico, du -sch / leva muito tempo para somar.

Talvez exista uma variável acessível via sysctl? Eu tentei sysctl -a -d | grep -e disk mas não encontrei algo.

Agradecemos antecipadamente

Steffen

    
por Steffen 14.03.2012 / 08:57

1 resposta

0

Um esboço rápido de uma impressora de uso de disco awk (nb: tentei apenas no 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

Salve o script acima como, por exemplo, dfsum e executá-lo como, por exemplo:

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

EDIT: Uma versão atualizada com cabeçalho e detecção automática de discos:

#!/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]}'

Observação: isso requer gawk .

EDITAR novamente:

#!/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
    }
'

Isso também dá uma soma total e corrige uma mudança no meu sistema que ocorreu após uma reinicialização, em que uma coluna com /dev/disk/by-uuid/ ... é mostrada para o sistema de arquivos raiz na saída df , mas também como uma partição separada. entrada como /dev/sda1 . Estou interessado apenas no último.

    
por 14.03.2012 / 11:36