df comando não mostrando valores corretos

6

Este é um servidor RHEL, estou executando um servidor MySQL nele, o banco de dados e arquivos de log (no entanto, o log está desabilitado) estão localizados no diretório /srv onde há muito espaço disponível.

Recentemente eu tive uma tabela com problemas, então tentei consertá-la, mas no dia seguinte descobri que o MySQL não pode responder a muitas consultas com um erro indicando que não há espaço em disco:

ERROR 1030 (HY000): Got error 28 from storage engine

Então eu corri o seguinte comando para ver o que está tomando espaço

[root@tms /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server-slash
                      9.9G  9.5G     0 100% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             485M   58M  402M  13% /boot
/dev/mapper/server-var
                      739G  252G  450G  36% /srv

Surpreendentemente, é o diretório / . Mas o mais surpreendente é que os diretórios em / não indicam espaço usado maior que 2 GB , enquanto df mostra espaço total 9.9 GB para / .

[root@tms /]# du -sh /*
7.5M    /bin
48M     /boot
200K    /dev
24M     /etc
4.0K    /home
223M    /lib
21M     /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
183M    /opt
...deleted some file-not-found errors for files under /proc
0       /proc
144K    /root
14M     /sbin
4.0K    /selinux
252G    /srv
0       /sys
44K     /tmp
917M    /usr
259M    /var

Então, por que df mostra valores errados? E como posso descobrir o que está realmente ocupando espaço?

    
por Muhammad Gelbana 11.07.2013 / 12:46

2 respostas

11

Uma técnica de programação comum é criar um arquivo temporário e imediatamente desvinculá-lo (). Isso deixa o arquivo (e seu espaço) disponível para a duração do programa, mas automaticamente faz com que ele seja removido quando o programa que o utiliza termina. Uma vantagem é que nenhum código de epilog (limpeza) é necessário para escrever.

Para determinar se você tem um processo que mantém um arquivo desvinculado aberto, faça:

lsof -a +L1 /dev/server_slash

(ou)

lsof +D /dev/server_slash +L1

Procure por arquivos com um valor NLINK de zero (0). Estes seriam arquivos com uma contagem de links zero que desaparecerão quando o último processo terminar. A coluna SIZE / OFFSET oferecerá o tamanho dos caracteres do arquivo em questão.

    
por 11.07.2013 / 14:14
6

1) df não reporta o espaço reservado para root (5% por padrão) em sistemas de arquivos no estilo unix. Então, df sempre reportará menos do que deveria.

2) Aqui, eu vou supor que você executou seu banco de dados sem sua partição srv montada. Sem a partição srv montada, as coisas terão sido escritas no ponto de montagem, isto é. sob o diretório srv na partição /. (partição-raiz), usando muito espaço na partição /.

No entanto, quando você faz montar a partição srv no diretório srv, todos os arquivos sob o diretório srv da partição / se tornam "ocultos" pela partição que você " montado sobre "ele - mas o espaço ainda está esgotado, embora você não possa vê-lo ou acessá-lo para excluí-lo.

Tente desmontar a partição srv (vá para singleuser-moder / runlevel 1 / modo de manutenção para que tudo esteja parado), verifique se ela realmente está desmontada (com mount ) e veja se há arquivos escondidos sob os diretórios você costuma usar como pontos de montagem (usr, srv, home, var, tmp, ...) na partição /. Aposto que você encontrará algo grande em alguns deles. Quando você tiver feito e reinicializar, certifique-se de que a partição srv seja montada como deveria.

Isso - que você pode ter coisas em diretórios que normalmente estão escondidos por partições montadas - pode às vezes ser útil.

    
por 11.07.2013 / 13:54