Come appare il messaggio
cp: cannot create regular file '/var/www/nextcloud/data/upload.tmp': No space left on deviceCause frequenti
- Inode esauriti da milioni di file piccoli (sessioni PHP, cache, coda di posta, Maildir).
- File cancellati ma ancora aperti (ad esempio log) continuano a occupare spazio finché il processo non li chiude.
- Blocchi riservati a root (5% di default su ext4): gli utenti normali vedono già il disco pieno.
- È pieno un altro filesystem, ad esempio
/tmpsu tmpfs o un volume Docker. - Quota utente o di gruppo raggiunta.
Verifica
- Spazio per filesystem
df -h - Uso degli inode per filesystem
df -i - Trova file cancellati ancora aperti
sudo lsof +L1 - Trova le directory con più file
sudo du --inodes -x /var 2>/dev/null | sort -n | tail -n 15 - Mostra i blocchi riservati (ext4)
sudo tune2fs -l /dev/sda1 | grep -i 'reserved block count'
Soluzione
- Cancella in modo mirato le masse di file piccoli, ad esempio le sessioni vecchie:
find /var/lib/php/sessions -type f -mmin +1440 -delete. - Riavvia il processo che tiene aperto il file cancellato, oppure svuotalo con
: > /proc/<PID>/fd/<FD>. - Configura bene logrotate (
postrotatecon reload ocopytruncate) così i log aperti non vengono cancellati. - Sui dischi solo dati riduci la riserva:
tune2fs -m 1 /dev/sdb1. - Automatizza la pulizia con cron e monitora l'uso degli inode.
Domande frequenti
Posso aumentare il numero di inode dopo?
Su ext4 no, serve riformattare. XFS e Btrfs allocano gli inode dinamicamente. A lungo termine va eliminata la causa di tutti quei file piccoli.
Perché cancellando il log enorme lo spazio non torna?
Il processo ha ancora il file aperto. Il kernel libera lo spazio solo dopo il riavvio o il reload del servizio; lsof +L1 mostra questi casi.