du não representando o espaço mostrado por df [duplicado]

3
    

Esta pergunta já tem uma resposta aqui:

    

Eu tenho uma VM CentOS 7.2 (mínima) em execução em um cluster do vSphere, que tem uma unidade de 16G formatada como XFS no esquema de particionamento de uso de disco completo padrão do instalador do CentOS. O sistema está executando um serviço httpd de teste (todo o software dos repositórios centos padrão), mas seu uso de espaço no disco está crescendo. Isso se deve em parte a logs problemáticos de erros / acessos do apache (2 GB de tamanho) e a remoção desses longos libera algum espaço. O que está comendo o espaço da unidade não é tanto uma preocupação para mim (eu só vou armar e pavimentar isso eventualmente). No entanto, quando eu corro df du du para verificar o tamanho dos arquivos, fico com uma discrepância e isso é o que é confuso.

Primeiro eu corro df -h para ver o uso do sistema de arquivos:

[root@svrhttp03 httpd]# df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/centos_svrhttp03-root   14G  4.8G  9.1G  35% /
devtmpfs                           902M     0  902M   0% /dev
tmpfs                              912M     0  912M   0% /dev/shm
tmpfs                              912M   97M  816M  11% /run
tmpfs                              912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                          497M  169M  329M  34% /boot
tmpfs                              183M     0  183M   0% /run/user/0

Isso está mostrando 4.8G usado no FS raiz.

Eu então executo o seguinte para ver o tamanho de todos os itens na raiz do sistema de arquivos:

[root@svrhttp03 httpd]# du -a -h -t 10K / 2> /dev/null | grep -v -E "[A-Z,a-z,0-9]/." | sort -h
16K /home
7.4M    /root
31M /etc
97M /run
143M    /boot
324M    /var
1.3G    /usr
1.9G    /

Isso mostra apenas 1.9G em uso, e o tamanho relatado de todos os diretórios somam ~ 1.9G, como esperado.

Então, como posso encontrar essa discrepância ~ 2.9G entre o que df e du estão reivindicando para dados no disco?

    
por Topher 03.01.2018 / 04:30

2 respostas

3

Esta pode não ser uma resposta completa, mas eu sei de duas fontes para tais discrepâncias:

  • df mostrando mais espaço que du (ou seja, arquivos impossivelmente grandes)

Arquivos esparsos podem causar isso. Por exemplo: / var / log / lastlog é relatado como impossivelmente grande (como 1,2 TB) em muitas VMs devido a um bug no VMWare. Não é tão grande assim, é apenas um arquivo esparso. O manuseio é ignorá-los. df é sempre mais preciso que du para espaço livre em disco real.

  • df mostrando o disco completo que du indica (também arquivos invisíveis comendo espaço em disco)

A causa comum para isso são arquivos excluídos que ainda são mantidos abertos por processos. Esse é frequentemente o caso após uma atualização e antes de uma reinicialização - todos os arquivos de biblioteca antigos ainda são mantidos abertos pelos processos que possuem as alças de arquivo, mesmo que sejam "excluídos" e não sejam exibidos de du ou ls .

O manuseio fácil é reinicializar, mas você pode lidar com isso mais cirurgicamente. Por exemplo, comece com lsof | grep -c DEL e veja quantos arquivos excluídos ainda estão abertos. (Uma certa quantidade é relativamente normal, não necessariamente patológica, mas ainda é o lugar certo para entender a discrepância do espaço em disco.)

    
por 03.01.2018 / 05:02
2

Embora a resposta de Wildcard esteja absolutamente correta, talvez faça mais sentido dizer por quê.

du soma o tamanho do arquivo de todos os arquivos de forma recursiva através dos diretórios do caminho especificado no VFS que pode incluir vários sistemas de arquivos montados.

df informa a quantidade de espaço alocado e não alocado do sistema de arquivos.

O espaço alocado para um arquivo nem sempre é o mesmo que o tamanho dos arquivos. A maioria dos sistemas de arquivos alocados em blocos muito maiores que um byte para que um arquivo possa, em seu pior caso, alocar um bloco inteiro e, em seguida, usar apenas um byte dele. Muitos arquivos pequenos alocarão muito mais espaço do que a soma de seus tamanhos. Outros arquivos esparsos podem ter um tamanho de arquivo maior do que o espaço que aloca, porque aloca apenas partes do arquivo que são dados diferentes de zero.

    
por 03.01.2018 / 09:36