Wie klone ich ein laufendes System am besten mit rsync auf eine neue Festplatte?


22

Ich verwende ein System als Server mit einer fehlerhaften Festplatte. Während sich alle wichtigen Daten auf einem RAID befinden und gesichert sind, habe ich kein Image des Systems. Es gibt keine spezielle Notwendigkeit, da ich die Installation natürlich durchführen kann, aber ich möchte trotzdem zuerst versuchen, eine Hotcopy zu erstellen, bevor ich nur den Wiederherstellungspfad entlang gehe. Ich weiß, dass dies als Prozess einige Nachteile hat, aber ich denke, es gibt nicht viele Nachteile, es als erstes Mittel zu versuchen.

  • Betriebssystem: Ubuntu 12.04.4 LTS
  • Kopflos
  • Ich hoffe nicht, zu viel neue Software zu installieren, da die Festplatte bereits ausfällt :)
  • Das System läuft. Ich habe Angst, es zu stoppen, erhöht die Wahrscheinlichkeit, dass die Festplatte nicht wieder hochfährt. Das heißt, dd könnte draußen sein?
  • Die neue Festplatte hat nicht die gleiche Größe (sie ist doppelt so groß) wie die alte, was das Problem mit der Festplatte noch komplizierter macht.

Meine Idee war zu

  • Stecken Sie das neue Laufwerk in das System
  • mache ein Dateisystem
  • mounten Sie es in / mnt / somedir
  • Synchronisieren Sie die Dateien
  • etwas Fstab-Magie
  • etwas Bootmagie

Die Fragen, die ich noch habe, sind:

Was wäre ein guter rsync-Befehl? Ich plante auf:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Ich überspringe ein paar weitere Verzeichnisse, zB meine berittenen Schlachtzüge usw.)

Wo die Optionen sind:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Ich überspringe speziell -H, -v und --progress, um den Prozess zu beschleunigen.
Würde das für Ubuntu funktionieren? Ich bin nicht sicher, ob Ubuntu Hardlinks verwendet, aber ich glaube nicht, dass ich die Option brauche, oder?

Nach diesem Lauf konnte ich neu starten (möglicherweise mit einem Live-USB-Laufwerk) und den Rsync erneut ausführen, wenn die alte Festplatte noch startet. Dies würde alle nicht lesbaren / geänderten Dateien reparieren, da das System vermutlich lief.


Wie behebe ich das Booten?
Dann wäre es mein Plan, die UUID /in meiner fstab zu ändern (ich muss immer noch googeln, wie ich die UUID finde) und etwas zu zaubern, damit das System tatsächlich von der neuen Festplatte bootet

Habe ich etwas vergessen oder etwas speziell Dummes geplant?

Antworten:


16

Sie können die UUID für alle Blockgeräte mit dem blkidBefehl abrufen . (Sie wollen die, die nur UUID sagt, nicht PARTUUID)

Die von mir verwendeten rsync-Optionen sind -avhPHAXx.

Ich glaube nicht, dass -v oder --progress irgendetwas beschleunigen, wenn Sie sich nicht auf einer sehr langsamen Konsole befinden.

Die Verwendung von -x macht alle Ausschlüsse überflüssig, vorausgesetzt, sie befinden sich alle auf unterschiedlichen Dateisystemen (auf meinem System sind alle außer Fundsachen vorhanden).

Das einzige häufig verwendete Programm, von dem ich weiß, dass es feste Links verwendet (zumindest auf meinem System), ist git, deshalb füge ich die Option -H hinzu. Ich denke, das einzige Problem, das Sie haben, wenn Sie -H nicht verwenden, ist, dass es etwas mehr Platz beansprucht.

