[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: GRUB2: von anderer Partition booten



Hallo zusammen,

ich habe jetzt mit Hilfe von zahlreichen Neuinstallationen auf einem
Testsystem einen Weg gefunden, wie man im laufenden System das
Boot-/Root-Device ändern kann. Das will ich hier mal kurz aufschreiben,
damit evtl. andere profitieren können. Und vielleicht gibts ja auch
Verbesserungsvorschläge.

Ausgangssituation:
Debian Squeeze startet derzeit von /dev/sdb1 (xfs).

Ziel:
Das System soll von /dev/mapper/volgrp-logvol starten. Die
LVM-Volumegrup sitzt auf einem Softraid-Device, bestehend aus /dev/sda1
und /dev/sdc1.


Die Schritte:

1. Neuen Booteintrag anlegen

	cp /etc/grub.d/40_custom /etc/grub.d/09_custom

Die Datei 09_Custom wird sodann angepaßt. Als erstes habe ich mir den
aktuellen Startabschnitt aus der /boot/grub/grub.cfg rauskopiert:

menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' \
		--class debian --class gnu-linux --class gnu --class os {
	insmod part_msdos
	insmod xfs
	set root='(hd1,msdos1)'
	search --no-floppy --fs-uuid --set 3ce6963a-
c8c8-40f9-8418-6b9abe2f96d4
	echo	'Loading Linux 2.6.32-5-amd64 ...'
	linux	/boot/vmlinuz-2.6.32-5-amd64 \
		root=UUID=3ce6963a-c8c8-40f9-8418-6b9abe2f96d4 ro  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/initrd.img-2.6.32-5-amd64
}

Die zu ladenden Module sind:

	insmod raid
	insmod mdraid
	insmod lvm
	insmod part_msdos
	insmod part_msdos
	insmod ext2

Alle anderen Module, insbesondere in meinem Fall xfs, rauswerfen. Daß
das Modul part_msdos zweimal auftaucht ist vermutlich überflüssig.
Allerdings legt der Debian-Installer das genau so an, wenn man gleich so
installiert, wie es meinem Ziel entspricht. Also habe ich es einfach
übernommen.

Die Zeile "set root=…" wird geändert zu:

	set root='(volgrp-logvol)'

Die Zeile "linux /boot/vmlinuz…" wird geändert zu:

	linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/mapper/volgrp-logvol	\
		ro quiet

Hier also UUID rauswerfen, und das logische Volume einsetzen.


2. fstab anpassen
Die fstab muß so angepaßt werden, daß der bisherige root-Eintrag nicht
mehr UUID=… lautet, sondern so:

	/dev/mapper/volgrp-logvol   /  ext3 […Rest der Zeile…]


3. Die Änderungen bekannt machen

	update-grub
	update-initramfs -u -kall
	grub-install /dev/sda
	grub-install /dev/sdb
	grub-install /dev/sdc


4. System aufs neue root kopieren

	mount /dev/mapper/volgrp-logvol /mnt
	rsync -avxHSAX / /mnt

Ja, das funktioniert wirklich. Ich habe das jetzt x-Mal ausprobiert, und
man kann wirklich im laufenden System einfach umkopieren. Das läuft
nachher einwandfrei. Hat jemand hier schon mal gegenteiliges beobachtet?
In meinem Fall wars eine Minimalinstallation. Wenn natürlich eine
Datenbank o.ä. läuft, dann wird man die wohl anhalten müssen. Aber
ansonsten funktioniert das.


5. Reboot
Jetzt ein Reboot, und die Kiste startet schon so, daß das neue root
gemountet ist. Nun habe ich sicherheitshalber noch gemacht:

	dd if=/dev/zero of=/dev/sdb
	update-grub
	grub-install /dev/sda
	grub-install /dev/sdb
	grub-install /dev/sdc

Damit mache ich zunächst das alte root-FS platt, und mit update-grub
verschwinden dann auch alle Hinweise auf die alte UUID aus den Dateien
in /boot/…, weil update-grub nichts mehr davon findet. 


Das wars, so habe ich dann letztlich auch den Produktivserver umgezogen,
und es hat funktioniert.

Ich kann hier auf jeden Fall nur empfehlen, so eine Operation zuerst an
einem Testsystem vorzunehmen, v.a. dann, wenn das Zielsystem entfernt
steht, und man nicht eingreifen kann, wenn der Boot-Prozeß hängt.

So, vielleicht hilft das hier ja mal jemandem. Und vielleicht hat auch
jemand noch Anmerkungen, ob man irgendwas schneller oder besser machen
kann.

Viele Grüße!


-- 
Andre Tann


Reply to: