Kann 'dd' verwendet werden, um auf eine kleinere Festplatte zu klonen, wenn man weiß, dass Partitionen bearbeitet werden müssen?


14

Ich habe früher ddsolche Datenträger geklont:

 dd if=/dev/sdb of=/dev/sda bs=4096 conv=notrunc,noerror,sync

Und es hat immer gut funktioniert. Alle Dokumente auf "dd" müssen darauf hinweisen, dass die Zielfestplatte mindestens so groß wie die Quelle sein muss. Muss das unbedingt stimmen?

Nun verstehe ich ganz genau, dass ich beim Klonen auf eine kleinere Festplatte nicht erwarten kann, dass Partitionen, die sogar teilweise außerhalb der Grenzen des Ziels liegen, intakt sind.

Wenn ich jedoch genau weiß, dass ich meine Partitionen auf dem Ziel später bearbeiten und die Partitionen außerhalb der Grenzen löschen muss, kann ich trotzdem mit "dd" eine Brute - Force - Kopie der Quelle bis zu den Grenzen der erstellen physische Größe des Ziels? Oder würde 'dd' das Ziel auf einen rauchenden Haufen Wrack reduzieren, wenn es die Grenze seiner Größe erreicht ;-)

Übrigens, als ich das recherchierte, habe ich empfohlene Werte für bs=alles von bs=1024bis gesehen bs=32M, was ist wirklich das Beste?


Beachten Sie, wenn die dd Berechnung der optimalen Blockgröße nützlich ist
Wilf

Antworten:


7

Das physische Laufwerk sollte zumindest nicht zu rauchen beginnen, aber die Chancen stehen sehr gut, dass Ihr Dateisystem nicht mehr funktioniert (ich meine, das Zieldateisystem; wenn Sie nur kopiert haben und nichts in der Quelle berührt haben, sollte die Quelle selbst in Ordnung sein ). Daten in einer Partition werden nicht unbedingt in aufsteigender Reihenfolge zugewiesen. Einiges davon befindet sich möglicherweise am Ende der Partition, auch wenn die Partition nicht voll ist (ich denke, dass dies bei einigen Dateisystemen deterministisch ist, aber ich weiß nicht genug, um die Details zu beschreiben). Die Daten dort können für die Integrität des Dateisystems wesentlich sein. Ich rate Ihnen daher dringend, sich nicht auf eine solche Kopie zu verlassen.

Wenn Sie diese Kopie erstellen möchten, müssen Sie zuerst die Partition mit einem Tool verkleinern, das die interne Struktur kennt und in der Lage ist, alles in guter Reihenfolge in eine kleinere Partition umzuwandeln. Dann können Sie die Kopie machen. gpartedist eine gute GUI-Oberfläche, um solche Dinge zu tun.

Für die bs Wert ist es normalerweise die beste Idee, ein paar Tests durchzuführen, bevor Sie mit der eigentlichen Kopie beginnen. Es gibt einige Tools, mit denen Sie diese Überprüfung automatisieren können, aber ich kann mich nicht an den Namen erinnern. Nach meiner Erfahrung liegt die beste Reichweite normalerweise zwischen 4 und 16 Millionen. Höher als das verdienst du nicht mehr viel. Aber es hängt von vielen Dingen ab, auch von den Festplatten. Ich habe zum Beispiel selten mit echten High-End-Festplatten gearbeitet, die aufgrund der höheren Geschwindigkeit und der Größe des Caches möglicherweise für höhere Werte geeignet sind.

BEARBEITEN Wenn eine Partition vollständig kopiert wurde, können Sie sie problemlos verwenden. Wie andere unterstrichen haben, müssen Sie jedoch auch sicherstellen, dass die Partitionstabelle intakt ist (zumindest die relevanten Einträge). Mit den vier primären MBR-Partitionen gibt es keine Probleme, da sie in den ersten 512 Bytes der Festplatte beschrieben werden. Logikpartitionen werden in der gesamten erweiterten Partition beschrieben, sodass Einträge möglicherweise verloren gehen (sie würden jedoch Partitionen beschreiben, die ohnehin verloren gehen würden). Bei GPT befindet sich eine Kopie der Partitionstabelle sowohl am Anfang als auch am Ende der Festplatte. Sie verlieren den zweiten, aber Sie können ihn vom ersten wieder aufbauen. Natürlich ist es ratsam, dies so schnell wie möglich zu tun. andere Antworten waren diesbezüglich präziser.


