Problema
Depois de ler muitas postagens/tópicos de fórum, ainda não entendi se ainda há espaço no meu disco rígido ou não...
Comecei a pesquisar porque instalei o Syncthing hoje e uma notificação de erro diz que meu disco está quase cheio e o Syncthing não pode ser executado, mas pensei que tinha cerca de 40 GB restantes...
O que eu fiz para tentar entender e resolver
- executou o analisador de disco (na raiz do sistema): diz 441,3 Go ocupados / 45,4 Go disponíveis em um total de 470,9 Go em um disco de 480 GB
- executei o Disk analyzer como sudo (na raiz do sistema): diz 443,6 Go ocupados / 45,4 Go disponíveis em um total de 470,9 Go em um disco de 480 GB
Nota: Não entendo por que somente o tamanho "ocupado" é diferente... E suponho que a diferença de 10 GB entre 470 e 480 seja devido à memória reservada para o sistema ou algo assim (?).
- corrido
df
que produz /dev/sda5 459849800 433180284 3236916 100% /
o que diz que está completo...
- corrido
sudo du -h --max-depth=1 /
que produz:
48G /var
0 /sys
4,0K /srv
4,0K /mnt
72M /root
63G /snap
4,0K /cdrom
1,9G /opt
22M /etc
du: impossible de lire le répertoire '/proc/3353/task/3353/net': Argument invalide
du: impossible de lire le répertoire '/proc/3353/net': Argument invalide
du: impossible de lire le répertoire '/proc/6203/task/6203/net': Argument invalide
du: impossible de lire le répertoire '/proc/6203/net': Argument invalide
du: impossible d'accéder à '/proc/80737/task/80737/fd/3': Aucun fichier ou dossier de ce nom
du: impossible d'accéder à '/proc/80737/task/80737/fdinfo/3': Aucun fichier ou dossier de ce nom
du: impossible d'accéder à '/proc/80737/fd/4': Aucun fichier ou dossier de ce nom
du: impossible d'accéder à '/proc/80737/fdinfo/4': Aucun fichier ou dossier de ce nom
0 /proc
325G /home
16K /lost+found
0 /dev
368K /tmp
272M /boot
21G /usr
8,0K /media
du: impossible d'accéder à '/run/user/1000/gvfs': Permission non accordée
du: impossible d'accéder à '/run/user/1000/doc': Permission non accordée
4,0M /run
460G /
então diz que há cerca de 10G livres no total de 470 Go.
instalado
ncdu
que comodu
diz que o uso do disco é459,2 GiB
corrido
lsof -nP +L1
que gera 1413 linhas de arquivos "deletados" (a grande maioria são "memfd:mozilla-ipc"...) de vários tamanhos. Mas não descobri como somar todos esses arquivos para verificar o uso total do disco.
- correu
find /proc/[0-9]*/fd -lname '*(deleted)' 2>/dev/null | perl -lne '($l = readlink) =~ s/ (deleted)$//; print -s, " $_ $l"' | sort -g
(comando encontrado em outro tópico do askubuntu ) para classificar o resultado por tamanho de arquivo
que produz 1516 linhas, e aqui estão as dez principais linhas - suponho que o primeiro número seja o tamanho em bytes (?):
2482816 /proc/2758/fd/378 /memfd:gdk-wayland (deleted)
5439888 /proc/2758/fd/322 /memfd:gdk-wayland (deleted)
6031750 /proc/22782/fd/28 /tmp/.org.chromium.Chromium.7Uj5wU (deleted)
6987776 /proc/5122/fd/30 /memfd:mozilla-ipc (deleted)
8087040 /proc/2758/fd/351 /memfd:gdk-wayland (deleted)
8294400 /proc/2758/fd/224 /memfd:gdk-wayland (deleted)
8783424 /proc/2758/fd/327 /memfd:gdk-wayland (deleted)
8783424 /proc/2758/fd/360 /memfd:gdk-wayland (deleted)
9216000 /proc/2758/fd/331 /memfd:gdk-wayland (deleted)
67108864 /proc/2671/fd/6 /memfd:pulseaudio (deleted)
Questões
- Estou no estado em que não sei se meu disco está realmente cheio ou não... há muitas inconsistências nos números (não estou dizendo que os números estão errados, suponho que eles nem sempre significam a mesma coisa, mas isso não é inteligível para mim). Então, se alguém puder me ajudar a entender esse ponto, ficarei grato!
- Não sei se está cheio por causa de arquivos "deletados" que consomem espaço ou não. Qualquer ajuda sobre como medir o uso do disco de arquivos deletados também seria apreciada
- Finalmente, não entendo por que vejo
63G /snap
comdu
enquanto o Disk analyzer diz que é apenas188,4 ko
. Entendo que há links simbólicos para snaps nesta pasta e parece que esses links simbólicos (para/var/lib/snapd/snaps/
) são responsáveis por 24 G, dizdu
. Esses 24 G também estão nos 63 G de/snap
? Verifiquei adu
saída de/snap
e não parece... Mas adicionar 63 G à saída do Disk analyzer resulta em um total acima do tamanho real do disco... Isso me perdeu totalmente...
Por favor, diga-me se precisar de mais informações. Terei prazer em lhe dar :)
Edições
Saída completa df
(os números para /dev/sda5 são diferentes porque criei algum espaço...):
Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur
tmpfs 1625812 2204 1623608 1% /run
/dev/sda5 459849800 414179712 22237488 95% /
tmpfs 8129044 24768 8104276 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
/dev/sda1 523248 4 523244 1% /boot/efi
tmpfs 1625808 1720 1624088 1% /run/user/1000
Investigando mais para entender melhor tudo isso, percebi que o programa Discos no meu sistema diz que tenho uma sda2
partição de:
- 480 GB (479 564 137 472 bytes)
Mas esses bytes são, na verdade, 480 gigabytes (10^9 bytes), mas apenas 446,6 GB . O programa também diz que sda5
a partição tem 47 GB livres, o que corresponde aos 46,8 Go fornecidos pelo Disk Analyzer...
Nunca percebi que o espaço de armazenamento em disco era fornecido em gigabytes "vantajosos" (10^9), e agora entendo melhor por que vejo uma diferença tão "grande" entre a df
saída e o Disk Analyzer.
Você misturou muitas coisas diferentes na sua pergunta, e provavelmente é por isso que é difícil entender o que está acontecendo.
Vamos começar pelo último, os arquivos "excluídos" em
/proc
./proc
não são um diretório real no seu disco; são um sistema de arquivos virtual que reflete o estado dos processos no seu sistema. Os "arquivos" em/proc/xxxx/fd
representam descritores de arquivo que estão abertos no momento pelo número do processoxxxx
. Descritores de arquivo podem se referir a arquivos reais no disco, mas também podem se referir a praticamente qualquer outra coisa, como em sistemas do tipo Unix, quase tudo que o programa pode ler dados ou gravar dados é representado como um "arquivo".O comando que você digitou exibe no final da linha os objetos reais aos quais esses descritores de arquivo se referem. Como você pode ver, a maioria deles começa com ,
/memfd:
o que significa que eles são apenas blocos de memória, usados para comunicação entre programas, que um programa alocou e então "deletou", como mencionado na outra resposta (o que efetivamente faz com que o bloco de memória seja automaticamente desalocado quando o programa para de usá-lo). Há apenas um arquivo real lá, que é/tmp/.org.chromium.Chromium.7Uj5wU
.Se você não é um programador interessado em depurar nenhum software que esteja sendo executado no seu sistema, você basicamente não precisa se importar com o conteúdo de
/proc
. Similarmente para/sys
, ele também é um pseudodiretório usado para se comunicar com o kernel do sistema operacional, e/dev
, que representa vários dispositivos presentes no seu computador e reconhecidos pelo SO.O que nos leva ao próximo tópico, a saída do seu
du
comando. É enganoso, pois inclui "diretórios" que são apenas pontos de montagem para outro sistema de arquivos que não aquele que lhe interessa, ou seja, sistema de arquivos raiz colocado na/dev/sda5
partição do disco, comodf
mostra a saída do seu comando. (A propósito. Suadf
saída é apenas aquela linha que se refere àquela partição que você postou? Normalmente,df
deve ser exibida uma porção de outras linhas também, referindo-se a todos os sistemas de arquivos.) Uma das entradas enganosas nesta saída é/snap
sobre o que você está se perguntando. Todos os subdiretórios em são, na/snap
verdade, pontos de montagem para sistemas de arquivos virtuais contidos em*.snap
arquivos no/var/lib/snapd/snaps
diretório e esse diretório é o lugar onde eles estão realmente ocupando espaço em disco. O Disk Analyzer parece estar contando apenas o tamanho da estrutura real do subdiretório em/snap
, ignorando essas montagens, enquantodu
apenas as conta como se fossem arquivos regulares em um diretório regular. Então o Disk Analyzer está correto sobre isso.O que está faltando é
-x
o parâmetro todu
- ele dizdu
para ignorar diretórios que pertencem a sistemas de arquivos diferentes. Dessa forma, você se livrará de entradas enganosas nadu
saída.BTW. Se você quiser saber o que está montado onde, basta digitar o
mount
comando - ele mostrará todos os sistemas de arquivos e seus pontos de montagem. Você pode ver que há vários sistemas de arquivos virtuais (ou "pseudo-sistemas de arquivos") comosysfs
,tmpfs
,cgroup
etc. montados em vários diretórios, você também verá as montagens de loop de arquivos em/var/lib/snapd/snaps
subdiretórios do/snap
diretório.Em seguida, chegamos à sua
df
saída. Ela diz que dos 459849800 Kbytes disponíveis no seu sistema de arquivos raiz, 433180284 são usados e 3236916 Kbytes são livres. No entanto, a soma 433180284+3236916 não é igual a 459849800, é apenas 436417200. Por que isso? Conforme mencionado na outra resposta, cerca de 5% do espaço em disco é reservado para processos raiz, o que significa que os processos em execução como raiz podem usar os 459849800-436417200=23432600 Kbytes restantes, enquanto os processos em execução como usuários regulares não podem. Do espaço disponível para processos do usuário (436417200 Kbytes), 433180284 Kbytes já foram usados, o que representa 99,2% -df
aparentemente arredondando para 100%.Em caso de dúvidas e números inconsistentes, você deve confiar no que
df
lhe mostra, pois ele exibe os mesmos dados que o sistema operacional realmente "vê" quando tenta alocar espaço para um novo arquivo. Sedf
mostrar 0 Kbytes livres, então você não conseguirá gravar nada no disco. No seu caso, você ainda tem cerca de 3 Gbytes livres. Entãodf
é a resposta definitiva para a pergunta se seu disco está cheio ou não.Finalmente, por que o Disk Analyzer rodando como root mostra um tamanho ocupado diferente do que rodando como usuário regular? Simplesmente, é uma questão de permissões. Se rodando como não root, o programa simplesmente não consegue acessar alguns diretórios, então ele não consegue contar o tamanho dos arquivos neles. Então esses arquivos estão faltando na contagem "ocupados". Nesse caso, o Disk Analyzer deve mostrar um aviso bem visível no topo de uma janela que ele não conseguiu escanear alguns dos diretórios.
O que eu não entendo, no entanto, é por que ele mostra 45G livres, enquanto esse não é o caso na verdade. Pelos meus experimentos, parece que o Disk Analyzer está levando em conta o espaço livre reservado para o root (que
df
omite), mas no seu caso a soma do espaço disponível para o root e disponível para programas do usuário é de cerca de 26G, não 45. Também notei que o Disk Analyzer está aparentemente exibindo os números usando gigabytes decimais (1000x1000x1000 bytes), enquanto ferramentas comodu
edf
quando executadas com-h
parametr usam gigabytes binários (1024x1024x1024 bytes), então os números no Disk Analyzer serão ligeiramente maiores (pelo fator de cerca de 1,07), mas isso ainda não mudará 26G para 45G. Então, não entendo de onde veio 45G. Talvez seja algum bug no Disk Analyzer, talvez outra pessoa possa explicar."Espaço em disco" é um conceito por sistema de arquivos, não por disco ou por partição.
Como um resquício dos dias de discos minúsculos, para evitar que administradores de sistemas fiquem acordados à noite, 5% do espaço em disco é reservado para processos
root
(UID
0
). Então,sudo df | grep -v loop
edf | grep -v loop
obterá resultados diferentes.(deleted)
arquivos são arquivos usados por processos para uso temporário (por exemplo, cache). O método geral é:inode
.unlink()
(excluir) o arquivo, o que limpa a entrada do diretório para o arquivo, mas não libera espaço em disco, já que a "contagem de uso" foi incrementada na etapa 3.close()
ed (todos os arquivos abertos são fechados quando o processoexit
s), o "use-count" no inode é decrementado. Se o "use-count" for zero, o espaço em disco é liberado.Esta é uma maneira do programador gerenciar arquivos temporários que os apaga automaticamente quando o programa termina. A outra maneira ruim requer que o programador mantenha o controle de todos os arquivos temporários e pegue todas as falhas possíveis do programa para fazer a limpeza.