Hallo, David Haller schrieb:
Am Tue, 05 Apr 2011, Thomas Moritz schrieb:
Ich muss das Szenario noch 2x auf verschieden-grossen CFs durchfuehren und werde dabei den HexDump beobachten! Bin gespannt, wann genau da was schief laeuft.
Lies auch mal 'info grub' ;) Da steht genau drin, was wie gebooted wird. Und -- wenn du nicht per "aktiver Partition" zur FAT umschalten willst: schreib GRUB einfach in den MBR.
Bedeutet das, dass man einen Boot-Sektor-GRUB (BS-GRUB) direkt vom BIOS starten lassen kann, indem man das Aktiv-Flag der Partition, in der der BS-GRUB installiert ist, setzt? Also ohne Boot-Code im MBR? Noch eine Frage, anknüpfend an die Diskussion, die wir kürzlich hatten, mit einer kurzen Vorbemerkung: Es scheint wirklich so zu sein, dass mein BIOS meine eSATA-Platte immer an die zweite Stelle hinter der Boot-Platte setzt, obwohl sie eindeutig als dritte Platte im BIOS-Setup eingereiht ist. Durch lsscsi im selben System wird die Platte auch immer an der selben Stelle angezeigt, egal ob sie schon beim Booten drin war oder erst später eingeschoben wurde: # lsscsi [3:0:0:0] disk ATA WDC WD5000BEVT-0 01.0 /dev/sdg [4:0:0:0] disk ATA OCZ-VERTEX2 3.5 1.22 /dev/sda [5:0:0:0] disk ATA ST3500630AS 3.AA /dev/sdb Also immer [3:0:0:0], mal als /dev/sda (beim Booten schon drin; unter den ATA-Geräten sogar das erste, hat aber nichts mir der Einreihung durch das BIOS zu tun), mal als /dev/sdg (ins laufende System eingesteckt). Nun die Frage: kann es sein, dass ein Aktiv-Flag in einer Partition auf der eSATA-Platte dazu führt, dass sie vom BIOS an die zweite Stelle eingereiht wird? # fdisk -l /dev/sdg Disk /dev/sdg: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0005df91 Device Boot Start End Blocks Id System /dev/sdg1 * 1 523 4200966 82 Linux swap / ... /dev/sdg2 524 536 104422+ 83 Linux /dev/sdg3 537 3147 20972857+ 83 Linux /dev/sdg4 3148 60801 463105755 83 Linux Verstehe eh nicht, wieso die Swap-Partition als aktiv markiert ist, ist doch überflüssig.
Da du ja nicht das aktuelle System (dessen menu.lst) verwenden willst mußt du entweder ein chroot in die gemountede CF (sdd1) machen, oder GRUB ohne 'grub-install' manuell dort installieren (IIRC):
# mount /dev/sdd1 /mnt/sdd1 # mount -o bind /proc /mnt/sdd1/proc # mount -o bind /dev /mnt/sdd1/sys # mount -o bind /sys /mnt/sdd1/dev # chroot /mnt/sdd1 # grub grub> setup --stage2=/boot/grub/stage2 (hd0) (hd0,0) grub> quit
grub> help setup setup: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba[=off]] INSTALL_ DEVICE [IMAGE_DEVICE] Set up the installation of GRUB automatically. This command uses the more flexible command "install" in the backend and installs GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified, then find the GRUB images in the device IMAGE_DEVICE, otherwise use the current "root device", which can be set by the command "root".
-> Das "IMAGE_DEVICE" ist, wo GRUB dann stage2 und die menu.lst sucht.
Du kannst natürlich auch weiter in die /-Partition installieren:
grub> setup --stage2=/boot/grub/stage2 (hd0,0) (hd0,0)
Wobei da die /boot/grub/device.map den passenden Eintrag haben muß, daß (hd0) == CF-Karte.
Wieso, Du verwendest doch auch für die Root-Partition nur GRUB-Gerätebezeichner. Ich war bisher der Meinung, dass die device.map nur von grub-install[.unsupported] gebraucht wird, weil als Argumente für dieses Skript Linux-Gerätebezeichner (/dev/sdXy) übergeben werden können. Den Versuch, die Zuordnung zwischen Linux- und GRUB-Gerätebezeichnern für die device.map mit der Option --recheck 'erraten' zu lassen, halte ich inzwischen sogar nur dann für sinnvoll, wenn man das genau in dem laufenden System macht, für das man GRUB gerade installieren möchte. Installiert man GRUB aus einem z.B. von DVD gestarteten externen System für ein auf Platte installiertes System, dann sollte man das IMHO am besten in einer GRUB-shell, wie Du es oben gezeigt hast, machen. Man muss sich dann nur klar über die Reihenfolge der Laufwerke sein, die das BIOS an den GRUB das gerade laufenden Systems gemeldet hat.
Wenn's dann klemmt mußt du gucken, als was das device im Grub von CF-gebootet auftaucht (da hilft dann z.B. 'find /boot/grub/menu.lst' am grub-Prompt.
Wenn man mehrere Platten bzw. Partitionen mit GRUB drauf hat, kann man so leider das Gerät nicht identifizieren, weil find mehrere hd(x,y) findet :-( Gruß, Tom -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org