Siehe bearbeitete Frage :)
Ray Andrews

1
@rayandrews Nicht sicher, welches Update Sie erwarten, aber im Grunde genommen ddkopiert Bytes. Es beginnt bei Byte 0 und wird so lange kopiert, bis etwas (in Ihrem Fall das Ende des Mediums auf dem Ziel) es stoppt. Dann haben Sie eine Partitionstabelle, die ein Laufwerk angibt, das größer als die Realität ist, und Partitionen außerhalb des Laufwerks. Wenn Sie dies jedoch beheben, sollte dies in Ordnung sein. Obwohl es wahrscheinlich einfacher wäre, dd pro Partition zum Kopieren der Daten zu verwenden. [Es wird Sie auch mit all den normalen Problemen dd, wie doppelte UUIDs verlassen]
derobert

Was ich mag, ist, dass es die Partitionen und Dateisysteme nach und nach erstellt und beschriftet - sehr zeitsparend. Richtig zu den UUIDs tho.
Ray Andrews

1
Wie stellen Sie die zweite GPT-Tabelle wieder her?
user230910

2

Obwohl die vorgeschlagene "Herausforderung" zunächst schwierig, nicht durchführbar oder naiv erscheinen mag, wie einige kommentiert haben, ist dies nicht der Fall. Die Hauptidee, die hinter der Verwendung von dd für die Migration von einer größeren auf eine kleinere Festplatte steckt, ist vollkommen in Ordnung und hat Vorteile für die Migration der Daten. Voraussetzung ist natürlich, dass genügend freier Speicherplatz vorhanden ist, damit die belegten Daten auf die Zieldiskette passen.

Die Idee ist, jede Partition einzeln und nicht, wie ursprünglich vorgeschlagen, die gesamte Festplatte auf einmal zu bearbeiten. Es kann noch mehr erreicht werden: Die Partition (en), die abgeschnitten werden würden, können auch mit Hilfe von Tools zur Größenänderung des Dateisystems sicher migriert werden. In der Tat ist eine solche Art der Migration interessant, um Dateisystem-Matadaten und erweiterte Dateiattribute beizubehalten, die mit Tools wie cp, rsync, pax, ..., die auf Dateisystemebene ausgeführt werden und nicht die Geräteebene blockieren, nicht einfach kopiert werden können. Mit dd müssen Sie das Betriebssystem nicht erneut installieren oder den FS neu kennzeichnen, um Probleme mit SELinux zu vermeiden.

Nachstehend ist aufgeführt, was ich normalerweise mache, um ähnliche Aufgaben zu erledigen:

1) Zuerst müssen Sie die Dateisysteme in den betroffenen Partitionen reduzieren, die abgeschnitten werden würden. Verwenden Sie dazu das Tool resize2fs (vorausgesetzt, es handelt sich um ein ext2 / ext3 / ext4-Dateisystem - andere moderne Dateisysteme verfügen ebenfalls über Tools zum Ändern der Größe für den gleichen Zweck). Beachten Sie, dass ein Dateisystem zwar aus offensichtlichen Gründen nicht größer sein kann als die Partition, in der es sich befindet, aber sicher kleiner sein kann. Der Sicherheitstrick dabei ist, "mehr als nötig" zu reduzieren. Beispiel: Stellen Sie sich vor, Sie haben ein Dateisystem mit 1 TB, das Sie auf ein 500-Gig-Laufwerk migrieren möchten. In diesem Fall schlage ich vor, die fs auf zum Beispiel 450 Gig zu reduzieren (Sie müssen natürlich genug freien Speicherplatz dafür haben, dh der aktuell belegte Speicherplatz in diesem Dateisystem kann 450 Gig nicht überschreiten). Die scheinbar verschwendeten 50 Gig Speicherplatz werden nach der Datenmigration behoben.

