staging.inyokaproject.org

Abweichende Verzeichnisgrößen nach rsync-Kopie

Status: Ungelöst | Ubuntu-Version: Server 10.04 (Lucid Lynx)
Antworten |

illCP

Anmeldungsdatum:
26. Oktober 2010

Beiträge: Zähle...

Hallo zusammen,

ich entwickele momentan diverse Skripts für eine Backup-Lösung basierend auf einem 10.04.4 Server. Der Server fährt nachts automatisch hoch, bindet diverse Freigaben eines Windows 2003 SBS per CIFS ein und sichert diese mit rsnapshot.

Der nächste Schritt sind nun semi-automatische "Backups vom Backup" für weitere Redundanz und räumliche Trennung: Wird eine externe Festplatte per USB an den Server gesteckt, wird ein per udev-Regel angestoßenes Shellscript gestartet und synchronisiert daily.0 (den aktuellen rsnapshot-Datenbestand) per rsync mit der externen Platte:

rsync -vrtl --delete /pfad/zur/sicherung/daily.0/ /media/externe_platte_1/backup

Anschließend erstellt das Skript per

du -b -a /entsprechendes/verzeichnis | sed -f /logverzeichnis/backup_sed_list.sed | sort -g > /logverzeichnis/entsprechendes_logfile.txt

jeweils für den internen als auch den externen (soeben synchronisierten) Datenbestand eine Liste der Dateigrößen, entfernt dabei die überflüssigen/abweichenden Verzeichnisse/Pfade (z.B. die Abweichung zwischen "/home/user/backup/daily.0" und "/media/externe_platte/backup") per sed (mit zuvor generierter Regel-Datei) und sortiert das Ganze. Anschließend wird ein diff dieser beiden Listen erstellt.

Das Dateisystem ist sowohl intern als auch extern ext4, somit würde ich hier erwarten, dass beide Listen identisch sind.

Genau hier ergibt sich allerdings eine Abweichung bei der ich mir nicht sicher bin, ob das ein Problem ist bzw. wieso dies auftritt:

Der Datenbestand umfasst momentan insgesamt 387.126 Dateien in 11.277 Verzeichnissen. Die Größen sämtlicher Dateien sind identisch, die Größe von momentan insgesamt 100 Verzeichnissen unterscheiden sich soweit ich das sehe immer um 4.096 Byte oder ein Vielfaches davon. Ein Muster der betroffenen Verzeichnisse ist für mich hier nicht erkennbar.

ls -la ergibt in einem dieser Fälle z.B. folgendes:

Lokal:

insgesamt 48
dr-xr-xr-x  7 root root  4096 2010-11-28 17:54 .
drwxr-xr-x 12 root root  4096 2012-02-21 17:27 ..
dr-xr-xr-x  4 root root  4096 2010-07-08 18:02 apache_docroot
dr-xr-xr-x  3 root root  4096 2009-08-08 15:47 egroupware_files
dr-xr-xr-x  7 root root  4096 2009-12-16 15:34 ftp
dr-xr-xr-x  2 root root 24576 2012-02-24 23:40 mysql_dumps
dr-xr-xr-x  4 root root  4096 2009-09-06 17:51 svn_repositories

Extern:

insgesamt 52
dr-xr-xr-x  7 root root  4096 2010-11-28 17:54 .
drwxr-xr-x 12 root root  4096 2012-02-21 17:27 ..
dr-xr-xr-x  4 root root  4096 2010-07-08 18:02 apache_docroot
dr-xr-xr-x  3 root root  4096 2009-08-08 15:47 egroupware_files
dr-xr-xr-x  7 root root  4096 2009-12-16 15:34 ftp
dr-xr-xr-x  2 root root 28672 2012-02-24 23:40 mysql_dumps
dr-xr-xr-x  4 root root  4096 2009-09-06 17:51 svn_repositories

(PS: Was ich noch nicht herausfinden konnte: Was zählt "insgesamt"?)

