2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

Kopieren der gesamten Dateisystemhierarchie von einem Laufwerk auf ein anderes

Ich möchte die gesamte Dateisystemhierarchie von einem Laufwerk auf ein anderes kopieren..d.h. den Inhalt jedes Verzeichnisses sowie reguläre Dateien in Linux-Plattform. Wäre dankbar, den besten Weg zu wissen, dass mit möglicherweise Linuxes in-built-Funktionen zu tun. Das Dateisystem ist eine ext-Familie.

Antworten (11)

208
208
208
2011-07-07 03:36:43 +0000

Was Sie wollen, ist rsync .

Dieser Befehl kann verwendet werden, um einen Ordner zu synchronisieren und auch das Kopieren fortzusetzen, wenn es auf halbem Weg abgebrochen wurde. Der Befehl zum Kopieren eines Datenträgers 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 erhöhen, 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 sind, da der eigentliche Vorteil des Delta-Transfer-Algorithmus von rsync in der Reduzierung der Netzwerknutzung liegt.

Erwägen Sie auch das Hinzufügen von --numeric-ids, um die Zuordnung von uid/gid-Werten durch Benutzer-/Gruppennamen zu vermeiden.

56
56
56
2017-03-05 10:42:04 +0000

Die Antwort von Michael Aaron Safyan berücksichtigt keine spärlichen Dateien. Die Option -S behebt das.

Außerdem spammt diese Variante nicht mit dem Fortschreiten jeder Datei und macht keine Delta-Synchronisation, was die Leistung in Nicht-Netzwerk-Fällen tötet.

Perfekt für das Kopieren von Dateisystemen von einem lokalen Laufwerk auf ein anderes lokales Laufwerk.

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

Ich verwende oft

> cp -ax / /mnt

Vorausgesetzt, /mnt ist die neue Platte, die auf /mnt gemountet ist 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 gemacht werden.

Dieser Link hat einige Alternativen, einschließlich der oben genannten http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

6
6
6
2011-07-07 20:53:25 +0000

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

Für größere Arbeiten, wie z.B. lokale oder entfernte Backups, ist rsync das Beste.

Natürlich ist rsync deutlich komplexer in der Anwendung.

Warum rsync :

  • damit können Sie Ihr Laufwerk A ganz oder teilweise auf Laufwerk B kopieren (synchronisieren), mit vielen Optionen, wie z.B. das Ausschließen einiger Verzeichnisse von der Kopie (z.B. /proc ausschließen).

  • Ein weiterer großer Vorteil ist, dass dieses native Tool den Dateitransfer überwacht: z.B. bei massiven Übertragungen, wenn die Verbindung unterbrochen wird, wird sie ab dem Haltepunkt fortgesetzt.

  • Und zu guter Letzt verwendet rsync eine ssh-Verbindung, so dass Sie auch aus der Ferne synchronisierte, gesicherte “Kopien” erstellen können. Werfen Sie einen Blick in die man page sowie hier für einige Beispiele .

5
5
5
2014-02-06 06:11:42 +0000

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

Diese Version ist ziemlich spezifisch für Gnome- und Debian/Ubuntu-basierte Systeme, da sie Unterverzeichnisse der Home-Verzeichnisse der Benutzer, die spezifisch für Gnome sind, sowie den APT-Paket-Cache einschließt.

Die letzte Zeile schließt jedes Verzeichnis mit dem Namen cache/Cache/.cache aus, was für manche Anwendungen 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
2
2
2
2012-03-19 23:53:05 +0000

Ich füge dem Thread über rsync zwei nützliche Bits hinzu: das Ändern des Cypher und die Verwendung von --update:

Wie im Beitrag von Wolfman beschrieben, ist cp -ax elegant und cool für lokale Sachen.

Allerdings ist rsync auch großartig. Im Anschluss an Michaels Antwort zu -W kann das Ändern der Chiffre die Dinge auch beschleunigen (lesen Sie sich aber über die Auswirkungen auf die Sicherheit ein).

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

Es gibt einige Diskussionen (und Benchmarks) darüber, dass eine langsame CPU der eigentliche Engpass ist, aber es scheint mir zu helfen, wenn der Rechner mit anderen gleichzeitigen Dingen ausgelastet ist.

Einer der anderen wichtigen Gründe für die Verwendung von rsync bei einer großen, rekursiven Kopie wie dieser ist wegen des -u Schalters (oder –update). Wenn während des Kopierens ein Problem auftritt, können Sie es beheben, und rsync macht da weiter, wo es aufgehört hat (ich glaube nicht, dass scp das hat). Wenn Sie es lokal machen, hat cp auch einen -u-Schalter.

