Quem está enchendo meu disco?

9

Eu tenho meu disco principal completamente preenchido:

root@kodi:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M   12M  374M   3% /run
/dev/sda1        88G   84G     0 100% /
tmpfs           1.9G  4.0K  1.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdb1       917G  429G  442G  50% /media/Cloud
/dev/sdd1       917G  813G   58G  94% /media/Tera
cgmfs           100K     0  100K   0% /run/cgmanager/fs
tmpfs           385M     0  385M   0% /run/user/1000
root@kodi:/#

/ dev / sda1 é o meu disco principal em que o ubuntu está instalado:

root@kodi:/home/fmf# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=9fab4895-7ccb-4415-b26d-311a17036cda       /               ext4    errors=remount-ro 0       1

# swap was on /dev/sda5 during installation
UUID=7b158f58-e4c1-4717-aa5f-dbeaa79ab93c       none            swap    sw              0       0

UUID=f9079f52-7661-48ad-9bc4-0d2452be66af       /media/Tera     ext2    defaults,nofail 0       0
UUID=fb1f92ee-54f5-44f8-ba92-544e90e6dfeb       /media/Cloud    ext2    defaults,nofail 0       0

root@kodi:/home/fmf#

Fiz alguma pesquisa no google e encontrei alguns comandos para testar quem é o responsável, mas não consigo descobrir quem o está preenchendo:

root@kodi:/# du --exclude=/media -cksh * | sort -hr | head -n 15
du: cannot access 'proc/16360/task/16360/fd/3': No such file or directory
du: cannot access 'proc/16360/task/16360/fdinfo/3': No such file or directory
du: cannot access 'proc/16360/fd/3': No such file or directory
du: cannot access 'proc/16360/fdinfo/3': No such file or directory
1.3T    total
1.3T    media
3.5G    home
3.0G    usr
1010M   var
645M    root
630M    lib
99M     boot
17M     bin
15M     sbin
13M     etc
12M     run
196K    tmp
16K     lost+found
12K     srv
root@kodi:/#

Aparentemente, não há nenhum arquivo ou diretório tão grande para preencher os 84G do meu disco.

Alguns dias atrás, descobri que o disco estava cheio devido a erros .xsession que enlouqueceram. Descobri que este é um bug conhecido no ubuntu e resolvi criar uma linha de crontab que, a cada dez minutos, exclui os erros .xsession. De fato, no momento, não o tenho mais no meu diretório pessoal.

Alguma ajuda, por favor?

effemmeffe
fonte
Eu não tenho erros .xsession, o cronjob o excluiu. Não entendi o que você quer dizer com releses oficiais do Ubuntu: Eu tenho o Ubuntu 16.04.1 LTS.
Efemmeffe
2
Para verificar se existem arquivos excluídos ainda acessados ​​por qualquer processo, sudo lsof | grep deletedele fornecerá dicas.
ridgy
O comentário de @ ridgy está no local. Se o seu .xsession-errorsproblema estiver errado, isso será destacado; caso contrário, ainda é muito provável que você aponte na direção certa.
um CVn 30/01
4
@effemmeffe No UNIX, a exclusão de um arquivo não o exclui até que o último identificador seja fechado (é por isso que você sempre pode excluir um arquivo no UNIX, onde no Windows você recebe erros de "acesso negado" etc.). Portanto, o arquivo .xsession-errors ainda está , preenchendo seu espaço em disco, porque o que estiver registrando os erros mantém o arquivo aberto. A melhor maneira de corrigir isso corretamente é descobrir o que causa os erros e corrigi-lo.
Muzer
11
Se o problema for com identificadores de arquivos abertos em arquivos excluídos, a reinicialização do sistema "devolverá magicamente" todo o espaço ausente. Pode ser uma etapa útil para solução de problemas.
Floris 30/01

Respostas:

19

O problema com o cronjob é que .xsession_errorsprovavelmente ainda é aberto por alguns aplicativos ou serviços do sistema, e é por isso que ele será oculto da tabela do sistema de arquivos quando excluído, mas ainda está no disco e ainda serão gravados erros nela.
Portanto, ele irá preencher o disco, mas agora você não pode mais vê-lo.

@rinzwind visa exatamente esse comportamento quando ele (corretamente) sugere remover o cronjob e procurar os erros. Essa é a única maneira de corrigir esse problema corretamente.