2) Partitionieren Sie die Zielfestplatte mit der entsprechenden Geometrie unter Berücksichtigung der Platzbeschränkungen.

3) Bearbeiten Sie die Daten mithilfe der Partitionsgeräte und nicht mithilfe des Festplattengeräts (dh verwenden Sie sie dd if=/dev/sda# of=/dev/sdb#für jede Partition, anstatt sie zu verwenden if=/dev/sda of=/dev/sdb). HINWEIS: sda und sdb sind nur Beispiele. WICHTIGER HINWEIS: Wenn dd von einem größeren zu einem kleineren Partitionsgerät wechselt, beschwert sich dd über den Versuch, einen Beitrag an das Ende des Blockgeräts zu schreiben. Dies ist in Ordnung, da die Dateisystemdaten vor Erreichen dieses Punkts vollständig kopiert worden wären. Um solche Fehlermeldungen zu vermeiden, können Sie die Größe der Kopie mit bs=und angebencount= Parametern verkleinerten Dateisystems anzupassen. Dies erfordert jedoch einige (einfache) Berechnungen, kann jedoch bei falscher Ausführung Ihre Daten gefährden.

4) Ändern Sie nach dem Bearbeiten der Daten die Größe des jeweiligen Dateisystems innerhalb der Zielpartition (en) erneut mit resize2fs. Geben Sie diesmal nicht die neue Dateisystemgröße an. Wenn resize2fs ohne Größenangabe ausgeführt wird, vergrößert es das Dateisystem so, dass es die maximal zulässige Größe einnimmt. In diesem Fall wird das 450-Gig-Dateisystem erneut vergrößert, um die gesamte 500-Gig-Partition zu belegen, und es wird kein Byte verschwendet. (Die Methode "Mehr als nötig reduzieren" verhindert, dass Sie versehentlich Größen falsch angeben und Ihre Daten riskieren. Beachten Sie, dass GB- oder GiB-Einheiten schwierig sein können.)

Hinweis für komplexere Vorgänge: Wenn Sie einen Bootmanager haben, den Sie mitkopieren möchten, was sehr wahrscheinlich der Fall ist, können Sie die ersten KB der Festplatte mithilfe des Festplattengeräts anstelle der Partitionsgeräte (wie z dd if=/dev/sda of=/dev/sdb bs=4096 count=5) und konfigurieren Sie dann die Geometrie in / dev / sdb neu (die vorübergehend eine ungültige Geometrie für das neue Laufwerk, aber einen intakten und gültigen Start-Manager enthält). Verwenden Sie zum Schluss die Partitionsgeräte wie oben beschrieben, um jeweils eine Partition zu erstellen. Ich habe so viele Male Operationen durchgeführt. Vor kurzem habe ich beim Upgrade von einer Festplatte mit einer Mischung aus MacOSX- und Linux-Installationen auf eine kleinere SDD in meinem MacMini6.2 eine komplexe Migration erfolgreich durchgeführt. In diesem Fall musste ich Linux von einem externen Laufwerk booten, den Bootmanager ausführen, gdisk ausführen, um die GPT auf der neuen Festplatte zu reparieren, und schließlich jede Partition mit den gerade geschrumpften Dateisystemen löschen. (Beachten Sie, dass das GPT-Partitionsschema zwei Kopien der Partitionstabelle enthält, eine am Anfang und eine am Ende des Datenträgers. gdisk beklagt sich sehr, weil es die zweite Kopie des NS-Terminals nicht finden kann und weil die Partitionen die Festplattengröße überschreiten, aber das Problem mit der NS-Kopie nach dem Neudefinieren der Festplattengeometrie korrekt behoben wird. Dies war ein sehr viel komplexerer Fall, der jedoch erwähnenswert ist, da er zeigt, dass diese Art der Operation auch durchaus möglich ist.

Viel Glück! ... und denken Sie vor allem daran, alle wichtigen Daten vor einer solchen Operation zu sichern. Ein Fehler und Sie können Ihre Daten sicherlich unwiederbringlich beschädigen.

Und für den Fall, dass ich nicht genug betont habe: Sichern Sie Ihre Daten vor der Migration! :)


