Wie kann ein Dateisystem genau so kopiert werden, wie es ist?

10

Ich habe ein Dateisystem für ein Gerät, das ich programmiere und von dem ich eine exakte Kopie erstellen möchte. Idealerweise möchte ich, dass diese Kopie mit dem Ordner identisch ist, aus dem sie kopiert wurde. Ich habe versucht, dies zu nutzen cp -r cp -aund rsync -azvPzu erreichen. Jeder einzelne Ordner führt jedoch zu einem Ordner mit unterschiedlicher Größe (mit du -s), und obwohl mein Gerät nicht über den ursprünglichen Ordner verfügt, wird der von mir kopierte Ordner nicht ausgeführt.

  • Was wird ausgelassen, dass die von mir verwendeten Befehle nicht berücksichtigt werden?
  • Ist es möglich, beim Kopieren eines Dateisystems / Ordners alles identisch zu halten? Wenn ja, wie würde ich das machen?

PS Ich habe ähnliche Fragen zu StackOverflow gestellt, aber schnell festgestellt, dass ich sie beim falschen Austausch gestellt habe


Bearbeiten: Dies ist möglicherweise nicht hilfreich, aber unabhängig davon, welche Methode ich für das kopierte Verzeichnis verwende, führt der betreffende Computer immer zu Kernel Panic mit der folgenden Ausgabe.

VFS: Root-Fs können nicht über NFS bereitgestellt werden, wenn eine Diskette versucht wird. VFS: Root-Gerät "nfs" oder unbekannter Block (2,0) kann nicht geöffnet werden. Bitte fügen Sie eine korrekte Boot-Option "root =" hinzu. Hier sind die verfügbaren Partitionen: 1f00
64 mtdblock0 (Treiber?) 1f02 64 mtdblock2 (Treiber?) 1f04 2432 mtdblock4 (Treiber?) 1f05 128 mtdblock5 (Treiber?) 1f06 4352 mtdblock6 (Treiber?) 1f07 204928 mtdblock7 (Treiber?) 1f8 mtdblock8 (Treiber?) 0800
8388608 sda-Treiber: sd Kernel-Panik - nicht synchronisiert: VFS: Root-Fs können nicht auf unbekanntem Block gemountet werden (2,0)

TopGunCoder
quelle
5
Ein Unterschied in der duAusgabe ist kein Indikator dafür, dass der Inhalt nicht gleich ist.
Ignacio Vazquez-Abrams
Mein Gerät startet nicht mit dem kopierten Verzeichnis. Ich nehme das als Indikator und frage mich, was genau ich falsch mache, dass das kopierte Dateisystem nicht gleich behandelt wird
TopGunCoder
Sie müssen genau angeben, was Sie tun möchten. rsync -aoder cp -aexakte Kopien von Verzeichnissen erstellen, aber Sie versuchen, eine bootfähige Festplatte zu kopieren. Dazu müssen Sie noch einige weitere Schritte ausführen.
Forcefsck
1
Was für ein Gerät? Was für ein Dateisystem? Welche Art von Speichermedien?
Michas
1
Für mich klingt es so, als ob Sie so etwas wie dd if=/some/location of=/some/other/location bs=4Mdas Lesen und Schreiben von Daten verwenden möchten .

Antworten:

12

Ich verwende im Allgemeinen eine der folgenden Alternativen:

  • rsync -aHAX(füge v für Ausführlichkeit hinzu) stellt sicher, dass Sie beim Kopieren alle Linkstrukturen und x-attrs im Zielordner beibehalten. Vergessen Sie nicht, abedeutet Archivieren und bewahrt bereits Zeit, Eigentum und Berechtigungen.
  • Einfach tar cvf(nicht komprimieren, um Zeit zu sparen, nur tarieren) ist das, was ich verwende, wenn der erste nicht das erfüllt, was ich aus irgendeinem Grund brauche, und ich keine Zeit habe, aber ich versuche immer den ersten.

Um zu überprüfen, ob alles ordnungsgemäß funktioniert hat, können Sie es anschließend ausführen, diff -r <folder1> <folder2>wenn Sie möchten.

