Encontre espaço em disco disponível no unix sem analisar a saída 'df'

1

Quando digito df -k . , recebo a seguinte saída

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       16512936 8650196   7023932  56% /

O que eu faço é seguir a última linha e extrair o quarto campo para obtê-lo corretamente.

Mas se o nome do sistema de arquivos for longo, diga por exemplo /dev/niraj-asdsdsd-dsdsdsa , então df imprime mais detalhes em uma nova linha e usando minha lógica obtém 56% em vez de 7023932 .

Então, minha pergunta é: como determinar o espaço livre exato em qualquer situação?

    
por Niraj 05.01.2015 / 10:34

2 respostas

3

O utilitário stat , que é útil para obter estatísticas de arquivos, também pode fornecer informações sobre sistemas de arquivos, basta fornecer a opção -f .

Mas certifique-se de fornecer o ponto de montagem (por exemplo, /boot ) e não o arquivo de dispositivo ( /dev/sda1 )! Porque no último caso stat reportará estatísticas do sistema de arquivos /dev , que é (no debian) um sistema de arquivos virtual e não tem nada a ver com o disco físico:

$ mount | grep sda1
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue,user_xattr,acl)
$ env stat -f /dev/sda2
 File: "/dev/sda1"
    ID: 0        Namelen: 255     Type: tmpfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 2560       Free: 2560       Available: 2560
Inodes: Total: 497355     Free: 496852
$ env stat -f /boot
  File: "/boot"
    ID: fe082d7c0c42ea6f Namelen: 255     Type: ext2/ext3
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 99150      Free: 52490      Available: 47370
Inodes: Total: 25688      Free: 25355
  • A diferença entre a contagem Livre e Disponível resulta dos blocos reservados para raiz .
  • Eu usei env para garantir que não seja usado o comando stat incorporado em seu shell (que pode ou não fornecer todas as opções usadas).

Portanto, para responder à sua pergunta, você pode usar um formato de saída de estatísticas personalizado ( -c ) para obter o espaço disponível ( %a ) em / :

$ env stat -f -c %a /
1711744

Isto está em blocos, portanto, seja inteligente e deixe o sistema fazer uma multiplicação com o tamanho do bloco em unidades KB ( %S/1024 ), canalizando a saída na calculadora bc :

$ env stat -f -c '%a*%S/1024' / | bc
6846976

Vamos verificar com df :

$ df /
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2       25066604 16939628   6846976  72% /

Ótimo, mesmo número informado!

    
por 05.01.2015 / 12:57
0

Niraj - Você já olhou para o utilitário di? Isso pode oferecer pelo menos uma maneira mais fácil de extrair os dados de que você precisa, oferecendo uma saída em formato CSV do espaço da unidade.

di -c
    
por 05.01.2015 / 12:30

Tags