sistema de arquivos Linux; diferença no cálculo do tamanho usando df & du

8

Quando eu executo df , ele mostra que o dispositivo raiz está cheio.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

Eu olhei para o inode usage e há muito espaço disponível para o dispositivo root

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

Mas, quando executo o comando du , ele mostra que usei apenas 2G de 9.9G .

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

Isso só me deixa louca e interessante também. Este é um grande problema para nós já que o disco raiz / está cheio e algumas das funções do nosso site estão falhando.

Por favor, ajude-me a resolver (também compreenda) este problema.

Obrigado.

    
por Rakesh Sankar 30.06.2011 / 08:58

4 respostas

4

Quando os arquivos são excluídos no * nix, eles continuam a viver no disco (e ocupam espaço em disco) enquanto o processo os abrir. É bastante comum aproveitar isso para "proteger" arquivos temporários, criando-os com um tamanho pequeno, excluindo-os e, em seguida, usando o arquivo excluído para armazenar dados sem ter que se preocupar com outros processos (facilmente) obtendo acesso a ele. a quantidade de espaço nos arquivos excluídos pode aumentar consideravelmente se, digamos, um banco de dados temporário ou uma sessão de edição de multimídia estiver sendo manipulada dessa maneira. Outra possibilidade de como você poderia ter tanto espaço "perdido" seria se o sistema tivesse sido atualizado (várias vezes) sem reinicializar ou reiniciar os programas, resultando na abertura de todas as bibliotecas antigas do .so por programas que foram iniciados antes do atualizar e ainda estão em execução.

df vê o espaço usado por esses arquivos porque ele apenas analisa a quantidade de espaço alocada no dispositivo, mas du não os vê porque não há entradas de diretório correspondentes.

O espaço usado "Oculto" como esse só pode ser liberado quando os processos que tiverem arquivos excluídos abertos os fecharem. Você pode encontrar estes processos com o comando fuser e finalizá-los (ou, para muitos daemons, enviar um sinal dizendo-lhes para fechar e reabrir qualquer arquivo aberto).

    
por 30.06.2011 / 11:26
1

Houve ocasiões em que, se o disco ficar cheio, pode ser confundido até reinicializar / remontar que o disco ainda está cheio, mesmo quando você excluiu uma carga de arquivos.

    
por 30.06.2011 / 09:06
1

Do meu lado, eu simplesmente reiniciei o syslogd para recuperar o espaço em disco. Eu tinha 3GB faltando! Meu servidor estava funcionando há 250 dias.

    
por 06.12.2012 / 16:55
0

Existe uma maneira de limpar o espaço sem reiniciar o aplicativo. Aqui estão os detalhes:

  1. Digamos que você tenha o processo foo em execução e crie um arquivo de 2 GB chamado abc.log. Agora diga que esse abc.log foi excluído por outra pessoa.

  2. Pega foo (digamos 123). Portanto, /proc/123/fd mostrará a lista de descritores de arquivos abertos por foo . Um com abc.log será exibido como excluído. Digamos que fd de abs.log seja 111. Se você executar less /proc/123/fd/111 , ele ainda mostrará todos esses 2 GB de dados.

  3. Execute echo " " > /proc/123/fd/111 . Isso sobrescreverá o conteúdo com uma string vazia. Depois desse comando, se você tentar df , ele mostrará mais 2 GB recuperados limpando o abc.log.

É isso. Eu tentei isso no CentOS e funciona.

    
por 03.12.2012 / 22:31