Wenn Sie für den Bootloader GRUB2 mit MBR verwenden, verwende ich den folgenden Befehl grub-install /dev/sda(ersetzen Sie sda ​​durch das richtige Laufwerk für Sie). Das sollte das neue Laufwerk bootfähig machen. Wenn Sie einen anderen Bootloader oder eine andere UEFI verwenden, würde ich bei Google nachsehen, wie das neue Laufwerk ordnungsgemäß gebootet werden kann. Denken Sie daran, dass sich / boot auf dem neuen Laufwerk auf derselben Partition befinden muss, auf der es sich gerade befindet (vorausgesetzt, Sie verwenden auch keine UUID für / boot), andernfalls müssen Sie fstab entsprechend ändern.


Ich fürchte, ich glaube nicht, dass ich sie auf separaten Systemen habe, also scheint der Ausschluss vernünftig. Ich lese gemischte Sachen über die Geschwindigkeit von - v, also bin ich mir nicht sicher, was ich dort machen soll;). Git ist ein guter Punkt, da bin ich mir sicher, dass ich etwas davon habe!
Nanne

1
Nun, / proc, / sys und höchstwahrscheinlich / dev sind definitiv andere Dateisysteme / mountpoints als /, daher gibt es absolut keinen Grund, diese auszuschließen, wenn Sie -x haben. Wenn Sie sich nicht sicher sind, was Teil Ihres Root-Dateisystems ist, führen Sie einfach mounteine Überprüfung durch. Alles, was sich dort befindet, muss nicht manuell ausgeschlossen werden.
bparker

Ich bin nicht sicher, wie und warum, aber die Ausschlüsse waren trotzdem falsch. Sie waren tatsächlich im Trockenen, ich wusste nicht warum. (Nun, ich habe das Format von einem halb-zufälligen Ort kopiert, also könnte das der Grund sein?). Wie dem auch sei, mit dem -x, das gemäß Ihrem Rat fest installiert ist, habe ich mir nicht allzu viele Sorgen gemacht. Das einzige zusätzliche Problem war, dass einige unwichtige Dinge (z. B. alte Backups von Backups) ebenfalls "gespeichert" wurden.
Nanne

Dies sparte meine ein $$. Ich habe 12 GB + System auf Linode geklont, um einen brandneuen Knoten zu erstellen. Nach mehr als 5 Jahren funktioniert dies immer noch. Danke Leute!
Geeth

Wenn Sie also das geklonte Dateisystem partitionieren, das bereit ist, die Klone zu akzeptieren, sollte auf meiner Root-Partition das Boot-Flag gesetzt sein, während ich sie synchron halte, oder ich setze es kurz bevor ich das geklonte Laufwerk in Betrieb nehme. Ansonsten würde ich davon ausgehen, dass das geklonte Laufwerk dann bootfähig ist, was eigentlich nicht erwünscht ist. In meiner Situation ist mein Klonlaufwerk eine Festplatte auf einem separaten Server. Rsync wird verwendet, um die Ausrichtung mit dem Produkt zu gewährleisten.
NZ Dev

11

Ich habe das gerade erfolgreich gemacht (nach ein paar Versuchen).

ich benutzte

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Dann habe ich meine /mnt/etc/fstabDatei für die Bootpartition und meinen Swap Space zurückgesetzt.

Dann musste ich GRUB zurücksetzen

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub

Beachten Sie, dass dies nur für MBR-formatierte Datenträger gilt.
Teque5

2

