it-swarm.com.de

Klonen Sie nur den verwendeten Speicherplatz von der Festplatte

Kann ich mit dd, rsync, clonezilla oder einem anderen Tool nur den Speicherplatz klonen, der unter Linux auf meiner Festplatte verwendet wird? Ich muss ein Backup von einer 1 TB HD (mit nur 2 GB belegtem Speicherplatz) auf eine 500 GB HD erstellen.

10
kroka

Sie können, aber Sie sollten zuerst Ihre Festplatte vorbereiten. Der Trick besteht darin, eine dünne Datei oder Komprimierung zu verwenden. Diese Methode ist zeitaufwändig und generiert hohe E/A. In Ihrem Fall (2 GB in Verwendung auf 1 TB HDD) ist eine Dateikopie (wie in Sawdusts Kommentar vorgeschlagen) wahrscheinlich die bessere Lösung. Wenn Sie dies andererseits getan haben z.B 850 GB bei Verwendung von 1 TB, viele kleine Dateien darin, Sie wollten MBR, Partitionstabelle, Metadaten auf einmal sichern - dann wäre meine Methode eine vernünftige Methode, um mindestens 150 GB in der Image - Datei zu speichern (die konnte immer noch nicht in eine 500-GB-Festplatte passen, es sei denn, die Daten wurden gut genug komprimiert.

Ich schreibe dies für Benutzer mit höherer Datenträgernutzung. Beachten Sie außerdem, dass das Quelllaufwerk fehlerfrei sein und das Überschreiben des leeren Speicherplatzes ermöglichen sollte. Ich gebe die Lösung hauptsächlich für Backup, nicht für Recovery oder Forensik. Die Zeit- und I/O-Kosten werden nicht nur während der Image-Erstellung bezahlt, sondern auch, wenn (falls) das Image auf die Festplatte zurückgeschrieben wird. Überlegen Sie zweimal, ob die Methode für Sie richtig ist.

Angenommen, Sie müssen /dev/sdb klonen, und es gibt mehrere Partitionen: /dev/sdb1, /dev/sdb2

Vorbereitung

Um die Vorteile von Dateien mit geringer Dichte oder Komprimierung optimal zu nutzen, sollten Sie den leeren Bereich mit Nullen überschreiben:

## Most commands need Sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect "no space left on device".
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.

Im Falle einer Windows-Partition kann es zu Problemen aufgrund des Windows-Ruhezustands kommen. Lesen Sie dieses .

Wenn das Partitionslayout größere Lücken aufweist, sollten Sie diese auch mit Nullen füllen. Swap-Partitionen (falls vorhanden) benötigen eine spezielle Behandlung, um das resultierende Bild so klein wie möglich zu halten. Die Windows-Dateien wie hiberfil.sys, pagefile.sys und swapfile.sys werden möglicherweise vor der zero_file-Erstellung entfernt. Auf diese Fälle werde ich hier nicht näher eingehen.

Sparse-File-Methode

Diese Methode kann verwendet werden, wenn das Zieldateisystem (in dem die Image-Datei gespeichert wird) Sparse-Dateien unterstützt. Um eine Image-Datei mit geringer Dichte zu generieren, rufen Sie Folgendes auf:

## dd probably needs Sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse

(BEARBEITEN: ursprünglich gab es bs=32M, aber es ist nicht die gute Wahl mit conv=sparse. Vergleichen Sie diese Frage .)

So schreiben Sie das Bild zurück:

## dd probably needs Sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M

Vorteile:

  • Das Image kann eingehängt sein (mount -o offset=… oder kpartx verwenden), um auf die darin enthaltenen Dateien zuzugreifen.

Nachteile:

  • Das Zieldateisystem muss Sparse-Dateien unterstützen.
  • Sie sollten daran denken, es beim Kopieren sparsam zu halten (cp --sparse=always).

Komprimierte Dateimethode

So generieren Sie das Bild:

## dd probably needs Sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz

So schreiben Sie das Bild zurück:

## dd probably needs Sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M

Diese Befehle können ohne dd und nur mit gzip erstellt werden. Ich habe dd verwendet, um 32 MiB Puffer zu gewährleisten.

Vorteile:

  • Die resultierende Datei ist nicht sparsam und bedarf keiner besonderen Behandlung.
  • Die Bildgröße wird noch mehr reduziert, wenn die Dateien auf Ihrer Quellfestplatte für die Komprimierung anfällig sind.

Nachteile:

  • Es ist schwierig, ohne vollständige Dekomprimierung auf die Dateien im komprimierten Image zuzugreifen (einige Fuse-Dateien können nützlich sein, obwohl ich nicht sicher bin, dass sie nie ausprobiert wurden; erwägen Sie einen squashfs-Ansatz ).

Hinweise

Um den Fortschritt zu überwachen, rufen Sie dd mit dem Operanden status=progress auf. Wenn die dd bereits ohne sie ausgeführt wird (z. B. Ihre dd unterstützt den status=progress nicht oder Sie haben vergessen, ihn zu verwenden), senden Sie das USR1-Signal an das Tool:

kill -s USR1 $(pidof dd)

und nach Bedarf wiederholen.

Alternativ können Sie pv zum Lesen verwenden. Beispiele:

pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz

Um schnell zu komprimieren, verwenden Sie gzip --fast, um am besten gzip --best zu komprimieren. Weitere Optionen finden Sie unter man gzip.

Verwenden Sie pigz anstelle von gzip, wenn Sie können. Dies sollte die Dinge beschleunigen, da pigz mehr als einen Prozessorkern verwenden kann. Sie können einen anderen Kompressor verwenden, wenn Sie möchten.

22

Wenn der Zieldatenträger bereits formatiert ist, wird der zweite Datenträger an denselben Computer wie der erste angeschlossen, eingehängt und unter Linux oder Mac ausgeführt:

rsync -avP --ignore=/media/disk2 / /media/disk2

Wenn der Zieldatenträger bereits formatiert ist, wird der zweite Datenträger formatiert und in einen anderen PC eingebunden. Wenn Sie Linux oder Mac ausführen:

rsync -avP / [email protected]_of_disk2_Host:/media/disk2

Dies setzt voraus, dass Sie nur eine Sicherung der Dateien ohne Berücksichtigung des zugrunde liegenden Laufwerks wünschen. Dies führt eine DATEISICHERUNG durch und wird mit nur 2 GB Daten relativ schnell ausgeführt.

0
UtahJarhead