Gibt es einen anderen Grund für "kein Platz mehr auf dem Gerät"?

12

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.

dummzeuch
quelle

Antworten:

4

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.

dummzeuch
quelle
4

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:

  1. " Reservierter Speicherplatz für root auf einem Dateisystem - warum? "
  2. Msgstr " Angemessene Größe für" vom Dateisystem reservierte Blöcke "für Nicht - Betriebssystem - Festplatten? "

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.

Vlad GURDIGA
quelle
2
Die vorletzte dfAusgabespalte gibt den Prozentsatz der verwendeten Inodes an, sodass 2% der Inodes verwendet werden und 98% übrig bleiben.
Deve
3

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:

tune2fs -E "hash_alg=tea" /dev/blockdev_name

oder um die Verzeichnisindizierung für dieses Blockgerät vollständig zu deaktivieren (kann die Leistung beeinträchtigen)

tune2fs -O ^dir_index /dev/blockdev_name

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.

VaLentin ChernoZemski
quelle
1

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?

Rafiq Maniar
quelle
Die Verzeichnisse sind nicht so groß. Seed-Änderungen.
Dummzeuch
1
Ihre Änderungen zeigen nicht die tatsächliche Größe der Verzeichnisse. Versuchen Sie Folgendes: find /mnt/backupsys/shd -type d -exec ls -ld {} \;um die tatsächliche Größe der Verzeichnisse zu ermitteln.
Jenny D
1

Erhöhen Sie Ihr Inotify-Beobachterlimit in sysctl:

fs.inotify.max_user_watches = 100000 

Und starte neu, oder mache die sysctl -wVersion 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.

Sirex
quelle
Du hättest vielleicht recht gehabt. Leider hatte ich den Computer wegen eines Kernel-Updates bereits neu gestartet, bevor ich Ihren Vorschlag gelesen habe. Danach habe ich das Backup gestartet und es läuft immer noch gut. Ich werde sehen, ob es fertig ist und was mit dem nächsten geplanten passiert.
Dummzeuch
Dies behebt ein Problem, das ich gesehen habe: Ich habe Dropbox und alles andere, das von Inotify gesteuert wird, schlägt mit der Meldung "Kein Platz mehr auf dem Gerät" fehl.
Steve
0

Ich würde Ihnen vorschlagen, nach ein paar anderen Dingen zu suchen:

  1. Überprüfen Sie, ob Ihr temporäres Verzeichnis nicht voll wird. Manchmal wird es für die Zwischenlagerung verwendet und es wird leicht voll.
  2. Überprüfen Sie, ob es einen Prozess gibt, der noch einen Deskriptor für eine gelöschte Datei enthält. Die Wahrscheinlichkeit ist geringer, da df die richtige Größe angibt, es aber trotzdem nicht schadet.
Aditya Patawari
quelle
Überprüft / tmp und / var / tmp. Siehe Bearbeitungen.
Dummzeuch
Sehen Sie sich auch das Kontingent (Benutzerlimits) an. Nicht sicher, warum Sie rsync für eine lokale Sicherung verwenden. : ~ /
Dennis
0

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:

rsync: rsync_xal_set: lsetxattr(""/my/file/path"","example.xattr.attribute") failed: No space left on device (28)

In diesem Fall:

   ENOSPC - There is insufficient space remaining to store the extended attribute.

man 7 xattr erklärt:

   In the current ext2, ext3, and ext4 filesystem implementations, the total bytes used by the names and values of all of a file's extended attributes
   must fit in a single filesystem block (1024, 2048 or 4096 bytes, depending on the block size specified when the filesystem was created).

In meinem Fall bedeutet dies, dass ich das gesamte Dateisystem neu formatieren muss. :-(

João Carlos Mendes Luís
quelle