Eu encontrei um problema em um dos meus servidores executando o 16.04: não há espaço em disco.
Não tenho ideia do que está ocupando o espaço. Existe um comando para listar os tamanhos de diretório atuais, para que eu possa percorrer e acabar no diretório ocupando todo o espaço?
disk-usage
Karl Morrison
fonte
fonte
export DISPLAY=:0.0; ssh -Y <user>@<server> filelight
(substituafilelight
por sua ferramenta preferida). Obviamente, com absolutamente nenhum espaço restante, se você ainda não tiver a ferramenta instalada, precisará usar outra coisa!Respostas:
Como sempre no Linux, há mais de uma maneira de fazer o trabalho. No entanto, se você precisar fazer isso na CLI, este é o meu método preferido:
Começo executando isso como root ou com sudo:
O grep é limitar as linhas de retorno àquelas que retornam com valores no intervalo de Megabyte ou Gigabyte. Se seus discos forem grandes o suficiente, você poderá adicionar
|T
também para incluir quantidades de Terabyte. Você pode obter alguns erros no/proc
,/sys
e / ou/dev
uma vez que não são arquivos reais no disco. No entanto, ele ainda deve fornecer saída válida para o restante dos diretórios na raiz. Depois de encontrar os maiores, você poderá executar o comando dentro desse diretório para restringir o caminho do culpado. Por exemplo, se/var
foi o maior, você poderia fazer o seguinte:Isso deve levá-lo às crianças problemáticas!
Considerações adicionais
Embora o comando acima certamente funcione, eu tive algumas críticas construtivas nos comentários abaixo que apontaram algumas coisas que você também pode incluir.
grep
eu forneça pode resultar no retorno ocasional do valor "K" se o nome do diretório ou arquivo tiver G ou M. maiúsculo. Se você absolutamente não deseja que nenhum dos diretórios com valor K apareça, seu jogo regex para ser mais criativo e complexo. por exemplogrep -E "^[0-9\.]*[MG]"
Se você souber qual unidade é o problema e ela possui outras unidades montadas que você não deseja perder tempo, inclusive em sua pesquisa, você pode adicionar o
-x
sinalizador ao seudu
comando. Descrição da página de manual desse sinalizador:Você pode classificar a saída do
du
comando para que o valor mais alto fique na parte inferior. Basta acrescentar isso ao final do comando:| sort -h
fonte
"^[0-9]*[.]*[0-9]*[MG]"
-x
opção paradu
permanecer nessa unidade (fornecida na linha de comando). Você também pode canalizarsort -h
para classificar corretamente os valores legíveis por humanos de megabytes / gigabytes. Normalmente, eu deixava de fora a--max-depth
opção e apenas pesquisava a unidade inteira dessa maneira, classificando-a adequadamente para obter as maiores coisas na parte inferior./
), e o uso-x
me dá uma garantia de que não estarei contando coisas erradas. Se você/
estiver cheio e você tiver uma montagem separada/home
ou o que for, usar-x
é praticamente uma necessidade para se livrar das coisas irrelevantes. Então, acho que é mais fácil usá-lo o tempo todo, apenas por precaução.Você pode usar
ncdu
para isso. Funciona muito bem.fonte
curl http://path/to/ncdu | sh
, e ele será executado em um cache stdin IO na memória, mas isso exigirá um pouco de sorte. provavelmente há uma maneira de fazer uma ram-disco tambémsudo ncdu /
partir da linha de comando.sudo
porque se você não colocar o sudo, ele não informará tamanhos para as pastas pertencentes à raiz, e/
porque se você não digitar, o relatório será recusado apenas da pasta em que você estáEu uso esse comando
sudo du -aBM -d 1 . | sort -nr | head -20
Ocasionalmente, preciso executá-lo a partir do
/
diretório, pois coloquei algo em um local estranho.fonte
-d 1
opção (e geralmente com emless
vez dehead -20
), para obter uma lista completa recursivamente enumerada de todos os arquivos e diretórios classificados pelo espaço que consomem. Dessa forma, se eu vir um diretório ocupando muito espaço, posso simplesmente rolar para baixo para ver se a maior parte do espaço é realmente ocupada por algum arquivo ou subdiretório específico. É uma boa maneira de encontrar alguns arquivos e diretórios desnecessários a serem excluídos para liberar espaço: basta rolar para baixo até ver algo que você tem certeza de que não quer guardar, exclua-o e repita.sort
aguarda a conclusão da saída antes de iniciar a saída.Já existem muitas boas respostas sobre maneiras de encontrar diretórios ocupando a maior parte do espaço. Se você tiver motivos para acreditar que poucos arquivos grandes são o principal problema, em vez de muitos pequenos, você pode usar algo parecido
find / -size +10M
.fonte
Não sei o Ubuntu e não consigo verificar minha resposta, mas poste aqui minha resposta com base na minha experiência como administrador do unix há muito tempo.
Descubra qual sistema de arquivos fica sem espaço
listará todo o sistema de arquivos, seu tamanho e seu espaço livre. Você só perde tempo se investigar sistemas de arquivos com espaço suficiente. Suponha que o sistema de arquivos completo seja / myfilesystem. verifique a saída df se houver sistemas de arquivos montados em subdiretórios de / myfilesystems. Nesse caso, os seguintes discursos devem ser adaptados a essa situação.
Descubra quanto espaço é usado pelos arquivos deste sistema de arquivos
A opção -x pode ser usada para garantir que apenas os arquivos que são membros deste sistema de arquivos sejam levados em consideração. Algumas variantes do Unix (por exemplo, Solaris) não conhecem a opção -x para du. Então você tem que usar algumas soluções alternativas para encontrar o du do seu sistema de arquivos.
Agora verifique se o du dos arquivos visíveis tem aproximadamente o tamanho do espaço usado exibido por df. Nesse caso, você pode começar a encontrar os grandes arquivos / diretórios do sistema de arquivos / myfilesystem para limpar.
para encontrar os maiores subdiretórios de um diretório /.../dir use
a opção -k força o du a gerar a saída em kilobyte sem nenhuma unidade. Este pode ser o padrão em alguns sistemas. Então você pode omitir esta opção. Os maiores arquivos / subdiretórios serão mostrados na parte inferior da saída.
Se você encontrou um arquivo / diretório grande que não precisa mais, pode removê-lo da maneira apropriada. Não se preocupe com os pequenos diretórios na parte superior da saída. Não resolverá o seu problema se você excluí-los. Se você ainda não tiver espaço suficiente, poderá repetir a etapa 4 nos subdiretórios grandes que são exibidos na parte inferior da lista.
Mas o que aconteceu se a saída du não for aproximadamente o espaço disponível exibido por df?
Se a saída du for maior, você perdeu um subdiretório no qual outro sistema de arquivos está montado. Se a saída dupla for muito menor, alguns arquivos não serão mostrados em nenhum diretório inspecionado. Pode haver diferentes razões para seus fenômenos.
alguns processos estão usando um arquivo que já foi excluído. Portanto, esses arquivos foram removidos do diretório e você não pode vê-los. Mas, para o sistema de arquivos, seus blocos ainda estão em uso até que o processo feche os arquivos. Você pode tentar descobrir os processos relevantes (por exemplo, com lsof) e forçá-los a fechar esses arquivos (por exemplo, parando o aplicativo ou eliminando os processos). Ou você simplesmente reinicia sua máquina.
existem arquivos em diretórios que não são mais visíveis porque em um de seus diretórios pai outro sistema de arquivos é montado. Portanto, se você tiver um arquivo / myfilesysem / subdir / bigfile e agora montar outro sistema de arquivos em / myfilesystem / subdir, não poderá mais ver esse arquivo e
reportará um valor que não contém o tamanho de / myfilesystem / subdir / bigfile. A única maneira de descobrir se esses arquivos existem é desmontar / myfilesystem / subir e verificar com
se ele contiver arquivos.
Pode haver tipos especiais de sistemas de arquivos que usam / reservam espaço em um disco que não é visível para o comando ls. Você precisa de ferramentas especiais para exibir isso.
Além dessa maneira sistemática, usando o comando du, existem outras que você pode usar. Assim, você pode usar o comando find para encontrar arquivos maiores que algum valor que você fornece, você pode procurar arquivos maiores que algum valor que você fornece ou que foram criados recentemente ou que possuem um nome especial (por exemplo, * .log, core, * .trc). Mas você sempre deve fazer um df como descrito em 1 para trabalhar no sistema de arquivos correto
fonte
/tmp
um sistema de arquivos separado (por exemplo, um tmpfs) e algo criou arquivos/tmp
antes de se tornar um ponto de montagem para um sistema de arquivos diferente. Agora, esses arquivos estão no sistema de arquivos raiz, sombreados por um ponto de montagem e você não pode acessá-los sem uma reinicialização no modo de recuperação (que não processa/etc/fstab
) ou, como você sugere, uma montagem de ligação.Caso você também esteja interessado em não usar um comando, aqui está um aplicativo: Filelight
Permite visualizar rapidamente o que está usando espaço em disco em qualquer pasta.
fonte
ssh -X <your host>
e execute o programa na linha de comandoTente
sudo apt-get autoremove
remover os arquivos não utilizados, se você não tiver feito issofonte
Eu costumo usar esse
Então, se eu encontrar algumas pastas grandes, mudarei para ela e investigarei mais
Se necessário, você também pode classificá-lo automaticamente com
fonte
Não é realmente uma resposta - mas um adendo.
Você está sem espaço e não pode instalar o ncdu a partir da resposta do @erman.
Algumas sugestões
sudo apt clean all
para excluir pacotes que você já baixou. SEGUROsudo rm -f /var/log/*gz
limpar arquivos de log com mais de uma semana ou duas - não excluirá os logs mais recentes / atuais. MAIS SEGUROsudo lsof | grep deleted
liste todos os arquivos abertos, mas filtre os que foram excluídos do disco. MUITO SEGUROsudo rm /tmp/*
exclua alguns arquivos temporários - se algo os estiver usando, você poderá perturbar um processo. NÃO É REALMENTE SEGUROEsse `lsof pode retornar linhas como esta:
Não é possível fazer muito pela linha init, mas a segunda linha sugere que o salt-minion tem um arquivo aberto que foi excluído e os blocos de disco serão retornados quando todos os identificadores de arquivo forem fechados por uma reinicialização do serviço.
Outros suspeitos comuns aqui incluem syslog / rsyslog / syslog-ng, squid, apache ou qualquer processo executado pelo servidor que seja "pesado".
fonte
Acho particularmente valiosa a saída de ferramentas como o Filelight, mas, como no seu caso, em servidores normalmente não há GUI instalada, mas o
du
comando está sempre disponível.O que eu normalmente faço é:
du
saída em um arquivo (du / > du_output.txt
);DuFS
para "montar" adu
saída em um diretório temporário;DuFS
usa o FUSE para criar um sistema de arquivos virtual (= nenhum arquivo é realmente criado, é tudo falso) de acordo com adu
saída;Isenção de responsabilidade: eu escrevi
dufs
- exatamente porque muitas vezes tenho que descobrir o que ocupa espaço em disco em máquinas sem cabeça.fonte
Semelhante ao @TopHat, mas filtra alguns arquivos se eles tiverem M, G ou T no nome. Não acredito que ele perca tamanho na primeira coluna, mas não corresponderá ao nome do arquivo, a menos que você nomeie os arquivos de maneira criativa.
Opções de linha de comando explicadas aqui, pois eu não sabia o que o c ou a fizeram.
fonte