Sehr gute Erklärung, danke!
Nirvana-msu

1

Wenn Sie ein Auto in einen Durchgang einbauen möchten, der 20 cm schmaler ist als das Auto, und Sie die linken 20 cm des Autos abschneiden möchten, funktioniert das Auto dann noch? Wahrscheinlich nicht.

Wenn Sie den Anfang eines Datenträgers auf einen anderen Datenträger kopieren und den Kopiervorgang abbrechen, weil der Zieldatenträger kleiner ist, funktioniert das Ergebnis nicht. Selbst wenn genügend Speicherplatz für alle Dateien auf der Zieldisk vorhanden wäre, erhalten Sie kein funktionierendes Dateisystem, wenn Sie vom Start der Disk nach N Bytes schneiden.

Wenn die Festplatte in PC-Partitionen (GPT oder MBR) unterteilt ist, funktionieren alle Partitionen, die vollständig auf das Ziel passen. Es gibt eine Ausnahme: Wenn bei MBR-Partitionen die logischen Partitionen nicht in Festplattenreihenfolge nummeriert sind, werden die Partitionen nicht mehr aufgelistet, sobald die Kette den Zielbereich verlässt. (Wenn Sie dies nicht verstehen, ist dies ein weiterer Grund, warum Sie keine partielle Datenträgerkopie durchführen sollten.) Es wäre viel sinnvoller, die Partitionen zu kopieren, die Sie behalten möchten, anstatt von Anfang an zu kopieren und mit den passenden Partitionen zu enden . Die am Ende teilweise kopierte Partition kann nicht verwendet werden.

Wenn die Festplatte oder eine Teilpartition ein physisches LVM-Volume ist und Sie eine Teilkopie dieses physischen Volumes erstellen, können Sie auch nicht sicher sein, ob Sie nützliche Daten aus dem Ergebnis erhalten.

Wenn Sie nur einen Teil der Daten von einer großen Festplatte auf eine kleinere Festplatte kopieren möchten, erstellen Sie Partitionen auf der kleineren Festplatte. Wenn Sie eine Partition auf eine Partition gleicher Größe kopieren möchten, können Sie dies mit tun cat. Wenn Sie eine Partition auf eine kleinere Partition kopieren möchten, erstellen Sie ein Dateisystem auf der Zielpartition und führen Sie eine Kopie auf Dateiebene mit etwas wie cp -aoder durchpax -rw -pe -t .

Sie können ddanstelle von verwenden, catwenn Sie ein Masochist sind. ddhat eine seltsame Syntax und ist normalerweise langsamer alscat wenn Sie nicht die richtige Puffergröße finden. Es gibt keinen einzigen optimalen Wert für die Puffergröße, dies hängt von den Eigenschaften Ihrer Hardware ab. Wenn die Größe zu klein ist, ddwird Zeit für viele winzige Übertragungen verschwendet. Wenn die Größe zu groß ist, ddverschwenden Sie Zeit damit, einen Puffer vollständig zu lesen, bevor Sie mit dem Schreiben des nächsten beginnen. Die optimale Größe für einen Datenträger-zu-Datenträger-Transfer beträgt normalerweise einige Megabyte (1024 Byte sind lächerlich klein). catwählt eine annehmbare Größe ohne Bemühung von Ihrer Seite aus.


Ja, ich bin in Ordnung, wenn ich die letzten Partitionen verliere. Auf allen meinen Festplatten passen alle wichtigen Dinge immer in die Größe der kleinsten meiner Festplatten. Darüber hinausgehende Partitionen sind immer unwesentlich. Die Sache mit "Katze" ist, dass es keine Partitionen oder einen MBR erstellen wird (es sei denn, ich liege falsch)
Ray Andrews

