Ich habe drei Kopien desselben Ordners, aber die Größen sind unterschiedlich. Warum?
Ich habe einen Ordner „Dokumente“, den ich von einem verschlüsselten LVM auf der Festplatte meines Desktops auf eine verschlüsselte Luks-Partition auf einem externen Laufwerk kopiert habe. Anschließend habe ich diesen Ordner vom externen Laufwerk auf ein verschlüsseltes LVM auf der Festplatte meines Laptops kopiert.
Ich habe also drei Kopien desselben Ordners:
- Desktop
- Externes Laufwerk
- Laptop
Ich habe diff
zwischen Desktop- und externem Laufwerk gewechselt --> keine Unterschiede.
Ich habe es diff
zwischen Laptop und externem Laufwerk versucht --> keine Unterschiede.
Allerdings habe ich für die drei Fälle unterschiedliche Ordnergrößen.
Ich habe benutzt
du -bs --apparent-size Documents
um die Größen zu messen. Hier sind die Ergebnisse:
- Desktop-Computer: 1735750760
- Externes Laufwerk: 1735742568
- Laptop: 1735746664
Wir stellen also fest, dass es einen kleinen Unterschied zwischen den Größen gibt. Ein kleiner Unterschied, aber immerhin vorhanden. Ich habe mich gefragt, warum das so ist. Haben Sie eine Erklärung?
Antwort1
Möglicherweise ist Ihnen aufgefallen, dass die Unterschiede zwischen den verschiedenen Ordnern folgende sind:
Desktop: 1735750760
- 8192
External drive: 1735742568
+ 4096
Laptop: 1735746664
Solche Unterschiede von 4K-Blöcken resultieren meiner Erfahrung nach meist aus Änderungen der Verzeichnisgrößen. Vergleicht man die Größen der Verzeichnisse selbst (auf Ext-Dateisystemen meist Vielfache von 4K), findet man den Unterschied vielleicht.
(Beispielsweise werden Verzeichnisse manchmal kleiner, wenn sie bei einem Kopiervorgang umstrukturiert werden und gelöschte Einträge dabei wegfallen)
Um Verzeichnisse unterschiedlicher Größe zu finden, müssen Sie die Verzeichnisse miteinander vergleichen. Das folgende Skript kann Ihnen dabei helfen:
#!/bin/bash
DIR1="${1%/}/"
DIR2="${2%/}/"
diff \
<(find $DIR1 -type d -printf "%k %p\n" | sed -e "s|$DIR1||" | sort -k2) \
<(find $DIR2 -type d -printf "%k %p\n" | sed -e "s|$DIR2||" | sort -k2)
Kopiere den Code in eine neue Datei (z.B. dircomp.sh) und mache ihn ausführbar chmod +x dircomp.sh
. Rufe ihn dann so auf ./dircomp.sh /home/lemenhir/ /media/lemenhir/ExternalDrive/
:
Die Ausgabe sollte nun nur noch Verzeichnisse mit unterschiedlichen Größen auflisten und könnte wie folgt aussehen:
< 4 Documents/Appartement/Bail
> 8 Documents/Appartement/Bail
wobei die mit beginnenden Zeilen <
die Verzeichnisse auflisten, die sich im als erster Parameter angegebenen Verzeichnis befinden (z. B. /home/lemenhir/), und die mit beginnenden Zeilen >
die Verzeichnisse auflisten, die sich im als zweiter Parameter angegebenen Verzeichnis befinden (z. B. /media/lemenhir/ExternalDrive/).
Wenn einzelne Zeilen erscheinen, dann existiert das Verzeichnis im gegenüberliegenden Verzeichnis nicht.
Hoffe das hilft.