Debian / Grub2: Root-Partition auf neues Laufwerk verschieben?

30

Hat jemand einen Vorschlag, wie man die Root-Partition auf ein neues Laufwerk verschiebt und grub2 so einrichtet, dass es auf diesem Laufwerk startet? Ich habe anscheinend kein Glück, grub-mkconfig anzuweisen, was ich tun möchte (z. B. chroot'int in meinem neuen Stammverzeichnis verwirrt nur alle Skripte).

Hintergrund Ich verwende Debian Squeeze auf einem kopflosen NAS mit geringem Stromverbrauch. Mein aktuelles Setup ist /ein sda0und /bootein sde0(eine CF-Karte): Ich brauchte das separate, /bootweil sd[a-d]ich ein verzögertes Hochfahren machen musste. Jetzt habe ich eine alte 2,5" IDE - Festplatte zu verwenden , wie gefunden /einschließlich /bootmir zu erlauben , alle der großen Scheiben nach unten zu drehen.

Was ich versucht habe Grundsätzlich ging ich

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

Dann habe ich es versucht

chroot /mnt/newroot
update-grub

Aber das schlug fehl, als Grub fragte, ob Root gemountet sei. Dann machte ich einen halbherzigen Versuch /mnt/newroot/grub/grub.cfg, das Kernel-Image zu finden sdf5, gefolgt von einem grub-install --root-directory=/mnt/newroot /dev/sdf. Aber dies brachte mich gerade zu einer Rettungsaktion, als ich versuchte, von dort zu booten sdf.

Mein Backup-Plan ist, einfach neu zu installieren, also eine Bonusfrage (kein Häkchen für diese): Was muss ich tun, um meine lvm2- und mdadm-Konfiguration zu übertragen? Ist alles in den Dateisystemen gespeichert (und wird es automatisch erkannt), oder muss ich es selbst entfernen?

Lösung (danke an Maciej Piechotka): Wie Maciej betont, muss ich eine richtige Chroot haben, damit alle Madenwerkzeuge funktionieren. Als Referenz, so habe ich es gemacht:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

Alle Dateien werden jetzt kopiert (siehe hier für eine Erläuterung der Kopierstrategien). Korrigieren Sie das Neue etc/fstab, um auf die neue Wurzel zu verweisen:

janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old  etc/fstab
    -UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 /     ext3 errors=remount-ro         0 1
    -UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults                  0 2
    +UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 /     ext3 noatime,errors=remount-ro 0 1

Schließlich montiert dev, sysund procauf die neue Wurzel und chroot:

janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none  /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on 
janus@nasguld:/mnt/newroot$ sudo chroot .

Wir sind jetzt genau so an die zukünftige Wurzel gewöhnt, wie sie aussehen wird. Laut Maciej sollte es in Ordnung sein, nur anzurufen grub-install, aber ich habe update-gruberstmal einen Blick auf die /boot/grub/grub.cfgvor der Installation des Bootloaders erzeugten Dateien geworfen. Ich bin nicht sicher, ob es automatisch aktualisiert wird.

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Janus
quelle
Veröffentlichen Sie den Inhalt /etc/default/grubund das genaue Protokoll von update-grub.
Gilles 'SO - hör auf, böse zu sein'
(Gedanken nach dem Hinzufügen der Lösung): Es könnte tatsächlich sein, dass das Problem darin bestand, dass ich in der nicht aktualisiert /etc/fstabhatte chroot(dies würde im Einklang mit der update-grubBeschwerde stehen, dass "\ ist nicht gemountet"). Wenn ich das noch einmal machen würde, würde ich zuerst versuchen, ohne die Mühe zu machen, die speziellen Dateisysteme in der Chroot zu mounten.
Janus
Nur ein Hinweis: Vergessen Sie nicht, / mnt / newroot vor dem Neustart zu entfernen!
Giacomo Tesio
Hier finden Sie Anweisungen zum Verschieben Ihrer Root-Partition / auf ein neues nvme-Laufwerk, während / home auf Festplatte bleibt. lucasmanual.com/blog/…
Lucas

Antworten:

20

Mounten Sie grundlegende Dateisysteme und kopieren / ändern Sie Dateien, während Sie chrooten:

  • / dev ( mount -o bind /dev/ /path/to/chroot/dev)
  • / proc ( mount -t proc none /path/to/chroot/proc)
  • / sys ( mount -t sysfs none /path/to/chroot/sys)

IIRC, das bei der Installation von Grub 2 in Arch und mehrmals unter Gentoo funktioniert hat. Dann nach chroot zu /path/to/chrootbefehlen war einfach:

grub-install /dev/<boot_disk>

Ab lvm2 (und ich glaube Madm, aber ich habe es nicht verwendet) ist die Konfiguration auf der Festplatte gespeichert. Es gibt Konfiguration, was gelesen werden sollte, um Geräte zu erkennen. Angenommen, Ihre Geräte befinden sich an Standardstandorten ( /dev/sd*oder /dev/hd*), sollte dies kein Problem darstellen.


PS. Ich würde einfachem cp des lebenden Systems nicht vertrauen, da es einige Plätze gibt, in denen es falsch gehen kann:

  • Vergaß zu ändern /etc/fstabund andere nützliche Dateien
  • Dateien wurden während des Zugriffs geändert
  • Bewältigung von Müll ( /tmpetc.)
Maciej Piechotka
quelle
Vielen Dank. Du sagst also im Grunde, ich mache eine schlampige Chroot :) Ich werde es mit einer richtigen Chroot versuchen. cp -axsollte in Ordnung sein (möglicherweise nach dem Löschen auf Einzelbenutzer-Runlevel) gemäß diesem alten Howto: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus
Hat einen Charme gewirkt! Vielen Dank für die Hilfe.
Janus
1
@Janus: Ich würde Daten von Live Distribution kopieren, um auf der sicheren Seite zu sein. Ich bin froh, dass es geklappt hat.
Maciej Piechotka
Ich musste update-grubvorher tun install-grub.
Aryeh Leib Taurog
3

Sie können grub von der Live-Distribution installieren, ohne chrooten zu müssen:

grub-install /dev/hda --root-directory=/mnt/guest/
Jet
quelle
Vielen Dank. Ich bin mir nicht sicher, ob dies hier funktionieren würde: Soweit ich weiß, werden grub-installnur die Grub-Image-Dateien aktualisiert und der MBR geschrieben: Insbesondere grub.cfgwird nicht aktualisiert. Wie ich oben schon sagte, ist das Mounten der speziellen Verzeichnisse vielleicht zu viel des Guten, aber ich denke immer noch, dass die Chroot der Weg ist, um grub.cfgauf einfache Weise zu aktualisieren ?
Janus
Ja, das hat auch bei mir nicht funktioniert. Sie müssen sich update-gruban die Arbeit machen und das hat man nicht --root-directoryoder so, nein?
Mitar
0

Übrigens, wenn Sie eine Partition hinzufügen (wie z. B. ein Fenster), in die Grub im Boot-Sektor keine schreiben soll, aber wenn Grub darüber informiert werden soll, wenn Ihr Computer bootet, können Sie die Partitionen erneut scannen und generieren Erstellen Sie eine neue Datei grub.cfg mit dem Befehl grub_mkconfig wie folgt in einer Terminalsitzung

cd / boot / grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

Wenn Sie nun von Ihrer aktuellen Linux-Partition booten (die zuvor gebootet wurde), werden Sie über die andere Partition informiert.

user129087
quelle