À medida que aplicações e serviços executam continuamente em uma instância Linux, logs, cache e dados de negócios se acumulam e consomem gradualmente o espaço disponível em disco. Quando o disco fica cheio, a gravação de novos dados falha, causando interrupção do serviço ou comportamento anormal.
Sintomas
Ao criar arquivos ou executar aplicações em uma instância Linux, a mensagem de erro No space left on device aparece, indicando esgotamento dos recursos de armazenamento.
Diagnóstico e soluções
Antes de fazer alterações, crie um snapshot manual para fazer backup dos dados e evitar perda acidental que possa afetar seus negócios.
Cenário 1: Espaço em disco esgotado
-
Verifique o uso do disco.
Execute
sudo df -hpara visualizar o uso do disco em cada ponto de montagem. Se o valor deUse%for 100%, o espaço correspondente está cheio. -
Limpe arquivos ou pastas desnecessários.
Use
sudo du -sh <folder name>/*para verificar o tamanho dos arquivos e subpastas em um diretório especificado. Se necessário, navegue até o diretório e repita esse comando nível por nível para identificar itens grandes.Por exemplo, use
sudo du -sh /mnt/*para verificar o espaço em disco usado por arquivos e subpastas no diretório/mnt. Se o espaço continuar insuficiente após a limpeza, expanda seu disco.
Cenário 2: Recursos de inode esgotados
Cada arquivo consome um inode. Se o disco contiver muitos arquivos pequenos, os inodes podem se esgotar mesmo com espaço em disco disponível, impedindo a criação de novos arquivos.
-
Verifique o uso de inodes.
Execute
sudo df -i. Se o valor deIUse%atingir 100%, os recursos de inode estão esgotados. -
Limpe arquivos ou pastas desnecessários.
Use
sudo du -sh --inodes <folder name>/*para visualizar o número de inodes usados por arquivos e subpastas em um diretório especificado. Se necessário, navegue até o diretório e use este comando recursivamente para localizar o alto uso de inodes.Por exemplo, use
sudo du -sh --inodes /mnt/*para verificar o número de inodes usados por arquivos e subdiretórios no diretório/mnt. Se a contagem de inodes continuar insuficiente após a limpeza, expanda seu disco.
Cenário 3: Arquivos excluídos ainda ocupam espaço
Mesmo após a exclusão de um arquivo, o sistema não libera seu espaço em disco se um processo ainda o estiver usando (ou seja, mantendo um identificador de arquivo aberto). O espaço só é liberado quando o processo termina ou fecha explicitamente o arquivo.
-
Instale a ferramenta
lsof.Arquivos excluídos que ainda retêm espaço não aparecem nos comandos
dfoudu. Use a ferramentalsofpara listá-los.Alibaba Cloud Linux, CentOS
sudo yum install -y lsofDebian, Ubuntu
sudo apt install -y lsof -
Visualize o espaço de armazenamento retido por arquivos excluídos.
sudo lsof | grep delete | sort -k7 -rn | moreA sétima coluna da saída mostra o tamanho do arquivo em bytes. Some esses valores para calcular o total de espaço não liberado.
tail 619544 root 3r REG 253,1 50000000 136507 /home/test_file (deleted) aliyun-se 347980 root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347997 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347996 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347995 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347994 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347983 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347982 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347981 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) -
Registre o nome do processo e o PID.
Execute
sudo lsof | grep deletee anote os camposCOMMANDePIDpara identificar o nome e o ID do processo. -
Reinicie ou pare o serviço relevante.
Execute
sudo ps -ef | grep <PID>para confirmar a finalidade do processo. Após avaliar o impacto, reinicie ou pare o serviço.ImportanteReiniciar ou parar um serviço pode afetar seus negócios. Avalie cuidadosamente e execute esta ação durante uma janela de manutenção apropriada.
Cenário 4: Ponto de montagem sobreposto
Quando um diretório não vazio serve como ponto de montagem para outro dispositivo, seu conteúdo existente fica oculto. No entanto, processos com o diretório já aberto ainda podem gravar no espaço subjacente. Esse consumo de espaço "oculto" não aparece no comando df e pode esgotar inesperadamente o espaço em disco.
-
Visualize informações sobre pastas duplicadas.
Execute
sudo lsblke verifique a coluna MOUNTPOINT em busca de nomes de diretórios repetidos.sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 39.8G 0 part / vdb 253:16 0 40G 0 disk └─vdb1 253:17 0 40G 0 part /mnt vdc 253:32 0 40G 0 disk └─vdc1 253:33 0 40G 0 part /mntNeste exemplo, ambas as partições
vdb1evdc1estão montadas em/mnt, indicando risco de sobreposição de ponto de montagem. -
Desmonte o sistema de arquivos.
ImportanteDesmontar um sistema de arquivos pode interromper serviços dependentes do caminho. Avalie o risco e escolha um momento apropriado para realizar esta operação.
Obtenha o
<duplicate mount directory>na etapa anterior.sudo umount <duplicate mount directory>Neste exemplo,
/mnté o diretório de montagem duplicado. A execução desudo umount /mntdesmonta o dispositivo montado mais recentemente,vdc1. -
Identifique o nome do dispositivo do ponto de montagem sobreposto.
Execute
sudo df -hpara localizar o nome do dispositivo associado ao ponto de montagem atualmente ativo.sudo df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 3.7G 0 3.7G 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 3.7G 524K 3.7G 1% /run tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup /dev/vda3 40G 4.5G 33G 12% / /dev/vda2 200M 5.8M 194M 3% /boot/efi /dev/vdb1 40G 40G 0 100% /mnt tmpfs 747M 0 747M 0% /run/user/0Neste exemplo, a partição atualmente montada em
/mntévdb1. Portanto, o nome do dispositivo do ponto de montagem sobreposto évdb1. -
Resolva o problema de espaço em disco cheio.
-
Limpe arquivos ou pastas desnecessários no espaço sobreposto.
Neste exemplo, limpe o diretório
/mntmontado porvdb1. -
Se o espaço continuar insuficiente após a limpeza, expanda seu disco e monte-o em um diretório vazio diferente.
Neste exemplo, o dispositivo alvo para expansão é
vdb1.
-
Não monte vários dispositivos no mesmo diretório.
Montar vários dispositivos no mesmo diretório oculta o espaço do primeiro dispositivo montado e pode causar gravação de dados no dispositivo errado. Sempre monte dispositivos diferentes em diretórios vazios separados.
Cenário 5: Arquivos relacionados ao Docker consomem espaço significativo
O Docker gera muitas imagens intermediárias, containers parados e caches de compilação durante a operação. Com o tempo, esses itens se acumulam e consomem espaço em disco.
-
Verifique o uso de espaço em disco do Docker.
Execute
sudo df -h. Se oUse%para umFilesystemdo tipooverlayatingir 100%, o armazenamento do Docker está cheio. -
Avalie o uso de recursos do Docker.
Execute
sudo docker system dfe examine os camposSizeeRECLAIMABLEpara entender o consumo de espaço.sudo docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 21 9 13.94GB 10.66GB(76%) Containers 9 5 30.09MB 0B(0%) Local volumes 6 6 259.9MB 0B(0%) Build Cache 0 0 0B 0BNo exemplo, as imagens do
Dockerocupam 13,94 GB, dos quais 10,66 GB são recuperáveis. Recomendamos priorizar a limpeza de imagens não utilizadas. -
Limpe arquivos desnecessários.
Se não for possível limpar os arquivos do Docker, siga as etapas no Cenário 1: Espaço em disco esgotado .
Remova todos os containers parados: execute
sudo docker container prune.Remova todas as imagens órfãs (imagens sem tag): execute
sudo docker image prune.Remova o cache de compilação não utilizado: execute
sudo docker builder prune.
Cenário 6: Limite de inotify watches atingido
Ao executar comandos como sudo tail -f, o erro tail: cannot watch '...': No space left on device pode aparecer. Isso não significa que o espaço em disco está cheio. O sistema atingiu o número máximo de inotify watches usados para monitorar alterações em arquivos e diretórios. É necessário aumentar esse limite.
-
Verifique o limite atual de inotify watches.
Execute
sudo cat /proc/sys/fs/inotify/max_user_watchespara visualizar o limite atual deinotify watches. -
Aumente o limite de inotify watches.
Elevar esse limite aumenta o uso de memória. Avalie cuidadosamente antes de alterar. O
<new limit>geralmente não deve exceder 524288.sudo sh -c "echo fs.inotify.max_user_watches=<new limit> >> /etc/sysctl.conf" -
Carregue a nova configuração.
Execute
sudo sysctl --systempara aplicar a configuração atualizada. -
Verifique o resultado.
Execute
sudo cat /proc/sys/fs/inotify/max_user_watchesnovamente para confirmar se o limite deinotify watchesfoi atualizado conforme esperado.
Referências
Para armazenar grandes quantidades de arquivos estáticos, como imagens, vídeos ou arquivos compactados, use o Object Storage Service (OSS).
Para compartilhamento de arquivos de alto desempenho e alta concorrência, armazene arquivos usando o File Storage NAS.
Para coleta e análise de logs em grande escala, armazene logs no Simple Log Service (SLS) para simplificar consultas e reduzir o uso de armazenamento local.