Ich verwende Dirvish auf einem Ubuntu-Serversystem, um eine Festplatte auf einem externen USB 3.0-Laufwerk zu sichern. Bis vor ein paar Tagen hat alles gut funktioniert, aber jetzt schlägt jede Sicherung fehl, und zwar mit "Kein Platz mehr auf Gerät (28)" und "Dateisystem voll". So einfach ist das leider nicht: Auf dem Gerät sind> 500 GB frei.
Einzelheiten:
rsync_error:
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename1>.eDJiD9": No space left on device (28)
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename2>.RHuUAJ": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename3>.9tVK8Z": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename4>.t3ARSV": No space left on device (28)
[... some more files ...]
rsync: connection unexpectedly closed (2712185 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
Das Protokoll sieht fast wie gewohnt aus, bis es trifft:
<SomeFilename1>
<SomeFilename2>
<SomeFilename3>
<SomeFilename4>
<PartOfAFilename>filesystem full
write error, filesystem probably full
broken pipe
RESULTS: warnings = 0, errors = 1
Wie bereits erwähnt, ist auf dem Gerät jedoch viel Speicherplatz vorhanden:
df -h
/dev/sdg1 2.7T 2.0T 623G 77% /mnt/backupsys/shd
und es gibt auch noch viele Inodes:
df -i
/dev/sdg1 183148544 2810146 180338398 2% /mnt/backupsys/shd
Das Gerät ist wie folgt montiert:
mount
/dev/sdg1 on /mnt/backupsys/shd type ext3 (rw)
Der Prozess läuft als root.
Ich wollte gerade sagen, dass ich nichts geändert habe, aber das stimmt nicht ganz: Ich habe für das Laufwerk, für das ich eine Sicherungskopie anfertige, eine Klimaanlage eingeschaltet:
/dev/md0 on /mnt/md0 type ext4 (rw,acl)
Könnte das das Problem sein? Wenn ja wie root hat weiterhin vollen Zugriff auf die Dateien.
BEARBEITEN:
Ich habe gerade die temporären Verzeichnisse überprüft:
- / tmp enthält nur einen leeren .webmin-Ordner
- / var / tmp ist leer
Das Dateisystem, in dem sich diese Verzeichnisse befinden, verfügt über ausreichend freien Speicherplatz und Inodes:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 289G 55G 220G 20% /
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 19202048 167644 19034404 1% /
EDIT2:
Die Verzeichnisse sind recht groß, aber nicht größer als 2 GB. Diejenige, bei der die Sicherung fehlschlägt, ist nicht einmal eine der größten. Sie enthält 7530 Dateien.
EDIT3:
Eine Information, die ich beim Posten dieser Frage nicht für relevant hielt:
Am Tag bevor die Backups fehlschlugen, hatte ich acls auf den gesicherten Dateisystemen aktiviert. Ich gehe jetzt davon aus, dass dies Dirvish (oder rsync) dazu veranlasst hat, anzunehmen, dass sich alle Dateien geändert haben, sodass die Liste der zu kopierenden und nicht fest verknüpften Dateien sehr groß war. Dies könnte möglicherweise bedeuten, dass einige Puffer zu klein sind.
Heute hat eine vollständige Sicherung auf eine leere Festplatte einwandfrei funktioniert. Ich werde als nächstes ein inkrementelles Backup versuchen. Dies zeigt, ob die Aktivierung von acls die Ursache für das Problem war.
quelle
Antworten:
Mein Verdacht (siehe EDIT3) war anscheinend richtig: Das Hinzufügen von acl-Unterstützung zum Dateisystem ließ rsync / dirvish glauben, dass sich alle Dateien geändert hatten. Anstatt ein inkrementelles Backup zu erstellen und nur feste Links zu den bereits vorhandenen Dateien zu erstellen, wurde versucht, ein vollständiges Backup zu erstellen, was natürlich fehlschlug, da die Festplatte nicht genügend Speicherplatz dafür hatte.
Die Fehlermeldung war also tatsächlich korrekt.
Nach dem erneuten Starten mit einer leeren Sicherungsdiskette funktionierten die inkrementellen Sicherungen wie zuvor.
quelle
Wenn ich mir die 2% der verbleibenden Inodes anschaue, denke ich über die Root-Reserven nach, die das EXT-Dateisystem bereitstellt. Vielleicht möchten Sie Folgendes überprüfen:
Ich würde versuchen, einige der älteren Backups mit .tar.gz zu versehen, in der Hoffnung, dass dies die Anzahl der verwendeten Inodes reduzieren würde.
quelle
df
Ausgabespalte gibt den Prozentsatz der verwendeten Inodes an, sodass 2% der Inodes verwendet werden und 98% übrig bleiben.Ich sehe, dass dummzeuch eine Lösung für sein Problem findet, aber es gibt tatsächlich einen weiteren Fall, in dem die Festplatte über genügend Inodes / freien Speicherplatz verfügt und beim Versuch, bestimmte Verzeichnisse zu übertragen, immer noch "kein Speicherplatz mehr auf dem Gerät" angezeigt wird.
Dies wird durch Hash - Kollisionen auf mit ext4 - Dateisystem formatierten Blockgeräten verursacht, bei denen die Verzeichnisindizierung ebenfalls aktiviert ist, insbesondere, wenn ein einzelnes Verzeichnis mehr als 100.000 Dateien enthält und der Name der Dateien aus demselben Algorithmus generiert wird (Cache - Dateien, MD5 - Summen - Dateinamen usw .)
Die Lösung besteht darin, es mit einem anderen Verzeichnisindexierungsalgorithmus zu versuchen:
oder um die Verzeichnisindizierung für dieses Blockgerät vollständig zu deaktivieren (kann die Leistung beeinträchtigen)
Eine andere Lösung besteht darin, herauszufinden, was das Verzeichnis mit solchen Dateien füllt, und die Software zu reparieren.
Eine mögliche Lösung besteht darin, den Inhalt eines Ordners mit einem großen Dateivolumen in mehrere separate Unterordner aufzuteilen.
Eine ausführliche Beschreibung des Problems gibt Axel Wagner hier
http://blog.merovius.de/2013/10/20/ext4-mysterious-no-space-left-on.html
Prost.
quelle
Es gibt eine Größenbeschränkung von 2 GB für das Verzeichnis selbst. Wenn Sie also so viele Dateien haben, dass die Verzeichnisgröße> 2 GB ist (NICHT die Größe der Dateien im Verzeichnis), liegt ein Problem vor. Allerdings sollte dies bei nur 2,8 Millionen verwendeten Inodes kein Problem sein. Geschieht normalerweise um 15M inodes.
Das kann also nicht viel helfen - aber probieren Sie ext4 auf Ihrem Backup-Gerät aus?
quelle
find /mnt/backupsys/shd -type d -exec ls -ld {} \;
um die tatsächliche Größe der Verzeichnisse zu ermitteln.Erhöhen Sie Ihr Inotify-Beobachterlimit in sysctl:
Und starte neu, oder mache die
sysctl -w
Version auch.Das wird es normalerweise tun. Etwas hat zu viele Dateien im Kernel geöffnet, und der Fehler ist völlig irreführend. Dropbox ist ein klassisches Beispiel dafür.
quelle
Ich würde Ihnen vorschlagen, nach ein paar anderen Dingen zu suchen:
quelle
Ich habe dieses Thema gerade gefunden, als ich nach einer Lösung für mein Problem gesucht habe.
In der Tat gibt es zumindest einen anderen Grund für ENOSPC. Und ich habe es auch mit rsync gemacht, während ich von einem ZFS-Dateisystem auf ein EXT4-Dateisystem kopiere:
In diesem Fall:
man 7 xattr
erklärt:In meinem Fall bedeutet dies, dass ich das gesamte Dateisystem neu formatieren muss. :-(
quelle