Hallo, Am Tue, 05 Apr 2011, Thomas Moritz schrieb:
Am Dienstag, 5. April 2011 11:31:21 schrieb David Haller:
Am Tue, 05 Apr 2011, Thomas Moritz schrieb:
Am Dienstag, 5. April 2011 07:38:13 schrieb David Haller:
Das was du angehängt hast ist jew. ein generischer BR (der die aktive Partition startet, jedenfalls kein Grub), der 2te Sektor ist der zweite Teil eines Grubs.
Ich klemme nun noch einmal 1024 hinten ran. Diese sind von der jetzt funktionierenden CF-Card. Hier kann ich ausser der Partitionstabelle keinen Unterschied zu dem gestrigen Versuch feststellen. Nur eben, dass diese CF jetzt rennt!
Naja, kommt halt drauf an, was im ersten Sektor der aktiven Partition steckt ;) Ist jetzt ne Linux-Partition:
Ich zitiere mal Deine letzte Mail: Ab 0x01be beginnt die Partitionstabelle, hier ab dem 80 20 21 00 83 wobei das 83 der FS-Typ der ersten Partition ist, die bei Sektor 3F (=63) beginnt.
OK, also auch eine Linux-Partition. Alles andere haette mich auch verwundert! Ich hatte ja die zweite CF-Card neu Partitioniert und Formatiert: 1.Partition 1GB Linux/ext4 2.Partition Rest Windows/mkfs.msdos -F32
Jep, das passt. Übrigens, das "aktiv"-Flag ist das erste Byte eines Partitionseintrags, wenn 0x00 ist nix, wenn 0x80 ist die Partition aktiv.
$ od -Ax -tx1z /dev/shm/dh/4gb_sdd.img | less 0001be 80 20
........Çf?UÏÉ. < 0001c0 21 00 83 0d 0a 83 00 08 00 00 00 18 20 00 >!........... ...< ^^ FS-Typ Byte
und ne FAT32-LBA Partition:
0001ce 00 0d
!........... ...< 0001d0 0b 83 0c fa 54 e6 00 20 20 00 00 40 57 00 >...úTæ. ..@W...< ^^ FS-Typ Byte
Der generische/DOS BR interessiert sich genau gar nicht für den Folgesektor mit dem Grub-Rest, der knüppelt einfach den ersten Sektor der aktiven Partition in den Speicher und startet den darin befindlichen Code. Hat man z.B. GRUB in die Linux-Root-Partition installiert, dann startet eben der.
Da ich von der "lauffaehigen" Karte (grub in Linux-Root-Partition) die ersten 446B nach /dev/sdd1 (neue CF) kopiert hatte, sollte doch grub gestartet werden koennen.
Nein! Flasch! GRUB braucht mind. 2 Sektoren (siehe Sektor 2 der CF-Karte, da steckt auch noch Grub drin, siehe meine vorigen Mails). Den ersten Sektor von GRUB erkennst du an dem String: # od -Ax -tx1z /boot/grub/stage1 |less 000180 fe 47 52 55 42 20 00 47 65 6f 6d 00 48 61 72 64 >þGRUB .Geom.Hard< 000190 20 44 69 73 6b 00 52 65 61 64 00 20 45 72 72 6f > Disk.Read. Erro< Bei ner HDD-Installation fehlt da aber dann Stage 1.5: # od -Ax -tx1z /boot/grub/e2fs_stage1_5 |less 000100 00 eb fe 4c 6f 61 64 69 6e 67 20 73 74 61 67 65 >.ëþLoading stage< 000110 31 2e 35 00 2e 00 0d 0a 00 47 65 6f 6d 00 52 65 >1.5......Geom.Re< 000120 61 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd >ad. Error.»..Ž.Í<
Den MBR (446B) hatte ich auch nach /dev/sdd (neue CF) kopiert!
Ok, also den generischen Boot-Code, das war korrekt.
Was war nun eigentlich an meiner beschriebenen Vorgehensweise falsch?
Dem Grub fehlt stage1.5. Deswegen gibt's: grub-install.unsupported /dev/sdd (aber s.u.)!
*lauffaehige CF-Card (nicht eingebunden) -MBR #dd if=/dev/sdd of=/hier/mbr.img bs=446 count=1
ok, (generischen) Bootcode ausgelesen
-Bootsector / #dd if=/dev/sdd1 of=/hier/bsl.img bs=446 count=1
Hiermit liest du max. stage1 vom Grub aus.
*CF-Card einbinden -Daten #rsync -avxXHAS /media/disk/ /hier/hin/
**neue CF-Card (nicht eingebunden) -fdisk (Partitionierung s.oben) -mkfs.ext4 /dev/sdd1 -mkfs.msdos -F32 /dev/sdd2 -dd if=/hier/mbr.img of=/dev/sdd bs=446 count=1
ok, generischen Bootcode in den MBR
-dd if=/hier/bsl.img of=/dev/sdd1 bs=446 count=1
Hier fehlt dem Grub dann stage1.5 und vor allem fehlt dem dann, wo er seine menu.lst und stage2 findet. Deswegen: grub-install (aber s.u.)!.
**/dev/sdd1 einbinden -rsync -avxXHAS /hier/hin/ /media/disk/
Beide Partitionen liessen sich problemlos mounten! Warum wurde grub beim Systemstart im PC104 nicht gefunden? DISK BOOT FAILURE...
s.o.
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. 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. 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. HTH, -dnh -- It is traditional, when loading wire trolleys, to put the most fragile items at the bottom. -- Terry Pratchett, Reaper Man -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org