@rayandrews Wenn Sie catauf der gesamten Festplatte ausführen , werden die gleichen Partitionen erstellt (mit einer Einschränkung für MBR-Partitionen, siehe meine Bearbeitung). Das gleiche gilt für die ddVerwendung ddist nur eine komplizierte Methode cat. Wenn Sie catauf einer Partition ausgeführt werden, werden natürlich keine Partitionen erstellt. Verwenden Sie dazu fdisk / gdisk / parted /….
Gilles 'SO- hör auf böse zu sein'

Sehr interessant. OK, zeige mir einen Beispielbefehl, dann werde ich es ausprobieren, und wenn es gut ist, ist dies die beste Lösung.
Ray Andrews

@rayandrews Ein Beispielbefehl, um was zu tun?
Gilles 'SO- hör auf böse zu sein'

Nur ein Beispielbefehl mit 'cat' zum Klonen einer Festplatte. Machen Sie eine neue Antwort, damit ich sie akzeptieren kann.
Ray Andrews

0

Ich möchte meine Erfahrungen mit diesem Thema teilen, sollte sich dies für einen anderen Leser als nützlich erweisen. Kürzlich habe ich DDRESCUE verwendet , um das erste Drittel einer NTFS-Partition von einer fehlerhaften Festplatte wiederherzustellen und das wiederhergestellte Segment der Partition erfolgreich auf einer kleineren Festplatte wiederherzustellen - wodurch die erfassten Dateien gerettet wurden (und der Rest verloren ging). Im Folgenden sind die Schritte aufgeführt, die ich unternommen habe (definitiv ein HACKSAW-Ansatz !!). ...

Die Quellfestplatte bestand aus 750 GB, die in NTFS mit einer MBR-Dateitabelle formatiert waren. Ich hatte es nur ein paar Mal benutzt, um Dateien zu sichern, so dass die meisten Dateien zu Beginn des Laufwerks etwa 160 GB wert waren. Ein Familienmitglied hat die (extern montierte) Festplatte auf den Boden geworfen - danach hat sie nie mehr richtig funktioniert! Mit ddrescue (akribisch) konnte ich einen großen Teil des Beginns der Fahrt wiederherstellen. Aufgrund der physischen Beschädigung wird es während des gesamten Vorgangs sehr häufig heruntergefahren ...

Ich hatte eine kleine Laptop-Festplatte mit 150 GB zur Verfügung (extern gemountet), auf die ich die ddrescue-Daten direkt extrahierte. Alternativ hätte ich die Daten in eine Image-Datei extrahieren und später mounten können, dachte jedoch, das Schreiben der Daten direkt auf eine Festplatte wäre einfacher.

Der wichtigste Trick für die Rettung bestand darin, die Daten des MBR und des NTFS-Bootsektors auf der Rettungsfestplatte manuell zu bearbeiten. Andernfalls wird die Festplatte von keinem Betriebssystem erkannt. Ich konnte unter Linux kein passendes Programm finden und wandte mich daher Windows zu. Es gibt ein praktisches Paket mit dem Namen Windows Support Tools, das nicht mehr gewartet wird, aber dennoch nützlich ist (siehe Link unten)! Das Tool, mit dem ich die Partition bearbeitet habe, ist Disk Probe. Stellen Sie sicher, dass Sie den Endsektorwert Ihrer Festplatte kennen (ich habe fdisk -l in Ubuntu verwendet)

https://en.wikipedia.org/wiki/Windows_Support_Tools

Mit einem guten Taschenrechner und etwas Kreativität habe ich die Festplatte in Disk Probe in Windows geladen und gemountet und die Endsektorwerte bearbeitet. Im MBR mussten zwei Wertesätze geändert werden, nämlich a) der Festplatten-Endsektor und b) der NTFS-Partitions-Endsektor. Im NTFS-Bootsektor musste der Wert der Partition Total Sectors geändert werden. In jedem Fall wurde der numerische Wert verringert, um der verringerten "Abmessung" der kleineren Festplatte zu entsprechen (Endsektoren wurden von 750 GB auf 150 GB geändert). Klicken Sie auf die Registerkarte Ansicht, um diese Werte zu bearbeiten.

