So sieht die Meldung aus
cp: cannot create regular file '/var/www/nextcloud/data/upload.tmp': No space left on deviceHäufige Ursachen
- Alle Inodes verbraucht durch Millionen kleiner Dateien (PHP-Sessions, Cache, Mail-Queue, Maildir).
- Gelöschte, aber noch geöffnete Dateien (z. B. Logs) belegen weiter Platz, bis der Prozess sie schließt.
- Für root reservierte Blöcke (standardmäßig 5 % bei ext4): Normale Benutzer sehen die Platte schon als voll.
- Ein anderes Dateisystem ist voll, etwa
/tmpals tmpfs oder ein Docker-Volume. - Benutzer- oder Gruppenquota erreicht.
Prüfen
- Speicherplatz pro Dateisystem
df -h - Inode-Belegung pro Dateisystem
df -i - Gelöschte, aber noch offene Dateien finden
sudo lsof +L1 - Verzeichnisse mit den meisten Dateien finden
sudo du --inodes -x /var 2>/dev/null | sort -n | tail -n 15 - Reservierte Blöcke anzeigen (ext4)
sudo tune2fs -l /dev/sda1 | grep -i 'reserved block count'
Lösung
- Massen kleiner Dateien gezielt löschen, z. B. alte Sessions:
find /var/lib/php/sessions -type f -mmin +1440 -delete. - Prozess mit gelöschter offener Datei neu starten oder die Datei über
: > /proc/<PID>/fd/<FD>leeren. - Logrotate korrekt konfigurieren (
postrotatemit Reload odercopytruncate), damit Logs nicht offen gelöscht werden. - Bei reinen Datenplatten Reservierung senken:
tune2fs -m 1 /dev/sdb1. - Aufräumen per Cron automatisieren und Inodes im Monitoring überwachen.
Häufige Fragen
Kann ich die Inode-Anzahl nachträglich erhöhen?
Bei ext4 nicht ohne Neuformatierung. XFS und Btrfs vergeben Inodes dynamisch. Langfristig hilft nur, die Ursache der vielen Kleindateien zu beseitigen.
Warum wird kein Platz frei, nachdem ich die große Logdatei gelöscht habe?
Der Prozess hält die Datei noch offen. Erst nach Neustart oder Reload des Dienstes gibt der Kernel den Platz frei – lsof +L1 zeigt diese Fälle.