Bayindirh
quelle
1
Das hat es geschafft! Ich musste auch nur sicherstellen, dass das Gerät, das ich hochfuhr (über NFS), ausgeschaltet war und nicht auf das Dateisystem zugreifen konnte, während die Kopie lief.
TopGunCoder
1
Ah, NFS-Clients mit Lese- / Schreibzugriff können manchmal die Dinge aufpeppen!
Bayindirh
3
Dies wird nicht über spärliche Dateien ohne -S kopieren. Das kann ein Teil des du -sUnterschieds sein. Ich habe rsync -axXSAHalles kopiert. Das -x kopiert nur innerhalb des Dateisystems und nicht innerhalb eines anderen Dateisystems.
Victor Roetman
Was ist mit --numeric-ids?
0x2207
@ 0x2207 Dies ist nur nützlich, wenn ein Benutzer auf verschiedenen Systemen unterschiedliche numerische IDs hat (z. B. Benutzer hbayindir befindet sich auf beiden Systemen und hat UID 1000 an der Quelle und 1536 am Ziel). Ich musste diese Option nie verwenden, da ich den tatsächlichen Eigentümer beibehalten muss, nicht UID und GID. Wenn ein Benutzer weder Quelle noch Ziel anwesend ist, wird die numerische ID als Fallback verwendet.
Bayindirh
4

Wenn Sie Ihre Antwort in den Kommentaren lesen, scheint es, als würden Sie möglicherweise versuchen, den Stammordner zu kopieren ("Mein Gerät startet nicht mit dem kopierten Verzeichnis"). In diesem Fall sollten Sie verschiedene Dinge tun.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

Sobald Sie den Stammordner auf das neue System kopiert haben, müssen Sie grub aktualisieren, bevor es gestartet wird.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
Jeight
quelle
+1 Ich denke, der Hinweis befindet sich in der fehlgeschlagenen Startnachricht im OP und dies adressiert ihn.
Msw
Wie sich herausstellt, hat etwas sehr Ähnliches funktioniert. Ich hatte es mit einem Dateisystem (FS) auf meinem Computer zu tun, das ich kopieren musste. Alles was es brauchte war für mich bis tar cdahin tar x. Der Kicker war jedoch, sicherzustellen, dass mein Computer ausgeschaltet war, seit ich ihn mit dem FS gestartet habe, der lokal auf meinem Computer war, aber entfernt von dem Gerät, das ich gestartet habe (ich habe das Gerät über NFS
gestartet
grub-install: error: embedding is not possible, but this is required for cross-disk install.
Vitaly Zdanevich
2

Sie könnten FSArchiver versuchen . Es ist der Nachfolger des ähnlichen Teils, der jetzt nicht mehr gepflegt wird. Ich habe in der Vergangenheit sowohl partimage als auch FSArchiver verwendet und beide haben gut funktioniert. Soweit ich weiß, erstellen beide Kopien eines Dateisystems, das dem Original so nahe wie möglich kommt. Ich denke, FSArchiver ist ein bisschen mächtiger als Partimage. Zum Beispiel funktioniert es mit ext4, partimage nicht. Siehe die FSArchiver / partimage-Vergleichstabelle .

Faheem Mitha
quelle
2

Das duVergleichen von Ordnern ist von Natur aus problematisch. Wenn Sie 2 Verzeichnisse wirklich nur anhand ihrer Größe vergleichen möchten, verwenden Sie Folgendes du:

$ du -sh --apparent-size <dir>

Dieser Switch gibt die tatsächliche Größe des Verzeichnisses im Verhältnis zum Speicherplatz an, der beim Speichern auf dem physischen Laufwerksmedium belegt wird. Festplatten sind in Blöcken organisiert und Dateien werden in diese Blöcke geschrieben. Wenn eine Datei nur BLOCK + 1 Speicherplatz benötigt, belegt sie 2 BLOCKS Speicherplatz, und dies wird dunormalerweise gemeldet . Denken Sie daran, dass der Name des Tools die Festplattennutzung ist!

Angesichts der Tatsache, dass es sich um ein gesamtes Dateisystem handelt, würde ich gerne ddeine exakte Kopie der Partition erstellen , auf der sich das Verzeichnis befindet

$ dd if=/dev/sda1 of=/srv/boot.img

Sie können dies dann verwenden boot.img, um die Partition wiederherzustellen, wo immer Sie möchten.

$ dd if=/srv/boot.img of=/dev/sdb1
slm
quelle
du meldet auch die Größe auf der Festplatte (so dass spärliche Dateien und feste Links weniger Speicherplatz beanspruchen). Zum Beispiel du -sh /vargibt 21G, aber du -sh --apparent-size /vargibt 209G auf meinem System.
Victor Roetman
0

Es kommt ein bisschen darauf an, was du mit "identisch" meinst.

  • Nur zu tun rsyncwäre die meiste Zeit in Ordnung. Manchmal möchten Sie taralles in eine Datei packen und an der anderen Stelle extrahieren.
  • Wenn Sie einen Klon des gesamten Dateisystems wünschen, können Sie dddas gesamte Dateisystem selbst kopieren.

Wenn Sie Ihr Gerät debuggen möchten, versuchen Sie herauszufinden, was genau das Problem ist, warum es derzeit nicht ausgeführt wird.

michas
quelle