Como solução alternativa, você pode truncar o .xsession_errorsarquivo com um cronjob como este:

17 */2 * * *  truncate -cs 0 path/to/.xsession_errors

Mas antes de fazer isso, você REALMENTE deve tentar corrigir os problemas subjacentes que criam essas mensagens de erro no .xsession_errors

Phillip -Zyan K Lee- Stockmann
fonte
@terdon Gosto de / etc / crontab mais eu mesmo: = D
Rinzwind
11
@Rinzwind não para modificar arquivos no diretório inicial de um usuário. Pelo menos execute-o como usuário e não como root!
terdon
@terdon, @rinzwind, vocês dois estão certos: eu deveria ter prestado atenção. a execução desse script como usuário rootseria descuidado e poderia criar outros problemas.
precisa saber é o seguinte
2
a rotação tem o mesmo problema que com a exclusão: o kodi não reconhece que o arquivo foi girado e continuará gravando nele, até que você o notifique para reabrir esse arquivo. (provavelmente não existe tal coisa e você tem que reiniciar kodi)
Phillip -Zyan K Lee Stockmann
11
O @terdon truncate -cnão cria um arquivo e não altera a propriedade do arquivo existente. É bom não executá-lo como root, mas a propriedade do arquivo não é o motivo.
Hbbs
10

Quem está enchendo meu disco?

desde que você faz isso ...

Descobri que este é um bug conhecido no ubuntu e resolvi criar uma linha de crontab que a cada dez minutos exclui .xsession-errors

é impossível responder a essa pergunta.

Siga o seguinte para obter os erros que precisamos ver:

  • Remova a linha crontab que você adicionou que remove .xsessions_errors.
  • Reinicie o computador e, em seguida, verificar a partir da linha de comando que está enchendo .xsessions_errorsusando tail -f 100 ~/.xsessions_errors.
  • Quando você encontrar muitos problemas repetidos, copie alguns deles para a sua pergunta.
  • Adicione a linha crontab de volta para poder usar seu sistema.
  • Aguarde uma correção para o problema e aplique-o. Em seguida, remova a linha crontab novamente (excluir o .xsessions_errorsarquivo sempre deve ser evitado).
Rinzwind
fonte
7
"Quando você encontrar problemas repetidos, copie alguns deles para a sua pergunta." Não, isso seria uma pergunta nova e diferente.
Lightness Races in Orbit
Acompanhamento: removi o crontab e agora o arquivo .xsession-errors está livre para crescer. Mas isso não. E meu espaço em disco ainda está caindo. Então o problema não estava lá. Uma reinicialização interrompe o disco, mas eu gostaria de não reiniciar a máquina todos os dias. Qualquer pista?
Efemmeffe 31/01
3

Quando há grandes diferenças (digamos, mais do que alguns por cento) entre (como root) df -g /some/partition_roote du -gx /some/partition_root( -xdiz ao du para se limitar à mesma partição, é útil verificar '/' por exemplo): provavelmente ainda existem arquivos aberto no qual alguns processos ainda estão gravando, mas que você excluiu no disco (portanto: o arquivo ainda existe enquanto for aberto pelos processos e preenche o espaço em disco (df -g vê isso), mas como não há Se links mais longos (ou nomes de arquivos) para seus inodes, du -gx sente falta deles.

No seu caso, compare as saídas de:

df -g /
du -gx /

Para descobrir quais são os arquivos com menos de 1 links (ou seja, arquivos excluídos, mas ainda abertos):

lsof -nP +L1  /

Verifique os nomes dos processos e os pids para ver quais são os processos que estão gravando nesses arquivos "fantasmas" e aja de acordo. outros podem exigir uma reinicialização adequada)

Olivier Dulac
fonte
df -g não é um comando válido no meu ubuntu: root @ kodi: / home / fmf # df -g / df: opção inválida - 'g'
effemmeffe
@effemmeffe: em seguida, usar a opção apropriada (k se AIX, -h no Solaris) e use o correspondente para du ...
Olivier Dulac
Não consigo tirar da sua resposta o que a opção -g deve fazer, por isso não posso procurar a opção equivalente, você pode detalhar, por favor?
Efemmeffe #
-g em Linux no DF ou du mostra o tamanho em gigabites
Olivier Dulac
Não está no meu ubuntu. Enfim, entendi, obrigado.
Effemmeffe #