O que está comendo meu espaço em disco?

13

Estou executando o Linux Mint 14 Nadia. A partição Linux possui 10G. Quando o sistema inicia, durelata 80% de uso. Em seguida, o uso aumenta lentamente até atingir 100% e o sistema se torna inutilizável. (Isso pode acontecer na ordem de dias ou semanas). Após a reinicialização, o uso é redefinido para 80%.

O mais estranho de tudo é que dunão mostra mudanças.

Aqui está a saída desses comandos (Windows e partições de unidades externas são elididas):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(Nota: eu uso a hibernação. Após a hibernação, o uso permanece o mesmo e, após a reinicialização, redefine para 80%.)

Como acompanho o que consome o espaço?

Eu li esta pergunta . Eu ainda estou no escuro. Como descubro qual programa é responsável por esse comportamento?

Após a edição : encontrou. O espaço é reivindicado pelo log do kernel, que é visto por dmesg. É preenchido porque minha máquina gera erros na taxa de 5 por segundo. (Está relacionado a esse bug .) Deixe os futuros leitores com um problema semelhante - preenchendo lentamente o espaço em disco invisível du- não se esqueça de tentar dmesgprocurar a causa.

Arry
fonte
1
Eu prefiro do que ncdusimples dupara encontrar diretórios de arquivos grandes. Ele verifica toda a árvore de diretórios antes de permitir que você faça qualquer coisa; você pode passar um caminho específico (por exemplo, ncdu /varou apenas ncdu ~)
Blacklight Shining
Várias respostas decentes neste site.
Sparhawk

Respostas:

15

Execução repetida de

sudo du -x   -d1 -h /

(na árvore de diretórios) deve informar onde o espaço é consumido. Isso provavelmente explica, sem mais investigações, qual aplicativo está causando isso.

arquivos invisíveis

Se dunão mostrar esses arquivos, uma das possibilidades será excluída. Um arquivo (ou melhor: seu nome, ou seja, sua entrada em um diretório) pode ser excluído enquanto o arquivo ainda estiver em uso. Contanto que exista um descritor de arquivo válido apontando para esse arquivo, ele cobre espaço no volume (se não for um arquivo vazio ...).

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

Você pode encontrar esses arquivos com find:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

Pode ser um único arquivo enorme ou vários arquivos menores que causam o seu problema. Existem cerca de 30 desses arquivos no meu sistema agora (pertencentes a apenas cinco processos). ls -lmostra o tamanho desses arquivos, mas parece não ser possível obter esse valor find.

Depois de finalizar o processo, o espaço fica disponível dfnovamente para o sistema de arquivos ( ).

Hauke ​​Laging
fonte
Isso não aborda minha pergunta. durelata nenhuma mudança no espaço consumido: 7.3G no início e 7.3G após o tempo passar. dfrelata 7.3G livre no início e até 10G com o passar do tempo. Não consigo encontrar o problema com du.
Arry
@ Arry De fato, eu li muito rápido.
Hauke ​​Laging
8

Use algo como

lsof -s | grep deleted | sort -k 8

para ver quais processos estão mantendo os arquivos excluídos abertos. Os campos importantes são o segundo (PID) e o oitavo (terceiro da última; o tamanho do arquivo).

(Preste atenção às linhas duplicadas, não as conte duas vezes. Verifique o PID e o caminho do arquivo (último campo) ou número do inode (segundo ao último campo).)

Depois disso, se você encontrar um processo que provavelmente é o culpado, podemos ver como corrigi-lo.

angus
fonte
Boa sugestão, mas na minha máquina esse comando relata apenas 2 arquivos excluídos abertos com tamanho de 2k, o que está muito longe de 2,7G consumidos ao longo do tempo por algum processo perdido.
Arry
Essa foi uma ótima sugestão e, de fato, me ajudou a resolver um problema semelhante à pergunta dos pais. Eu tive uma enorme discrepância entre os comandos df e du. No meu caso específico, tenho logs rotativos e um serviço que encaminha os logs (logstash neste exemplo). O serviço de armazenamento de log mantinha os logs girados abertos, mesmo quando excluídos. Isso estava causando a discrepância entre du e df. Depois que o serviço de logstash foi reiniciado, o espaço em disco apareceu corretamente.
aemus 25/03
Eu tive um processo escrevendo um arquivo de acréscimo único que cresceu indefinidamente e, eventualmente, encheu meu disco. Decidi rmmar esse arquivo, mas o processo não fechou seu descritor de arquivos, então ele ainda estava sendo usado. Reiniciar o processo e limitar o tamanho da AOF resolveu meu problema.
aviggiano 24/07/2015
Vale ressaltar que isso requer privilégios de root. Além disso, eu costumava sudo lsof -s | grep deleted | sort -hk7obter uma classificação numérica. Sem -h, o tipo faz coisas lexicais engraçadas com números.
Derek
Isso é incrível. Up-vote
Techie
4
find / -size +10000k -print0 | xargs -0 ls -l -h

Use isso para encontrar recursivamente o que está preenchendo mais de 10 MB ou mais /(raiz) e exibi-lo com muitos detalhes com ls -lin xargs. Se você escrever 1000000 (2 zeros extras), poderá obter 1 GB + por exemplo.

du / -h --max-depth=1 | sort -h

Você também pode usar du e apenas cavar manualmente.

Adionditsak
fonte
1

Sempre que isso acontece, sempre começo meu foco em determinados subdiretórios. A estrutura FHS que a maioria das distribuições Linux adere é apresentada com isso em mente.

Primeiro /var, entre , seguido por /home.

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

Você pode restringir seu foco a subdiretórios em qualquer um desses locais também. Uma vez que você tenha acabado de procurar lá, eu geralmente passo para /roote, finalmente, os subdiretórios restantes em /.

Se for uma distribuição baseada no Red Hat, o cache yumusado para executar atualizações pode estar consumindo uma grande quantidade de espaço. Você pode usar este comando para limpá-lo:

$ yum clean packages

Outras distros que usam aptpodem fazer algo semelhante apt-get clean,.

Eu também executaria esse comando na parte superior do /diretório, pois esse local às vezes pode se tornar a fonte de arquivos de log perdidos.

$ ls -la /

Preste atenção especial aos arquivos de ponto! Coisas nomeadas .blah, por exemplo.

slm
fonte
1

timeshift estava comendo meu disco.

sudo timeshift -delete--all

Recuperado 50Gb.

Raul Pinheiro
fonte
0

Eu tenho quase a mesma situação.

No meu caso, o motivo foi o VMware. Um dos outros VMwares na mesma máquina, consumiu os espaços em disco. É por isso que meu uso de espaço em disco foi de 100%.

Depois de excluir arquivos grandes do VMware do vizinho, ele está funcionando corretamente.

pchero
fonte