it-swarm.com.de

Kopieren Sie die gesamte Dateisystemhierarchie von einem Laufwerk auf ein anderes

Ich möchte die gesamte Dateisystemhierarchie von einem Laufwerk auf ein anderes kopieren. Wäre dankbar, zu wissen, wie man das am besten mit möglicherweise in Linux eingebauten Funktionen macht. Das Dateisystem ist eine ext-Familie.

87
Juggler

Ich benutze oft

> cp -ax / /mnt

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

32
WolfmanJM

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:

rsync -avxHAX --progress / /new-disk/

Die Optionen sind:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

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.

Erwägen Sie außerdem das Hinzufügen von --numeric-ids, um zu vermeiden, dass UID/GID-Werte nach Benutzer-/Gruppennamen zugeordnet werden.

180

Die Antwort von Michael Aaron Safyan berücksichtigt keine spärlichen Dateien. Die Option -S 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.

rsync -axHAWXS --numeric-ids --info=progress2
31
Ilia Sidorenko

Für eine einmalige lokale Kopie von einem Laufwerk auf ein anderes reicht meiner Meinung nach cp aus, wie oben von Wolfmann beschrieben.

Für größere Arbeiten wie zum Beispiel lokale oder Remote-Backups ist das Beste rsync .

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 Möglichkeiten, z. B. einige Verzeichnisse von der Kopie auszuschließen (z. B./proc ausschließen).

  • 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. Werfen Sie einen Blick auf die Manpage sowie hier einige Beispiele .

6
hornetbzz

Wie Michael Safyan oben vorschlägt, habe ich für diesen Zweck rsync 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 Paket-Cache APT enthält.

In der letzten Zeile wird any als cache/Cache/.cache bezeichnetes Verzeichnis ausgeschlossen, was für einige Verwendungszwecke zu aggressiv sein kann:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
3
Dan

rsync

"Dieser Ansatz wird als besser angesehen als das Klonen von Festplatten mit dd, da er die Verwendung einer anderen Größe, Partitionstabelle und eines anderen Dateisystems und besser als das Kopieren mit cp -a ermöglicht, da er eine bessere Kontrolle über die Dateiberechtigungen und Attribute ermöglicht , Zugriffssteuerungslisten (Access Control Lists, ACLs) und erweiterte Attribute. "

Von:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Manpage hier

2
Mauro Colella

Hinzufügen von zwei nützlichen Bits zu dem Thread, der erneut synchronisiert wird: Ändern der Verschlüsselung und Verwenden von --update:

Laut Wolfmans Post ist cp -ax elegant und cool für lokale Sachen.

rsync ist jedoch auch fantastisch. Zusätzlich zu Michaels Antwort zu -W kann den Chiffriercode ändern auch die Dinge beschleunigen (siehe jedoch alle Sicherheitsaspekte).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

Es gibt einige Diskussionen (und Benchmarks) um den Platz herum, 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 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:

  • --delete-after etc (wie Michael im Nachhinein erwähnt hat), wenn Sie das neue System wieder an den ursprünglichen Ort synchronisieren möchten oder so ähnlich. Und,
  • --exclude - zum Überspringen von Verzeichnissen/Dateien, zum Beispiel zum Kopieren/Erstellen eines neuen Systems an einen neuen Ort, während Benutzerverzeichnisse usw. übersprungen werden (entweder Sie mounten Häuser von einem anderen Ort aus oder erstellen neue Benutzer usw.) ).

Übrigens, wenn ich jemals Windows verwenden muss, verwende ich rsync von Cygwin, um große rekursive Kopien zu erstellen, da Explorer nicht mehr von vorne anfangen möchte (obwohl Finder OS X für mich noch schlimmer ist).

2

Wie in den Kommentaren von juniorRubyist erwähnt, sollte der bevorzugte Ansatz hier die Verwendung von dd sein. Der Hauptgrund ist die Leistung, es ist eine Block-für-Block-Kopie statt Datei-für-Datei.

Eine Partition klonen

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Eine ganze Festplatte klonen

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Verweise

  1. https://wiki.archlinux.org/index.php/disk_cloning
2

'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 ...

1
ECJB

rsync ist die perfekte Lösung, wie oben erläutert.

Ich würde einfach -S hinzufügen, um " Sparse-Dateien effizient zu behandeln ", falls ein Docker-Devicemapper-Volume oder ähnliches kopiert werden soll.

0
Jürgen Weigert