Ich möchte die gesamte Dateisystemhierarchie von einem Laufwerk auf ein anderes kopieren. Der Inhalt jedes Verzeichnisses sowie die regulären Dateien auf der Linux-Plattform. Wäre dankbar, zu wissen, wie man das am besten mit möglicherweise in Linux eingebauten Funktionen macht. Das Dateisystem ist eine ext-Familie.
linux
filesystems
Jongleur
quelle
quelle
dd
?dd if=/dev/sda1 of=/dev/sdb1 bs=4096
conv=notrunc,noerror,sync
.dd
zwei Gründen: Erstens ist es eine schlechte Idee, eine Kopie eines Dateisystems auf Blockebene durchzuführen, das gemountet ist (was der Fall ist/
), und zweitensdd
werden keine Daten von Quellen kopiert, die innerhalb des Dateisystems wie/boot
und gemountet sind/home
.Antworten:
Ich benutze oft
Vorausgesetzt, / mnt ist der neue Datenträger auf / mnt und es gibt keine anderen Mounts auf /.
das -x hält es auf dem einen Dateisystem.
Dies muss natürlich als root oder mit sudo erfolgen.
Dieser Link enthält einige Alternativen, einschließlich der oben genannten
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
quelle
/
, ohne das heißt/dev
,/sys
,/proc
etc. Daher vor der Ausgabe , dasscp
ich für eine bessere Ansätze empfehlen die Suche (auch rsync)-x
Flags bedeutet, dass die von Ihnen erwähnten synthetischen Dateisysteme nicht kopiert werden.Was Sie wollen, ist Rsync .
Mit diesem Befehl können Sie einen Ordner synchronisieren und den Kopiervorgang fortsetzen, wenn er zur Hälfte abgebrochen wurde. Der Befehl zum Kopieren einer Festplatte lautet:
Die Optionen sind:
Um die Kopiergeschwindigkeit zu verbessern, fügen Sie
-W
(--whole-file
) hinzu, um die Berechnung von Deltas / Diffs der Dateien zu vermeiden. Dies ist die Standardeinstellung, wenn sowohl die Quelle als auch das Ziel als lokale Pfade angegeben werden, da der eigentliche Vorteil des Delta-Transfer-Algorithmus von rsync darin besteht, die Netzwerknutzung zu reduzieren.--numeric-ids
Erwägen Sie auch das Hinzufügen , um das Zuordnen von UID- / GID-Werten nach Benutzer- / Gruppennamen zu vermeiden.quelle
rsync -avxHAWX --numeric-ids --progress / mnt/
aber ich hätte es tun sollenrsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out
. Ich vermute, das Eingießen der Ausgabe in das Terminal hat den Prozess verlangsamt. : D--info=progress2
anstatt--progress
ist nützlich für große Übertragungen, da es den Gesamtfortschritt anzeigt, anstatt (Millionen von Zeilen für) einzelne Dateien.X
undA
mit ersetzenE
, da erweiterte Attribute und ACLs vonE
auf meinem Mac abgedeckt werden . Getestet:rsync version 2.6.9 protocol version 29
> ~/rsync.out
,2> ~/rsync.err
speichert alle Fehler in einer separaten Datei./
, beachten Sie, dass ein abschließender Schrägstrich (oder nicht) im Quellverzeichnis einen Unterschied macht:rsync source/ dest/
kopiert alles , was sichsource/
darin befindetdest/
, währendrsync source dest/
der Ordnersource
und alles, was sich darin befindet , kopiert werdendest/
.Die Antwort von Michael Aaron Safyan berücksichtigt keine spärlichen Dateien.
-S
Option behebt das.Auch diese Variante spamt nicht mit jeder Datei und führt keine Delta-Synchronisierung durch, was die Leistung in Fällen, in denen kein Netzwerk vorhanden ist, beeinträchtigt.
Perfekt zum Kopieren des Dateisystems von einem lokalen Laufwerk auf ein anderes lokales Laufwerk.
quelle
55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Für eine One - Shot lokale Kopie von einem Laufwerk auf ein anderes, ich denke , cp von Wolfmann , wie hier oben reicht.
Für größere Arbeiten wie beispielsweise lokale oder Remote-Backups ist rsync am besten geeignet .
Natürlich ist die Verwendung von rsync wesentlich komplexer.
Warum rsync:
Auf diese Weise können Sie alle oder einen Teil Ihres Laufwerks A auf Laufwerk B kopieren (synchronisieren). Sie haben viele Optionen, z. B. das Ausschließen einiger Verzeichnisse aus der Kopie (z. B. / proc).
Ein weiterer großer Vorteil ist, dass dieses native Tool die Dateiübertragung überwacht: Bei umfangreichen Übertragungen wird die Verbindung vom Haltepunkt aus fortgesetzt, wenn die Verbindung unterbrochen wird.
Und last but not least verwendet rsync die ssh-Verbindung, sodass Sie remote synchronisierte gesicherte "Kopien" erhalten. Schauen Sie sich die Manpage sowie hier einige Beispiele an .
quelle
Wie Michael Safyan oben vorschlägt, habe ich
rsync
für diesen Zweck verwendet. Ich schlage vor, einige zusätzliche Optionen zu verwenden, um Verzeichnisse auszuschließen, die Sie wahrscheinlich nicht kopieren möchten.Diese Version ist ziemlich spezifisch für Gnome- und Debian / Ubuntu-basierte Systeme, da sie Unterverzeichnisse der für Gnome spezifischen Benutzerverzeichnisse sowie den APT-Paket-Cache enthält.
In der letzten Zeile werden alle Verzeichnisse mit dem Namen cache / Cache / .cache ausgeschlossen, die für einige Verwendungszwecke möglicherweise zu aggressiv sind:
quelle
Hinzufügen von zwei nützlichen Bits zum Thread-Re-Sync: Ändern der Verschlüsselung und Verwenden von
--update
:Laut Wolfmans Beitrag
cp -ax
ist er elegant und cool für lokale Sachen.Allerdings
rsync
ist auch genial. Im Anschluss an Michaels Antwort Re-W
, der CYPHER Veränderung kann auch die Dinge beschleunigen (lesen obwohl auf alle Auswirkungen auf die Sicherheit nach oben).Es gibt einige Diskussionen (und Benchmarks) darüber, dass eine langsame CPU der eigentliche Engpass ist, aber es scheint mir zu helfen, wenn die Maschine geladen ist und gleichzeitig andere Dinge erledigt.
Einer der anderen Hauptgründe für die Verwendung von rsync in einer großen, rekursiven Kopie wie dieser ist der Schalter -u (oder --update ). Wenn es während des Kopierens ein Problem gibt, können Sie es beheben, und rsync wird dort weitermachen, wo es aufgehört hat (ich glaube nicht, dass scp dies hat). Wenn Sie es lokal machen, hat cp auch einen -u-Schalter.
(Ich bin mir nicht sicher, welche Auswirkungen --update und --whole-file zusammen haben, aber sie scheinen bei dieser Art von Aufgabe immer sinnvoll zu funktionieren.)
Mir ist klar, dass dies kein Thread über die Funktionen von rsync ist, aber einige der häufigsten, die ich dafür verwende, sind:
Übrigens, wenn ich jemals Windows verwenden muss, verwende ich rsync von cygwin, um große rekursive Kopien zu erstellen, da der Explorer nicht mehr von vorne anfangen möchte (obwohl Finder OS X für mich noch schlimmer ist).
quelle
rsync
Von:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
Manpage hier
quelle
Wie in den Kommentaren von juniorRubyist erwähnt, sollte hier der bevorzugte Ansatz verwendet werden
dd
. Der Hauptgrund ist die Leistung, es ist eine Block-für-Block-Kopie anstelle von Datei-für-Datei.Eine Partition klonen
Klonen einer gesamten Festplatte
Verweise
quelle
dd
/
Dies ist aus zwei Gründen eine sehr schlechte Idee: Erstens führt das Kopieren eines bereitgestellten Dateisystems auf Blockebene (was der Fall ist ) höchstwahrscheinlich zu Fehlern im Zieldateisystem und zweitensdd
werden keine Daten aus bereitgestellten Quellen kopiert das Dateisystem wie/boot
und/home
. Ihr Link ist gültig für das Klonen von Datenträgern, nicht für das Klonen von "Dateihierarchien"'dd' ist großartig, aber ddrescue (apt install gddrescue) ist noch besser. Wenn dd unterbrochen wird, gibt es keine Möglichkeit zum Neustart (ein weiterer guter Grund, rsync zu verwenden). Wenn Sie ddrescue mit einer Protokolldatei verwenden, wird protokolliert, welche Blöcke kopiert wurden.
Beim Sichern eines Dual-Boot-Windows / Linux-Systems verwende ich ntfsclone für die Windows-Partitionen und ddrescue für die Linux-Partition und dd für den MBR. (Ich habe nicht versucht, ein Dual-Boot-System mit GPT / UEFI zu sichern.)
Was ich gerne sehen würde, ist ein ddrescue-Tool, das Dateien wie ntfsclone erstellen kann, in denen nicht zugewiesener Speicherplatz mit Steuerzeichen markiert ist. Dadurch kann das Image nicht direkt eingehängt werden, sondern ist nur so groß wie die enthaltenen Daten.
Jemand, bitte überlegen Sie sich das "spezielle Bildformat" von ntfsclone für ddrescue ...
quelle
rsync
ist die perfekte Lösung wie oben erklärt.Ich würde nur hinzufügen,
-S
um " mit spärlichen Dateien effizient umzugehen", falls es ein Docker-Devicemapper-Volume oder ähnliches gibt, das kopiert werden soll.quelle
Ich habe die hier vorgeschlagenen rsync-Befehle ausprobiert, aber schließlich habe ich mit viel saubereren und schnelleren Ergebnissen
partclone
. Hängen Sie die Quell- und Zielpartitionen aus und führen Sie dann Folgendes aus:Dies führt die folgenden Schritte aus:
Das Obige funktioniert, wenn die Zielpartition dieselbe Größe oder größer als die Quellpartition hat. Wenn Ihr Ziel kleiner als die Quelle ist (aber für alle Daten geeignet ist), gehen Sie wie folgt vor:
resize2fs -M
verkleinert das Dateisystem auf die minimale Größe, bevor die Daten geklont werden.Beachten Sie, dass
partclone
auf den meisten Systemen nicht standardmäßig installiert ist. Verwenden Sie eine Live-Distribution wie clonezilla oder installieren Sie partclone von Ihrem Distributionspaket-Manager (apt-get install partclone
auf Debian-basierten Systemen).quelle