Home > Blog > PE1950 installation hassle

PE1950 installation hassle

August 21st, 2008 Leave a comment Go to comments

Installing debian etch (40r4a) on a Dell PowerEdege 1950 with SAS disks was not to easy. Debian crashed the fist reboot after the install, because of not loading or finding the correct module in initrd. The second issuse was swaping the drive from sdb to sda.

This is how I fixed it:

Don’t restart after installing debian. When the reboot prompt shows switch to vt2 (Alt-F2).

Edit /etc/initramfs-tools/modules with the output from lsmod, in my case it was mptsas. Next you need to edit /etc/fstab and /boot/grub/menu.lst so that sdb is changed to sda.

# chroot /target
# echo mptsas >> /etc/initramfs-tools/modules
# update-initramfs -u
# edit /etc/fstab (to change sdb by sda)
# edit /boot/grub/menu.lst (to change sdb by sda)
# reboot
Categories: Blog Tags: , ,
  1. Wie anders
    September 29th, 2008 at 22:29 | #1

    Sjenis, DJ, het wordt nog wat met U.

    Wattie ook zou kenten doen om die wisseltruuk te voorkomen voor /dev/sda en /dev/sdb met maar 1 SCSI controllert is …… wacht, ff opzoekoe hoe ik het ook alweder had gedaan …… ah ja, in /boot/grub/menu.lst hettie ergens
    ## e.g. kopt=root=/dev/hda1 ro
    ## kopt_2_6_8=root=/dev/hdc1 ro
    ## kopt_2_6_8_2_686=root=/dev/hdc2 ro
    # kopt=root=/dev/sda1 ro

    Dit staat na installatie tot nu toe op sdb1 bij het regeltje “# kopt=root=/dev/sda1 ro”, verknetterd kan ik je wel zeggen. Verander dit dus in sda1 en verder op komt alles ook goed na een reboet.

    Hier halen de volgende regels in de /boot/grub/menu.lst

    title Debian GNU/Linux, kernel 2.6.18-6-amd64
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.18-6-amd64 root=/dev/sda1 ro
    initrd /boot/initrd.img-2.6.18-6-amd64
    savedefault

    title Debian GNU/Linux, kernel 2.6.18-6-amd64 (single-user mode)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.18-6-amd64 root=/dev/sda1 ro single
    initrd /boot/initrd.img-2.6.18-6-amd64
    savedefault

    namelijk hun default setting vandaan.

    Nu kentie ook een kernel upgrade doen zonder wederom deze setting in /boot/grub/menu.lst te hoeven aanpassen.

    Tjuus,

    Toine

  2. Wie anders
    September 29th, 2008 at 22:43 | #2

    Kentie niet wat uitgebreider ingaan op zijn oplossing met het initramfs?

    Dan hoef ik dat niet uit te zoeken.

    Tjuus,

    Toine

  3. wie andex
    October 7th, 2008 at 13:12 | #3

    Kenten we dit niet als algemene opslag / kennisbank gaan gebruiken?

  4. Wie andex
    January 20th, 2009 at 14:17 | #4

    Ff kijken.

    Dat ding boet en dit is wattie doet:

    Je hebt dus eerst een stage 1 boetlader. Die is hier niet zo interessant. Dat wordt pas het stage 2 boetproces. Deze beide te samen worden GRUB danwel LILO genoemd.

    Deze stage 2 boetlader laadt de kernel, maar niet zomaar een kernel, nee dat ding waar jij het over hebt. LILO zuigt t.o.v. GRUB, want deze kent niet op filesysteem (extfs2 / extfs3)niveau kijken ofter een kernel aanwezig is. Doettie nl. op het rauwe apparaat. Is dat wattan?

    Hoe doentie dattan? GRUB maakt er i.p.v. een 2 stage boetproces, een 3 stage boetproces van. Het stage 1 boetproces boet een stage 1.5 boetlader dat het bestandssyteem snapt alwaar de linux kernel zich bevindt. Kijkt maar in de /boot/grub directorie naar de *1_5 bestanden. Dus reiserfs_stage1_5 voor het reiser bestandssysteem. e2fs_stage1_5 voor het ext2 en ext3 bestandssysteem. Daarna laadt deze het stage 2 boetproces.

    Als stage 2 (/boot/grub/stage2) geladen is, dan laat GRUB een lijst zien met kernels die beschikbaar benten, gedefinieerd in /etc/grub.conf (wat een softlink is naar /boot/grub/grub.conf, evenals /boot/grub/menu.lst, maar dit even terzijde).

    Tevens haalt /boot/grub/stage2 van het bestandssysteem de standaard kernel en de initrd.

    Zodra de kernel in het geheugen zit en controle heeft gekregen van het /boot/grub/stage2 proces gatie los. De kernel is geen executeerbaar bestand, maar een ingepakt kernel plaatje. Doorgaans een zImage (kleiner dan 512 kilobytes) of een bzImage (groter dan 512 kilobytes), ingepakt met zlib. Aan het kopje van dit kernel plaatje zit een routine die wat minimale hardware opzet, daarna de kernel uitpakt en deze in het hoge geheugen zet. Als er een initieel ramdisk plaatje aanwezig is, laadt de routine deze in het geheugen en onthoudt hems voor later gebruik. Daarna roeptie de kernel aan en het kernel boetproces begint.

    Als het bzImage (x86) is aangeroepen, begintie bij de ./arch/i386/boot/head.S start() assembler routine. Deze routine zet weder wat hardware klaar en roept de ./arch/i386/boot/compressed/head.S startup_32() routine aan. Deze zet een basis omgeving in elkander (beetje stapel, beetje hoop, beetje wijzert) en leegt de B(lock) S(tarted) by S(ymbol). Moek nog wat verder uitzoeken hoe dat zit. Hierna wordt de kernel uitgepakt door een aanroep naar de functie decompress_kernel() (./arch/i386/boot/compressed/misc.c). Alstie klaar is met uitpakken, wordt de functie startup_32() (./arch/i386/kernel/head.S) aangeroepen.

    In deze functie (ook wel genaamd de wisselaar of proces 0) worden de pagina tafels geinitialiseerd en geheugen paginering aangezet. Het type C(entrale)V(erwerkings)E(enheid) wordt gedetecteerd en de eventueel aanwezige D(rijvende)V(erwerkings)E(enheid). Deze worden bewaard voor later gebruik.

    Hierna wordt de start_kernel() functie aangeroepen van ./init/main.c die je meeneemt op tour naar de niet van architectuur afhankelijke kernel. Dit is in essentie de main() functie van de kernel.

    start_kernel() initialiseerd o.a. interrupts, verdere geheugen initialisatie en de initrd (de ramdisk). Hierna wordt kernel_thread() aangeroepen (arch/i386/kernel/process.c) die de init() functie aanroept, het eerste gebruikers programma. Als laatste wordt het werkschuwe proces (idle proces) aangeroepen en de regelaar (scheduler) neemt de taken waar. Met alle interrupts op zijn plaats kan de regelaar preventief processen van de verwerkingseenheid halen en er weder opzetten, zodat een soort van multi-taken afhandeling ontstaat.

    Tijdens het boeten van de kernel wordt de initiele ramdisk in het geheugen gezet door het stage 2 boot proces en gemount. Deze ramdisk dient als tijdelijk root bestandssysteem en zorgt ervoor dat de volledige kernel kan boeten zonder dat er fysieke bestandssystemen zijn gemount. Volop biek & gers dus, want hierdoor komen we bij jou oplossing nl. dat de benodigde modules om met de hardware te kunnen praten hierin kenten worden geplaatst.

    Door initrd kan je een hele kleine kernel maken met drijvers die als laadbare modules zijn gecompileerd. Deze laadbare modules bieden de kernel de mogelijkheid om disken te benaderen en daarmee de bestandssystemen op deze disken en hiermede drijvers voor andere apparaten. Sjenis en dit gaat dus fout, de volgorde van het laden. Nou, daar waren we al achtert, lekker verhaal weder, dit. Nou bent ik er nog niet goed uit, maar we zijn weder wat dichter bij de waarheid gekomen.

    Het echte root bestandssysteem staat op disk, door de initrd functionaliteit kan deze dus later geladen worden en gemount waardoor die de ramdisk vervangt als root bestandssystemen. Bij ingebedde systemen kan je er voor kiezen de initrd te houden.

    P.S. Wat nader onderzoek op een demiun machine waar ik de bron code van naar beneden geladen hebt wijst uit dat het toch weder eventueel anders werkt. Sjenis, ook dat moet ik dan weder uitzoeken.

  5. January 20th, 2009 at 15:06 | #5

    Hey slabberdewapski,

    Wat een interessant verhaal! Maar wel een hele lange inleiding om tot de kern van het probleem te komen.. wat nog steeds in lichte nevel gehuld is. Zou het niet biek zijn als ik het je morgen avond zal uitleggen?

    Tjuus

  6. January 20th, 2009 at 16:48 | #6

    Ow, ik had op verfris moeten drukken, dan had ik mijn meeltje niet te hoeven sturen.

  7. January 20th, 2009 at 18:22 | #7

    Doetie oplossing van jou het ook goed na een rieboet? Of statie dan weder op sdb1?

  1. No trackbacks yet.