Como vejo quantos blocos tenho livre no meu sistema de arquivos?

1

Eu sei que o df deve fornecer essa informação, mas quando executo o df ele mostra o número de blocos de 1k livres, mas meu sistema de arquivos está usando blocos de 4k.

Eu poderia simplesmente dividir por quatro, claro, mas isso não seria necessariamente correto, devido à diferença de granularidade. Por exemplo, quatro arquivos 1k usariam quatro blocos de 1k em um sistema de arquivos usando blocos de 1k, mas quatro arquivos de 1k usariam quatro blocos de 4k em um sistema de arquivos usando blocos de 4k. (Então dividir por quatro produziria a resposta errada.)

    
por cat pants 15.05.2014 / 01:25

3 respostas

3

Se você tiver um arquivo 1K ocupando um bloco de sistema de arquivos 4K, ele contribuirá com 4K para a saída df .

df calcula o número pedindo ao kernel a contagem de blocos livre (com statfs / statvfs ) e multiplicando por tamanho de bloco / 1024.

Basta dividir por 4. Às vezes, as coisas são mais simples do que você espera.

Por outro lado, você não deve presumir que todas as versões de df usam blocos de 1024 bytes como sua unidade de relatório. Às vezes é 512.

    
por 15.05.2014 / 01:48
0

Os conjuntos de opções para diferentes versões de df são interessantes de diversas formas.

Se você está usando o df do GNU (por exemplo, com o Linux ), você pode dizer que df -B4K
(ou df -B4k ) para compensar tamanhos de bloco de 4KB.

Para df do OpenBSD e OSX df , defina a variável de ambiente BLOCKSIZE para 4096 para informar df para usar tamanhos de bloco de 4KB.

Para o % de /usr/bin/df do Solaris use a opção -v para descobrir “o número total de blocos alocados para o sistema de arquivos, o número de blocos alocados para arquivos existentes, [e] o número de blocos disponíveis para a criação de novos arquivos por usuários sem privilégios”, entre outras informações. Para -v , “os tamanhos são exibidos em múltiplos do menor tamanho de bloco suportado por cada sistema de arquivos especificado”.

Para O df do AIX usa a opção -I para descobrir “o número total de blocos, o espaço usado, o espaço livre, a porcentagem de espaço usado e o ponto de montagem do sistema de arquivos”. (Não está claro para mim quais unidades o espaço usado e livre são fornecidos quando -I está em vigor e não vejo nenhuma opção mais relevante, exceto que -i mostrará o número de inodes usados e a porcentagem de inodes em uso.) Nota, /usr/sysv/bin/df -v no AIX “Relata o percentual de blocos usados, bem como o número de blocos usados e gratuitos”, que é semelhante ao comportamento /usr/bin/df -v do Solaris.

A Especificação Única do UNIX para df conforme descrito na wikipedia parece não ter opções relevantes para mostrar df resultados em termos de blocos ou inodes.

    
por 15.05.2014 / 09:05
0

O POSIX df oferece apenas unidades de 1024 ou 512 bytes, então a resposta é específico do sistema, e muito provavelmente específico do sistema de arquivos (e eu vou ignorar complicações como subalocação de blocos e inline data .)

A primeira consideração é o conceito de blocos reservados , por especificação a saída de contagem de blocos livres por df não incluirá os blocos reservados (normalmente reservados para root, mas nem sempre).

Uma maneira (principalmente) portátil de descobrir sem usar df é usar o Gnu stat , usando um formato de saída de sua escolha:

$ stat -fc "%n type=%T freeblk=%f totalblk=%b blksz=%S" /tmp
/tmp type=ext2/ext3 freeblk=99136 totalblk=494123 blksz=4096

Você pode usar %a (em vez de %f ) para gerar a contagem efetiva de blocos livres (ou seja, excluir blocos reservados), como df usa em seus cálculos.

Outros sistemas (* BSD) possuem diferenças em seus sinalizadores e recursos de formatação stat e podem funcionar apenas em arquivos, não em sistemas de arquivos. stat não é POSIX (é um wrapper em torno das funções POSIX stat() e statvfs() ), a versão GNU (no pacote coreutils ) é bastante portátil.

Com sistemas de arquivos baseados em ext2 / 3/4 você pode, como root (ou mais corretamente: com acesso de leitura ao nó de dispositivo de bloco) descarregar esta informação com tune2fs :

# tune2fs -l /dev/sda3                              
tune2fs 1.42.8 (20-Jun-2013)                                                    
Filesystem volume name:   <none>                                                
Last mounted on:          /var/spool                                     
Filesystem UUID:          7b9d93dd-1322-4f54-a302-a0799f4518fb
Filesystem magic number:  0xEF53                                                
[...]
Filesystem state:         clean                                                 
Errors behavior:          Continue                                              
Filesystem OS type:       Linux                                                 
Inode count:              7651328                                               
Block count:              30588854                                              
Reserved block count:     305888                                                
Free blocks:              30060629                                              
Free inodes:              7651317                                               
First block:              0                                                     
Block size:               4096                         
Fragment size:            4096                  
[...]

Esse método funciona independentemente de o sistema de arquivos estar montado ou não.

    
por 15.05.2014 / 12:25

Tags