(Ich bin mir nicht sicher, was die Auswirkungen von –update und –whole-file zusammen sind, aber sie scheinen für mich bei dieser Art von Aufgabe immer vernünftig zu funktionieren)

Ich weiß, dass dies kein Thread über die Funktionen von rsync ist, aber einige der häufigsten, die ich dafür verwende, sind:

  • –delete-after usw. (wie Michael in der Nachbereitung erwähnte), wenn Sie das neue System wieder mit dem ursprünglichen Ort synchronisieren wollen oder ähnliches. Und
  • –exclude - für das Überspringen von Verzeichnissen/Dateien, für Fälle wie das Kopieren/Erstellen eines neuen Systems an einem neuen Ort, wobei Benutzer-Home-Verzeichnisse etc. übersprungen werden (entweder Sie mounten Home-Verzeichnisse von einem anderen Ort aus, oder Sie erstellen neue Benutzer etc.)

Übrigens, wenn ich jemals Windows benutzen muss, benutze ich rsync von cygwin aus, um große rekursive Kopien zu machen, weil der Explorer leicht hirntot ist und von vorne beginnen will (obwohl ich den Finder unter OS X noch schlimmer finde)

2
2
2
2015-05-18 15:45:08 +0000

rsync

“Dieser Ansatz gilt als besser als das Klonen von Festplatten mit dd, da eine andere Größe, eine andere Partitionstabelle und ein anderes Dateisystem verwendet werden können, und auch besser als das Kopieren mit cp -a, da es eine größere Kontrolle über Dateiberechtigungen, Attribute, Zugriffskontrolllisten (ACLs) und erweiterte Attribute ermöglicht.”

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

Man Page Hier

2
2
2
2018-06-14 17:30:20 +0000

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 anstelle von Datei-für-Datei.

Klonen einer Partition

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

Klonen eines ganzen Datenträgers

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

Referenzen

  1. https://wiki.archlinux.org/index.php/disk_cloning
1
1
1
2019-01-27 21:53:49 +0000

dd’ ist großartig, aber ddrescue (apt install gddrescue) ist noch besser. Wenn dd unterbrochen wird, gibt es keine Möglichkeit, neu zu starten (ein weiterer guter Grund, rsync zu verwenden). Wenn Sie ddrescue mit einer Logdatei verwenden, hält es fest, welche Blöcke kopiert wurden.

Wenn ich ein Dual-Boot-Windows/Linux-System sichere, verwende ich ntfsclone für die Windows-Partitionen und ddrescue für die Linux-Partition und dd für den MBR. (Ich habe noch nicht versucht, ein Dual-Boot-System mit GPT/UEFI zu sichern.)

Was ich gerne sehen würde, ist ein ddrescue-Werkzeug, das Dateien wie ntfsclone erstellen kann, bei denen der nicht zugewiesene Platz mit Steuerzeichen markiert ist. Das macht das Image nicht direkt mountbar, erlaubt aber, dass es nur so groß wie die enthaltenen Daten ist.

Jemand möge sich bitte das “spezielle Image-Format” ntfsclone für ddrescue ausdenken…

1
1
1
2019-07-31 21:30:35 +0000

Ich habe die hier vorgeschlagenen rsync-Befehle ausprobiert, aber letztendlich bekam ich viel sauberere und schnellere Ergebnisse mit partclone . Hängen Sie Quell- und Zielpartition aus und führen Sie dann Folgendes aus:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Dies führt die folgenden Schritte aus:

  1. klonen Sie die Partition (nur die benutzten Teile)
  2. stellen Sie sicher, dass das Dateisystem in Ordnung ist (resize2fs erzwingt diesen Schritt)
  3. passen Sie die Größe der Partition an das neue Dateisystem an

Das obige funktioniert, wenn die Zielpartition gleich groß oder größer ist als die Quelle. Wenn Ihr Ziel kleiner als die Quelle ist (aber alle Daten hineinpassen), dann machen Sie Folgendes:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M schrumpft das Dateisystem auf die Mindestgröß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 über den Paketmanager Ihrer Distribution (apt-get install partclone auf Debian-basierten Systemen).

0
0
0
2015-08-07 18:04:55 +0000

rsync ist die perfekte Lösung, wie oben erklärt.

Ich würde einfach -S zu “handle sparse files efficiently” hinzufügen, für den Fall, dass ein Docker-Devicemapper-Volume oder ähnliches kopiert werden soll.