Exibir o espaço livre do sistema de arquivos disponível para o usuário root

12

Por padrão, o Linux reserva uma fração de um sistema de arquivos para o usuário root, pelo menos no ext4 (para impedir que usuários comuns encham a unidade completamente e travem o sistema e reduzam a fragmentação). No entanto, dfapenas exibe o espaço livre aparente para usuários regulares (mesmo quando executado como root). Como você exibe o espaço livre "real", que seria acessível para fazer root?

Caracol mecânico
fonte

Respostas:

6

Não tenho certeza se existe uma ferramenta incorporada, mas supondo que você tenha deixado o reservado com os 5% padrão, isso informará:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfa raiz, greppara a linha com dev (para remover o cabeçalho), cuto tamanho e os campos disponíveis, use um awkscript para calcular 5% do tamanho do disco adicionado aos disponíveis.

Você pode retirar a reserva real tune2fs -l <device>e combiná-la com a acima em um script.

Paulo
fonte
2
Certo, então o seguinte comando vai nos dizer quanto do espaço de partição está reservado para usuários privilegied: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Por exemplo, para minha partição "buffer multimídia": Block count: 2621440e Reserved block count: 128449: 4,9% dos blocos disponíveis (configuração conservadora para ajudar a evitar a fragmentação).
tuk0z
Não há necessidade de usar o cutcomando: você pode escolher os campos awkdiretamente. De fato, o cutcomando não funcionou para mim como esperado. De qualquer forma, dei outra resposta que deveria dar uma resposta mais precisa.
Jarno
11
Execute tune2fs -m <percentage> <device-name>para alterar o espaço em disco reservado apenas para uso raiz.
Luka5z # 8/17
11
Inspirado no exposto acima, eu vim com isso para calcular o espaço reservado no volume raiz em MB:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley
Esta não é uma resposta portátil. Confira abaixo a resposta que você precisa (spoiler: tune2fs /dev/sda1ou melhor aindastat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs
17

Usando o comando tune2fs (encontrado em / sbin / tune2fs ), você pode determinar facilmente o espaço reservado : (e mais!)

tune2fs -l /dev/sda1

Fornecerei as informações do meu sistema para referência. Vou remover linhas estranhas que não são importantes para esta pergunta:

O cabeçalho ... e o nome do volume, rotulo todas as minhas unidades, facilitam a identificação, se necessário.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

REALMENTE deseja que isso seja "limpo" enquanto o sistema estiver em execução. Honesto!

Filesystem state:         clean

É aqui que as informações da capacidade de armazenamento de dados começam:

Aqui você pode ver que tenho 121.179.648 blocos no total ... com um tamanho de bloco de 4K (4096), que se multiplica para um número grande (462-ish GB). (O tamanho do bloco é indicado abaixo)

Block count:              121179648

E os blocos reservados ... olhando para o número acima e o número abaixo ... você deve ser capaz de descobrir relativamente rápido que tenho 1% reservado. Nesse caso (4,62-ish GB)

Reserved block count:     1211796

Quanto espaço livre está disponível atualmente? Bem aqui!

Free blocks:              104090586
...

E o tamanho do bloco, o mais importante. Útil para multiplicar.

Block size:               4096
...

Essas linhas dizem QUEM os blocos são reservados para ... usuário 0, raiz, neste caso

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Há muito mais informações disponíveis aqui, mas isso deve permitir que você verifique rapidamente quanto está disponível e quanto mais está reservado para a raiz. Matemática simples.

Espero que isto ajude. Lembre-se ... as páginas de manual são seus amigos.

lornix
fonte
2

Isso exibe espaço livre em bytes na partição relacionada a "/ path"

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Você não precisa ser superusuário para executá-lo.

BTW eu não entendo bem qual é a diferença entre

% s tamanho do bloco (para transferências mais rápidas)

% S tamanho do bloco fundamental (para contagem de blocos)

em uso de stat.

jarno
fonte
Legal - isso explica o espaço reservado para a raiz?
Paul
@Paul sim, ele está incluído
jarno 25/04
Sua saída é efetivamente uma soma - então você pode canalizar a saída bcpara obter a contagem de bytes ou até mesmo --format='%f*%S/1024/1024/1024' | bcobter kilobytes / megabytes / gigabytes, dependendo de quantas divisões você escolher.
Paul
@ Paul Bem, eu diria que é um produto. Os prefixos binários são chamados kibibytes, mebibytes e gibibytes, respectivamente. A expansão aritmética circundante $(( ... ))faz o cálculo, mas resulta apenas na parte inteira do quociente (se você adicionar divisão). Ou você quer dizer que seu shell não suporta expansão aritmética?
Jarno
@ Paul Mas, se você usar bc, poderá obter o quociente com precisão arbitrária, se precisar.
Jarno