Hier ist ein Bild von Disk Probe in Aktion beim Bearbeiten der NTFS-Startsektordaten Windows-Supporttools - Disk Probe

Beim Bearbeiten der oben genannten Felder hat Windows die Partition als gültige Partition erkannt, obwohl sie beschädigt ist. Ich habe die Eingabeaufforderung eingegeben und das Windows-Programm Chkdsk auf der beschädigten Festplatte ausgeführt (chdsk D :). Es war aufregend zu sehen, wie die Partition Datei für Datei wieder zum Leben erweckt wurde! Das Programm hat die Partitionstabelle neu erstellt und alle Dateien, die von der beschädigten Festplatte kopiert wurden, erfolgreich neu zugeordnet. Dateien, die außerhalb des gültigen Bereichs lagen (nicht kopiert), wurden nicht gefunden und wurden daher entfernt.

Den nächsten Teil verstehe ich nicht, da Windows die 150-GB-Festplatte mit enthaltenen Dateien erfolgreich wiederhergestellt hat. Windows konnte die Festplattenpartition jedoch nativ nicht zum Anzeigen von Dateien öffnen (es ist ein Fehler aufgetreten). Allerdings Ubuntu zur Rettung! Ich habe Ubuntu neu gestartet, die externe Festplatte gemountet und ohne Probleme wurden alle wiederhergestellten Dateien angezeigt!

Hoffentlich erweist sich diese Säge-Methode zum Wiederherstellen von Dateien von einer großen Festplatte auf eine kleinere Festplatte als nützlich für eine andere arme Seele neben mir. Prost!


1
Sie haben sich diese Antwort sehr genau überlegt. Leider beantwortet es die Frage nicht wirklich. msgstr "" " ddrescueist keine Ableitung von ddoder ddin irgendeiner Weise damit verbunden, außer dass beide zum Kopieren von Daten von einem Gerät auf ein anderes verwendet werden können. Der Unterschied besteht darin, dass ddrescue einen ausgeklügelten Algorithmus verwendet, um Daten von fehlerhaften Laufwerken zu kopieren, die sie so wenig verursachen Schaden wie möglich. " - Wikipedia. Darüber hinaus scheint sich Ihre Antwort in erster Linie auf eine Windows-Betriebsumgebung zu konzentrieren, die hier keine typische Konfiguration ist
Fox

1
Als der ursprüngliche Fragesteller finde ich Dans Erfahrung am hilfreichsten, es ist gut zu wissen, was in einer verzweifelten Situation getan werden kann, obwohl es natürlich nur am Rande dieses genauen Themas liegt, aber seien wir nicht zu streng.
Ray Andrews

0

Sie müssen zuerst die Partitionen in der Quelle verkleinern (oder diese außerhalb der Grenzen löschen).
Dann ddund danach müssen Sie wahrscheinlich die Partitionstabelle mithilfe gdisk /dev/sd<target>
von reparieren. Die Schlüsselsequenz zum Reparieren der Tabelle lautet, v r d w
dass Sie die Partitionen ein wenig kleiner als erforderlich zerkleinern und sie anschließend wieder auf die volle Größe der Zielfestplatte erweitern sollten.
(Diese Antwort basiert auf meiner persönlichen Erfahrung beim Klonen meiner Festplatte auf eine kleinere SSD.)


+1. Diese Methode funktioniert auch bei mir: Das Klonen funktioniert, wenn alle Partitionen auf das Ziellaufwerk passen :-) Nur ein Kommentar: Sie müssen die Backup-Partitionstabelle einer GUID-Partitionstabelle (GPT) reparieren, aber wenn es ein altes MSDOS gibt Partitionstabelle, es gibt keine zu reparierende Backup-Partitionstabelle.
Sudodus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.