Das Verzeichnis "mysql_dumps" ist auf der externen Platte also 4.096 Byte größer als im lokalen Dateisystem - die Dateien in diesem Verzeichnis haben absolut identische Größen, abgesehen von "." darin, die als Hardlink auf das eigene Verzeichnis wiederum die entsprechenden 4.096 Byte größer ist.

rsync scheint sich daran übrigens nicht zu stören: Führt man es mehrmals nacheinander aus, werden die Verzeichnisgrößen offenbar ignoriert - die Daten werden nicht nochmals kopiert.

Worauf bezieht sich diese "Verzeichnisgröße" überhaupt genau? Und wieso weicht Sie bei einer Kopie von ext4 auf ext4 manchmal ab? Das kann doch nur irgendetwas mit Inodes/Blockgrößen/überlappenden Blöcken/Sektoren etc. zu tun haben?

Gruß

Christian

/EDIT:

Ein paar Infos habe ich mittlerweile noch ergoogeln können:

Die Verzeichnisgröße ist in der Regel (ext2/3/4) initial ein Block = 4K = 4.096 Byte und wird ggf. erweitert/vergrößert, falls mehr Platz zur Speicherung von Informationen zu den sich darin befindlichen Dateien (Anzahl, Namen) benötigt wird. Weiterhin wird dieser allozierte Speicherplatz niemals kleiner, d.h. wenn ein Verzeichnis zu einem Zeitpunkt z.B. einige tausend Dateien mit langen Dateinamen enthielt und man diese später wieder löscht, behält das Verzeichnis trotzdem die vorher benötigten 4K-Blöcke reserviert. Nur beim Löschen und neu Anlegen eines Verzeichnisses wird wieder die initiale Größe von in der Regel 4K verwendet.

Gesetzt folgenden Fall:

Ein lokales Verzeichnis wird angelegt und 100.000 Dateien mit langen Dateinamen hineinkopiert. Dieses Verzeichnis (bzw. der benötigte Speicherplatz für die Informationen zum Inhalt) ist anstatt initial 4.096 Bytes nun 16.384 Bytes (4 x 4K-Blöcke, nehmen wir jetzt einfach mal so an) groß. Nun werden 99.999 Dateien in diesem Verzeichnis gelöscht - die Verzeichnisgröße bleibt 16K. Anschließend wird dieses Verzeichnis von A nach B kopiert.

Hier würde es Sinn machen, dass die Verzeichnisgröße in B wieder nur die initialen 4K beträgt, da das Verzeichnis neu angelegt wird und nur eine einzige Datei enthält, für deren Informationen ein Block locker ausreicht.

Bei mir ist es allerdings andersherum: Die Verzeichnisse werden größer...

illCP

(Themenstarter)

Anmeldungsdatum:
26. Oktober 2010

Beiträge: Zähle...

*bump*

user@machine:~$ mkdir testverzeichnis

Initiale Größe von "testverzeichnis": 4.096 Byte.

Nun kopiere ich dort einige hundert E-Mails mit ellenlangen Namen hinein: Die Verzeichnisgröße steigt auf 29 Blöcke (118.784 Byte) an.

Nun lösche ich alle bis auf eine oder zwei Dateien in "testverzeichnis" - die Größe von 29 Blöcken bleibt bestehen.

user@machine:~$ mkdir testverzeichnis2
user@machine:~$ cp -r testverzeichnis/ testverzeichnis2

"testverzeichnis2/testverzeichnis" hat wieder die initiale Größe von 4.096 Byte.

Lösche ich die Dateien in "testverzeichnis" nicht, bevor ich sie in "testverzeichnis2" kopiere, steigt die Größe von "testverzeichnis2/testverzeichnis" auf 163.840 Byte = 40 Blöcke an, ist also 11 Blöcke = 45.056 Byte größer.

Frage 1: Wieso?

Frage 2: Kann das jemand mit ext4 so reproduzieren, also ist das normal?

Gruß

Christian

Antworten |