wie kann ich das root device eindeutig identifizieren?

P

primitivwurzel

Jungspund
hallo,

ich versuche jetzt schon seit ein paar tagen meine neue externe usb-festplatte bootfähig zu machen. diese habe ich mit lvm eingerichtet. die initramdisk habe ich bereits fertig:

Code:
#!/bin/sh

echo "Start of initrd"

echo "Mounting filesystems"
mount -t proc none /proc
mount -t sysfs none /sys

echo "Waiting for USB-Devices (10 seconds)"
sleep 10

echo "Activating Volume-Groups"
lvm vgscan
lvm vgchange -ay

echo "Unmounting filesystems"
umount /proc /sys

echo "End of initrd"

daraufhin sollte das root-device gemountet werden, was ich im bootloader (grub) angebe

Code:
title 		Gentoo Linux 2.6.27-r7
kernel 		(hd0,1)/kernel-2.6.27-gentoo-r7 vga=868 quiet real_root=UUID=Av5W5U-dB42-Zlnh-DpvW-JpV6-vRXi-PoxIi9
initrd		(hd0,1)/initrd.gz

dieser grub ist auf der externen platte installiert.
dies klappt auch alles soweit ganz gut, aber das problem ist folgendes:
wenn ich jetzt mein normales system, auf meiner eigentlichen festplatte starten will mache ich das prinzipiell genau so.
es ist auch mit lvm eingerichtet und hat natürlich auch einen eigenen grub auf der platte. der eintrag dort sieht so aus:

Code:
title 		Gentoo Linux 2.6.25-r9-initrd
kernel 		(hd0,0)/kernel-2.6.25-gentoo-r9.initrd real_root=UUID=r33f90-Jjyu-kZfp-ueR0-loY9-8oRF-dB47Ji vga=868 quiet
initrd		(hd0,0)/initrd.gz

also es ist wie gesagt prinzipiell alles gleich, nur das ich eben die UUID geändert habe.
das problem ist folgendes:
ich habe meine externe platte angeschlossen und will das system auf der festplatte starten
dazu wähle ich zunächst, dass ich von der internen platte booten will und es erscheint der grub von der internen platte.
dort wähle ich dann den oben geposteten eintrag aus und dann wird das system, was auf der externen platte ist gebootet.

wenn ich beim normal gestarteten system (interne platte) lvdisplay ausführe steht bei dem device wo das root-verzeichnis des system auf der internen platte liegt als block device 254:1, wenn ich das selbe bei dem fälschlich von der externen platte gestarteten system ausführe dann steht eben diese angabe (254:1 als block device) bei dem device wo das root-verzeichnis des system auf der externen platte liegt. ich vermute, dass das damit zusammen hängt.

hat irgendwer eine idee wie ich das root-device richtig identifizieren kann? am besten über einen kernel-parameter den ich bei grub angeben kann? dann brauch ich nicht die initrd ändern ;)

mfg
primitivwurzel
 
Normalerweise sollte ein Parameter wie "root=/dev/sdXX" reichen, das sollte mit den UUIDS keinen Unterschied machen.

Ehrlichgesagt versteh ich das Problem das du hast nicht richtig.
 
danke für die antwort :)
das problem war eben das der trotz angabe der richtigen uuid einfach das andere system gebootet hat.
aber das hat sich inzwischen mehr oder weniger erledigt, da ich das jetzt einfach alles mit in die initrd schreibe ;)
dabei gibts nur ein bis zwei probleme:
1. wie kann ich mit mdev (oder eine ähnlichen programm das sich leicht in die initrd integriegen lässt) das verzeichnis /dev/disk/by-uuid/ richtig füllen?
2. wie kann ich dann am ende der initrd das system starten?
ich hab das schon mit pivot_root und switch_root und chroot und so weiter probiert, aber irgendwas mache ich immer falsch

wäre nett wenn ihr mir nochmal helfen könntet :)

mfg primitivwurzel
 
Ich bild mir eher ein, dass der Parameter für das rootfilesystem "root=..." und nicht "real_root=" ist.
 
okay, meine grub.conf sieht jetzt so aus:
Code:
default		1
timeout		10
splashimage	(hd0,0)/grub/splash.xpm.gz

title 		Gentoo Linux 2.6.25-r9 (primitiv-extern)
kernel 		(hd0,0)/kernel-2.6.25-gentoo-r9 vga=868 quiet ramdisk_size=15000 root=/dev/primitiv-extern/gentoo
initrd		(hd0,0)/initrd.gz
und meine linuxrc so:
Code:
#!/bin/sh

echo "Start of initrd"

echo "Mounting filesystems"
mount -t proc none /proc
mount -t sysfs none /sys

echo "Waiting for USB-Devices (10 seconds)"
sleep 10

echo "Starting mdev"
echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s

echo 'Mounting the USB-Stick to /mnt/stick'
mount UUID="32900195-0e94-43ee-9751-92a77208a01f" /mnt/stick

cryptdev=$(blkid|grep a10e2ef7-1162-496f-bbea-838c429f4167|dd bs=1 count=9 2>/dev/null)
keyfile=primitiv-extern.key

echo 'Opening the Luks-Partition (keyfile "'$keyfile'" from Stick)'
cryptsetup luksOpen $cryptdev primitiv-extern --key-file /mnt/stick/$keyfile || cryptsetup luksOpen $cryptdev primitiv-extern || /bin/sh

echo 'Unmounting the USB-Stick'
umount /mnt/stick

echo "Activating Volume-Groups"
lvm vgscan
lvm vgchange -ay

echo "Mounting root"
mount UUID="94c4ad29-771c-408c-add3-8b455cf3eaa3" /mnt/gentoo

echo "Unmounting filesystems"
umount /proc /sys

echo "Changing Root Device"
cd /mnt/gentoo
pivot_root . initrd
exec chroot . bin/bb -c 'exec /sbin/init' <dev/console >dev/console 2>&1

echo "End of initrd"

wenn ich jetzt boote, bekomme ich immer den fehler:
Code:
Usage: init 0123456SsQqAaBbCcUu

bitte helft mir, ich weiß langsam echt nicht weiter, ich hab auch schon bei google geschaut aber irgendwie hilft das alles nichts.....
 
Zuletzt bearbeitet:
so, es funktioniert jetzt, ich habe die busybox version zurückgestuft und ein bisschen was am script und der grub.conf geändert....
 

Ähnliche Themen

Gentoo, RAID1: "cannot open root device" (RAID nicht gefunden)

System hängt nach: JDB: barrier-based sync failed on md1-8 - disabling barriers

Kernel Panic Unable to mount root fs

Debian stable bleibt bei "io scheduler cfq registered (default)" haengen

Backup Skript automatisch ausführen mit udev

Zurück
Oben