15 min de leitura · Guia técnico
'No space left on device' é um erro do kernel Linux que ocorre quando o sistema de arquivos não consegue alocar espaço para gravar novos dados — seja por falta de blocos livres no disco, seja por esgotamento de inodes. Durante migrações de arquivos, esse erro interrompe transferências e pode corromper dados parcialmente copiados. Veja abaixo como diagnosticar a causa raiz e resolver o problema de forma definitiva.
- Verifique o espaço em disco com
df -he os inodes comdf -i - Identifique os diretórios que mais consomem espaço com
du -sh /* 2>/dev/null | sort -rh | head -20 - Libere espaço removendo logs antigos, caches e arquivos temporários desnecessários
- Se o problema for inodes, localize diretórios com excesso de arquivos pequenos e limpe-os
- Retome a migração com
rsyncusando--partialpara não recomeçar do zero
Pré-requisitos
- Acesso root ou sudo ao servidor Linux (Debian 12, Ubuntu 24.04 LTS, Rocky Linux 9 ou AlmaLinux 9)
- Acesso SSH ao servidor — veja como em Acessando servidores VPS Linux da AviraHost
- Ferramentas instaladas:
rsync,du,df,find(presentes por padrão na maioria das distribuições) - Espaço suficiente no destino da migração (verifique antes de iniciar)
- Conhecimento básico de linha de comando Linux
O que causa o erro 'No space left on device' durante migrações
O erro No space left on device durante a migração de arquivos no Linux tem três causas principais, e identificar a correta é essencial para não perder tempo aplicando a solução errada.
Causa 1 — Disco realmente cheio: a mais óbvia. O volume de destino não tem blocos livres suficientes para receber os arquivos transferidos. Isso acontece com frequência quando se migra um servidor inteiro para um disco de capacidade igual ou menor sem fazer uma limpeza prévia.
Causa 2 — Inodes esgotados: menos conhecida, mas muito comum em servidores de hospedagem. O sistema de arquivos ext4 e xfs reserva um número fixo de inodes na formatação. Cada arquivo, diretório ou link simbólico consome um inode. Servidores com muitas contas de e-mail, sessões PHP, caches de CMS ou instalações WordPress acumulam centenas de milhares de arquivos pequenos que esgotam os inodes mesmo com gigabytes livres em disco.
Causa 3 — Partição /tmp ou /var cheia: em servidores com particionamento separado, a partição /tmp ou /var pode estar cheia enquanto / tem espaço. O rsync e outros utilitários de cópia usam essas partições para arquivos temporários, e o erro aparece mesmo que o destino final tenha espaço.
Execute os dois comandos abaixo para identificar qual das causas está em jogo:
df -h
df -i
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 49G 512M 99% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 3276800 0 100% /
No exemplo acima, os inodes estão 100% utilizados — o disco ainda tem 512 MB livres, mas nenhum arquivo novo pode ser criado.
Como liberar espaço em disco antes de migrar arquivos no Linux
Antes de retomar qualquer transferência, é necessário liberar espaço suficiente no volume de destino. A limpeza de logs e caches costuma recuperar vários gigabytes rapidamente.
Primeiro, identifique os maiores consumidores de espaço:
du -sh /* 2>/dev/null | sort -rh | head -20
15G /var
8.2G /home
3.1G /usr
1.4G /opt
...
Para detalhar dentro de /var, que costuma ser o maior vilão:
du -sh /var/* | sort -rh | head -10
Limpeza de logs antigos com journald (systemd):
journalctl --disk-usage
journalctl --vacuum-time=7d
Vacuuming done, freed 2.3G of archived journals from /var/log/journal/.
Limpeza de logs rotativos em /var/log:
Atenção: os comandos abaixo removem arquivos de log compactados. Certifique-se de que não precisa deles para auditoria antes de executar.
find /var/log -name "*.gz" -type f -delete
find /var/log -name "*.1" -type f -delete
Limpeza de cache do APT (Debian/Ubuntu):
apt-get clean
apt-get autoremove --purge -y
Limpeza de cache do DNF (Rocky Linux / AlmaLinux):
dnf clean all
Remoção de kernels antigos no Debian 12:
dpkg --list | grep linux-image
apt-get purge linux-image-5.10.0-XX-amd64
Após a limpeza, verifique novamente com df -h para confirmar que há espaço suficiente antes de prosseguir com a migração.
Como liberar inodes esgotados no Linux
O esgotamento de inodes é a causa mais traiçoeira do erro No space left on device porque o df -h mostra espaço disponível e o administrador fica confuso. A solução passa por identificar e remover diretórios com excesso de arquivos pequenos.
Localize os diretórios com maior número de arquivos:
find / -xdev -printf "%h\n" | sort | uniq -c | sort -rn | head -20
48291 /var/spool/postfix/maildrop
31042 /tmp
18773 /var/cache/php/sessions
9821 /home/user/.cache
...
Os suspeitos mais comuns em servidores de hospedagem são:
- /var/spool/postfix/maildrop — fila de e-mails presos ou spam acumulado
- /tmp e /var/tmp — arquivos temporários de sessões PHP e uploads abandonados
- /var/cache/php/sessions — sessões PHP expiradas não limpas automaticamente
- /home/*/public_html/wp-content/cache — cache de plugins WordPress
- /var/log — logs fragmentados em muitos arquivos pequenos
Limpeza de arquivos temporários com mais de 7 dias:
Atenção: verifique o conteúdo do diretório antes de executar o comando abaixo em produção.
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +7 -delete
Limpeza de sessões PHP expiradas:
find /var/cache/php/sessions -type f -atime +1 -delete
Limpeza da fila do Postfix:
postsuper -d ALL deferred
Após a limpeza, confirme a liberação de inodes:
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 1204331 2072469 37% /
Como migrar arquivos no Linux com rsync sem travar o servidor
Com espaço e inodes liberados, é hora de executar a migração de forma segura. O rsync é a ferramenta padrão para transferência de arquivos entre servidores Linux por ser incremental, verificar integridade e suportar retomada de transferências interrompidas.
Para uma migração local (entre discos ou partições no mesmo servidor):
rsync -avz --partial --progress /origem/ /destino/
Para migração remota entre servidores, limitando o uso de banda a 50 MB/s para não sobrecarregar o servidor de origem:
rsync -avz --bwlimit=50000 --partial --progress \
/var/www/html/ usuario@servidor-destino:/var/www/html/
Explicação das opções mais importantes:
- -a — modo arquivo: preserva permissões, timestamps, links simbólicos e donos
- -v — verbose: exibe os arquivos sendo transferidos
- -z — comprime os dados durante a transferência (útil para redes lentas)
- --partial — mantém arquivos parcialmente transferidos para retomada
- --bwlimit=50000 — limita a banda em KB/s (50000 = ~50 MB/s)
- --progress — exibe progresso em tempo real
Estratégia de migração sem parar os serviços:
- Execute uma primeira sincronização completa com os serviços rodando
- Execute uma segunda passagem para capturar arquivos alterados durante a primeira
- Coloque o serviço em modo de manutenção brevemente
- Execute a sincronização final com
--checksumpara garantir integridade - Redirecione o tráfego para o novo servidor e valide
rsync -avz --partial --delete /var/www/html/ /mnt/novo-disco/var/www/html/
Atenção: a opção --delete remove do destino arquivos que não existem mais na origem. Use apenas quando quiser que destino e origem fiquem idênticos.
Para verificar a integridade após a migração, compare o número de arquivos e o espaço total:
find /origem -type f | wc -l
find /destino -type f | wc -l
du -sh /origem/
du -sh /destino/
Se os valores coincidirem, a migração foi bem-sucedida. Para uma verificação mais rigorosa, consulte as Dicas de Otimização de Servidores Linux para garantir que o novo ambiente esteja configurado corretamente.
Como expandir o sistema de arquivos após adicionar disco no Linux
Em alguns cenários, a solução definitiva para o erro de espaço insuficiente é adicionar um novo disco ao servidor e expandir o sistema de arquivos. Em VPS com LVM (Logical Volume Manager), isso pode ser feito sem reinicialização.
Verifique se o servidor usa LVM:
lvdisplay
vgdisplay
Se houver espaço livre no Volume Group, expanda o Logical Volume e o sistema de arquivos:
lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 8
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 15728640 (4k) blocks long.
Para sistemas de arquivos XFS (padrão no Rocky Linux 9 e AlmaLinux 9), use xfs_growfs em vez de resize2fs:
xfs_growfs /
Confirme a expansão:
df -h /
Problemas comuns e como resolver
Sintoma: rsync retorna 'No space left on device' mesmo após limpeza
Causa: a limpeza foi feita na partição errada. O rsync pode estar gravando em /tmp ou em uma partição separada de /var que ainda está cheia, enquanto o destino final tem espaço.
Solução: execute df -h e verifique todas as partições montadas, não apenas a raiz. Limpe especificamente a partição que está cheia. Use TMPDIR=/mnt/novo-disco/tmp rsync ... para redirecionar os temporários do rsync para uma partição com espaço.
Sintoma: erro persiste após liberar inodes, mas df -i mostra inodes livres
Causa: o sistema de arquivos pode ter arquivos abertos por processos que já foram deletados. O espaço e os inodes só são liberados de fato quando o processo que mantém o arquivo aberto é encerrado.
Solução: identifique processos com arquivos deletados ainda abertos usando lsof | grep deleted. Reinicie os serviços correspondentes (Apache, Nginx, MySQL) para liberar os descritores de arquivo.
lsof | grep deleted | awk '{print $1, $2}' | sort -u
Sintoma: migração com rsync trava o servidor de origem
Causa: o rsync sem limitação de banda pode saturar o I/O do disco e a interface de rede, causando lentidão extrema em servidores com discos HDD ou redes compartilhadas.
Solução: use --bwlimit para limitar a banda e ionice para reduzir a prioridade de I/O do processo rsync:
ionice -c 3 rsync -avz --bwlimit=20000 --partial /origem/ /destino/
Sintoma: 'No space left on device' ao criar arquivo de 0 bytes
Causa: inodes esgotados. Mesmo arquivos vazios consomem um inode.
Solução: execute df -i para confirmar. Siga o procedimento de limpeza de inodes descrito na seção anterior. Se o problema for estrutural (servidor com muitas contas), considere reformatar a partição com um número maior de inodes usando mkfs.ext4 -N [numero] — mas isso exige backup completo e reformatação.
Perguntas frequentes sobre migração de arquivos no Linux
O erro 'No space left on device' sempre significa que o disco está cheio?
Não necessariamente. O erro pode ocorrer mesmo com espaço em disco disponível quando os inodes estão esgotados. Inodes são estruturas que armazenam metadados de arquivos; quando todos são consumidos, o sistema não consegue criar novos arquivos mesmo que haja blocos livres. Execute df -h para verificar espaço e df -i para verificar inodes — ambos os comandos são necessários para um diagnóstico completo.
Como verificar qual diretório está consumindo mais espaço no Linux?
Execute du -sh /* 2>/dev/null | sort -rh | head -20 para listar os diretórios que mais consomem espaço na raiz. Para análise mais detalhada dentro de um diretório específico, use du -sh /var/* | sort -rh. Isso permite identificar rapidamente onde o espaço está sendo desperdiçado antes de iniciar a migração, evitando que o erro se repita.
Como migrar arquivos grandes no Linux sem travar o servidor?
Use rsync com as opções --bwlimit para limitar a banda e --partial para retomar transferências interrompidas. O comando rsync -avz --bwlimit=50000 --partial origem/ destino/ transfere arquivos limitando o uso de banda a aproximadamente 50 MB/s, evitando sobrecarga no servidor de origem durante a migração. Combine com ionice -c 3 para reduzir também a pressão sobre o disco.
É possível migrar arquivos para outro disco sem parar os serviços?
Sim, usando rsync em modo incremental é possível sincronizar arquivos enquanto os serviços continuam rodando. A estratégia recomendada é executar uma primeira sincronização completa, depois uma segunda passagem para capturar alterações feitas durante a primeira, e só então redirecionar o tráfego e parar os serviços brevemente para a sincronização final. Essa abordagem minimiza o tempo de indisponibilidade para segundos ou poucos minutos.
Como liberar inodes rapidamente no Linux?
Identifique diretórios com muitos arquivos pequenos usando find / -xdev -printf "%h\n" | sort | uniq -c | sort -rn | head -20. Sessões de email, caches de aplicação e diretórios temporários como /tmp e /var/tmp costumam acumular milhares de arquivos pequenos. Remova arquivos desnecessários com find /tmp -type f -atime +7 -delete para liberar inodes de forma segura e imediata.
Conclusão
- Diagnostique antes de agir: execute sempre
df -hedf -ijuntos — o erro pode ser de espaço em blocos ou de inodes esgotados, e cada causa tem solução diferente. - Use rsync com segurança: as opções
--partial,--bwlimite--checksumgarantem migrações retomáveis, sem sobrecarga e com verificação de integridade. - Faça limpeza preventiva: logs, caches, sessões PHP e filas de e-mail acumulam arquivos silenciosamente — agende limpezas periódicas com
cronpara evitar que o erro volte a ocorrer em produção.
Leia também
- Backup Incremental e Completo no Linux: Guia 2026
- Checklist para Migração de Banco de Dados MySQL: diagnóstico e prevenção de erros
- Diagnóstico e Resolução de Gargalos de Desempenho em Servidores Linux
Precisa de ajuda com migração de arquivos no Linux?
Migrar dados entre discos ou servidores sem interrupção de serviço exige planejamento e as ferramentas certas. Na AviraHost, os planos de VPS Linux incluem suporte técnico especializado para auxiliar em migrações, expansão de disco e otimização de armazenamento.