Versuchen Sie nicht, das Booten mit diesem Laufwerk zu beheben. meine Empfehlung:

  1. Schließen Sie ein Laufwerk auf einem anderen Computer an, anstatt einen Hotswap auf dem fehlerhaften Computer zu riskieren.
  2. rsync Ihre Nicht-Systemdateien auf die neue Festplatte übertragen.
  3. Erstellen Sie auf einer separaten Festplatte einen Start, einen minimalen Stamm und einen Swap. Installieren Sie dasselbe Betriebssystem, das Sie von der fehlerhaften Festplatte klonen möchten.
  4. Booten Sie von dieser neuen Festplatte (idealerweise auf einem separaten Computer, wenn Sie keine Ausfallzeiten auf dem Zielhost riskieren können, andernfalls können Sie den Zielhost mit dieser Festplatte booten).
  5. Fügen Sie diesem neuen System den Datenträger aus Schritt 2 mit den richtigen Einhängepunkten hinzu. Jetzt haben Sie einen Klon des Systemlaufwerks. Sie können die Partitionen (optional) auf diese neue Festplatte kopieren. Ich empfehle jedoch, die Festplatte als Mindestanforderung für das Booten Ihres Betriebssystems beizubehalten. Wie Sie bemerkt haben, erschwert die Tatsache, dass sich zu viele Dinge auf der primären Partition befinden, die Wiederherstellung. Stellen Sie sicher, dass Sie die Netzwerkkonfiguration korrekt kopieren, da Ihr Server kopflos ist.
  6. Ersetzen Sie einfach das Laufwerk des betroffenen Systems durch dieses neue Festplattenpaar (wenn Sie das Ziel zunächst in Schritt 4 nicht starten möchten).
  7. Starten Sie neu.

Ich kann Ausfallzeiten riskieren, es ist ein nicht notwendiger Server. Ich habe mich für den Hotswap entschieden (im Grunde genommen Hot-Add), weil diese Kopie viel schneller sein würde. Es sollte nicht zu viele Risiken geben, dachte ich, da es sich um SATA handelt (zumindest II). Abgesehen davon, was ist der Grund, eine zusätzliche Bootdiskette vorzuschlagen? Wäre das nicht kompliziert für einige bereits installierte Software, Homedirs usw.? Es klingt nach mehr Arbeit, die ich vermeiden möchte: D
Nanne

Es ist das, was ich in der Produktion benutze. Ich mounte / home, / etc, / var, / usr und / opt auf externen Datenträgern (eigentlich auf LVM) und / und / boot auf einem separaten Datenträger. Auf diese Weise muss ich mir keine Sorgen machen, wenn die Hauptfestplatte ausfällt. Ich tausche sie einfach aus, ohne meine Dienste zu beeinträchtigen. Insbesondere, wenn auf einer Partition nicht mehr genügend Speicherplatz vorhanden ist und Sie ohne Ausfallzeiten ein Volume hinzufügen müssen.
Burhan Khalid

Während Sie einen guten Punkt machen, ist es keine Anforderung, die ich derzeit habe oder brauche :). Es gibt mehrere andere Disks im System (ungefähr 7) und ich muss die Linie irgendwo ziehen; D. Das Betriebssystem muss also im Moment nicht aufgeteilt werden. Ich meine: Ich bin damit einverstanden, dass das System gut ist, nur nicht etwas, wonach ich jetzt suche; D. Wenn ich also alles auf einer Festplatte belasse, wird es durch die Tatsache, dass ich extern kopiere, ernsthaft langsamer, nicht wahr?
Nanne

Hängt von Ihrer Schnittstelle zum externen ab, über Ethernet sollte es schnell sein, über USB 2 schneller, über USB 3 sogar noch schneller. Das macht es nicht sehr langsam - kopieren Sie natürlich keine Verzeichnisse, in die geschrieben wird (z. B. / tmp, die Sie sowieso nicht benötigen) oder in die Pipes geschrieben werden.
Burhan Khalid

0

Ich habe viel Zeit mit einer Centos Freepbx-Distribution verbracht, um Rsync zu starten und eine neue bootfähige Festplatte zu haben. Nachdem ich fstab und grub UUID repariert habe, funktioniert das nicht mehr.

Der letzte Schritt, um es zum Laufen zu bringen, ist

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Wenn Sie sich in der Grub-CLI befinden (dh an der grub>Eingabeaufforderung):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Drücken enterSie und Sie können jetzt herunterfahren, alte Festplatte entfernen und mit neuer booten.

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.