Hat jemand einen Vorschlag, wie man die Root-Partition auf ein neues Laufwerk verschiebt und grub2 so einrichtet, dass es auf diesem Laufwerk bootet? Ich scheine kein Glück zu haben, grub-mkconfig anzuweisen, was ich tun möchte (z. B. chroot’int in mein neues Stammverzeichnis verwirrt nur alle Skripte).
Hintergrund Ich verwende Debian Squeeze auf einem Headless-Low-Power-NAS. Mein aktuelles Setup ist /
auf sda0
und /boot
auf sde0
(eine CF-Karte):Ich brauchte den separaten /boot
weil sd[a-d]
müssen ein verzögertes Hochfahren durchführen. Jetzt habe ich eine alte 2,5-Zoll-IDE-Festplatte gefunden, die ich als /
verwenden kann einschließlich /boot
damit ich alle großen Festplatten herunterfahren kann.
Was ich versucht habe Im Grunde 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, da Grub fragte, ob root gemountet sei.
Dann unternahm ich einen halbherzigen Versuch, /mnt/newroot/grub/grub.cfg
einzurichten um das Kernel-Image auf sdf5
zu finden , gefolgt von einem grub-install --root-directory=/mnt/newroot /dev/sdf
. Aber das brachte mir gerade eine Grub-Rescue-Eingabeaufforderung, als ich versuchte, von sdf
zu booten .
Mein Backup-Plan sieht nur eine Neuinstallation vor, also eine Bonusfrage (keine Häkchen für diese hier):Was muss ich tun, um meine lvm2- und mdadm-Konfiguration zu übertragen? Ist alles in den Dateisystemen gespeichert (und wird es automatisch entdeckt), oder muss ich es selbst übernehmen?
Lösung (danke an Maciej Piechotka):Wie Maciej betont, brauche ich eine richtige Chroot, damit alle Grub-Tools funktionieren. Als Referenz habe ich es so gemacht:
[email protected]:/mnt/newroot$ sudo cp -ax / /mnt/newroot
[email protected]:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot
Alle Dateien werden nun kopiert (siehe hier für eine Diskussion über Kopierstrategien). Korrigieren Sie das neue etc/fstab
um auf das neue Stammverzeichnis zu zeigen:
[email protected]:/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
Hängen Sie schließlich dev
ein ,sys
und proc
zum neuen root und chroot:
[email protected]:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
[email protected]:/mnt/newroot$ sudo mount -t proc none /mnt/newroot/proc
[email protected]:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
[email protected]:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on
[email protected]:/mnt/newroot$ sudo chroot .
Wir sind jetzt genau so, wie es aussehen wird, in den Future-Root chrooted. Laut Maciej sollte es in Ordnung sein, einfach grub-install
aufzurufen , aber ich habe ein update-grub
gemacht zuerst einen Blick auf die generierte /boot/grub/grub.cfg
zu werfen vor der Installation des Bootloaders. Ich bin mir nicht sicher, ob es automatisch aktualisiert wird?
[email protected]:/# update-grub
[email protected]:/# grub-install /dev/sdb
Akzeptierte Antwort:
Mounten Sie grundlegende Dateisysteme und kopieren/ändern Sie Dateien während des Chrootens wie:
- /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 auf Gentoo für mich funktioniert hat. Dann nach chroot zu /path/to/chroot
Befehl war einfach:
grub-install /dev/<boot_disk>
Ab lvm2 (und ich glaube, verrückt, aber ich habe es nicht benutzt) wird die Konfiguration auf der Festplatte gespeichert. Es gibt eine Konfiguration, die gelesen werden sollte, um Geräte zu erkennen. Angenommen, Ihre Geräte befinden sich an Standardstandorten (/dev/sd*
oder /dev/hd*
) sollte es kein Problem geben.
PS. Ich würde dem einfachen cp des Live-Systems nicht vertrauen, da es mehrere Stellen gibt, an denen es schief gehen kann:
- Vergessen,
/etc/fstab
zu ändern und andere nützliche Dateien - Dateien während des Zugriffs geändert
- Speichern von Müll (
/tmp
usw.)