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! :)
dd
Berechnung der optimalen Blockgröße nützlich ist