Bug 51770 - when kernel loads just created initrdfile, it panics
when kernel loads just created initrdfile, it panics
Status: CLOSED NOTABUG
Product: Red Hat Public Beta
Classification: Retired
Component: mkinitrd (Show other bugs)
roswell
i386 Linux
medium Severity medium
: ---
: ---
Assigned To: Matt Wilson
David Lawrence
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2001-08-14 17:59 EDT by lethalwp
Modified: 2007-04-18 12:35 EDT (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2001-08-24 12:26:33 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
initrd done with mkinitrd initrdttt.img 2.4.8 (318.31 KB, application/octet-stream)
2001-08-24 09:50 EDT, lethalwp
no flags Details
my rpm -qa |sort >rpmlist.txt (10.17 KB, text/plain)
2001-08-24 10:00 EDT, lethalwp
no flags Details
my fstab (851 bytes, text/plain)
2001-08-24 11:31 EDT, lethalwp
no flags Details
my lilo.conf (626 bytes, text/plain)
2001-08-24 11:31 EDT, lethalwp
no flags Details

  None (edit)
Description lethalwp 2001-08-14 17:59:45 EDT
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010808

Description of problem:
after doing a mkinitrd file 2.4.8 && edit lilo.conf && lilo
2.4.8 refused to startup, till i edit the linuxrc file

Version-Release number of selected component (if applicable):


How reproducible:
Didn't try

Steps to Reproduce:
1.rpm -e kernel kernel-headers --nodeps
2.compile new kernel && ln -s /usr/src/linux/include/linux
/usr/include/linux && same for asm
3. mkinitrd /boot/initrd2.4.8.img 2.4.8
4. edit lilo.conf && run lilo
5. reboot
	

Actual Results:  kernel panic showing errors about (pivot_root /sysroot
/sysroot/initrd)
and afterwards a 'No init found'
(/sbin/init is present on the rootdevice, but apparently it was badly mounted)

Expected Results:  begin of /sbin/init && rc.sysinit

Additional info:

when editing the linuxrc contained in the initrd:
i can read:

#!/bin/nash                                                               
                                                                          
               
                                                                          
                                                                          
               echo "Loading sd_mod module"                               
                                                                          
                              
insmod /lib/sd_mod.o                                                      
                                                                          
               
echo "Loading aic7xxx module"                                             
                                                                          
               
insmod /lib/aic7xxx.o                                                     
                                                                          
               
#mount -t proc /proc /proc                                                
                                                                          
                
#echo Mounting /proc filesystem                                           
                                                                          
                
#echo Creating root device                                                
                                                                          
                
#mkrootdev /dev/root                                                      
                                                                          
                
#echo 0x0100 > /proc/sys/kernel/real-root-dev                             
                                                                          
                
#umount /proc                                                             
                                                                          
                
#echo Mounting root filesystem                             
                                                                          
                
#mount --ro -t ext2 /dev/root /sysroot                                    
                                                                          
                
#pivot_root /sysroot /sysroot/initrd                                      
                                                                          
                
                                   
(i had to remark those lines to get the bootproces working)

when i looked for a binary called mkrootdev, but haven't found it (neither
in the initrd, neither on the existent system), i suppose that is the cause

i also did a :

for i in *.rpm; do ( if ( rpm -qlp $i | grep mkrootdev ) ; then echo $i ;
fi ) ; done

in the rpmdir of the roswell cds, haven't found any infos about some mkrootdev
Comment 1 Matt Wilson 2001-08-23 18:17:46 EDT
there should be more errors (from the mount command, perhaps) further up the log.
Comment 2 lethalwp 2001-08-24 09:50:28 EDT
Created attachment 29355 [details]
initrd done with mkinitrd initrdttt.img 2.4.8
Comment 3 lethalwp 2001-08-24 09:59:10 EDT
I have attached the initrdfile created, it panics just after loading the scsi
module, but there are no traces in the logs (which is normal, because the root
drive isn't mounted yet), anyway here are the messages:
---Afterscsimoduledetectionblablablayadayada
Mounting /proc filesystem
Mounting root filesystem
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed:2
Freeing unused kernel mem: 232k freed
Kernel panic: No init found. Try passing init option to kernel.

here is the version used of mkinitrd:
Creating root device[lethalwp@little RPMS]$ rpm -qa |grep initrd
mkinitrd-3.1.5-1


I'm also putting as attachment a rpm -qa >rpmlist.txt
I have to admit i haven't used the install of the roswell cds when upgrading
from my 7.1, i did the update all manually using rpm -F (which was way 'longer'
to do than wolverine -> 7.1 :/, a lot of new packages needed...)

Again, for me, it is calling some devfile or so that does not exist?

Kernel used if 2.4.8 homecompiled (using the latest rpm of redhat .config, with
a make oldconfig or so, changing some little stuff)

Comment 4 lethalwp 2001-08-24 10:00:20 EDT
Created attachment 29356 [details]
my   rpm -qa |sort >rpmlist.txt
Comment 5 Matt Wilson 2001-08-24 10:11:47 EDT
Are you sure?  It should have said:

Mounting /proc filesystem
Creating root device
Mounting root filesystem
Comment 6 lethalwp 2001-08-24 10:39:40 EDT
Yup sorry, copy/paste that went wrong it did say:

---Afterscsimoduledetectionblablablayadayada
Mounting /proc filesystem
Creating root device
Mounting root filesystem
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed:2
Freeing unused kernel mem: 232k freed
Kernel panic: No init found. Try passing init option to kernel.


Comment 7 Matt Wilson 2001-08-24 10:44:14 EDT
does your root filesystem have an ext3 journal file on it?
Comment 8 lethalwp 2001-08-24 10:52:48 EDT
Nope, it is "good old" ext2
but what i don't understand is the following:
[lethalwp@little lethalwp]$ locate mkrootdev
[lethalwp@little lethalwp]$ 

I have no mkrootdev file (same kind of result with find of course)
How can it make the 'rootdev' if the program it is calling is not present?
Comment 9 Matt Wilson 2001-08-24 11:23:07 EDT
no, these are special nash commands.  They are built in to nash.  The initrd is
way too small to have a full runtime environment for a shell and commands.
Comment 10 Matt Wilson 2001-08-24 11:24:37 EDT
What device is your root filesystem on?  What bootloader are you using?  Can you
upload your bootloader config file?
Comment 11 lethalwp 2001-08-24 11:30:13 EDT
I have done a little more digging, but can be wrong: and remarked this:

actually: [root@little kernel]# cat real-root-dev
2066
which is  0x812  (hrm, but root is on  brw-rw----    1 root     disk       8, 
18 Jul 18 17:58 /dev/sdb2
so i was expecting 0x818 or so?)
Anyway, in the linuxrc file i can read:  
mkrootdev /dev/root                                                      
echo 0x0100 > /proc/sys/kernel/real-root-dev   

I presume: 0x0100 is brw-rw----    1 root     disk       1,   0 Jul 18 17:58
/dev/ram0) which is not the real needed root?


And, to end, i've read this little info in the
/usr/src/linux/Documentation/initrd.txt:

"Obsolete root change mechanism
------------------------------

The following mechanism was used before the introduction of pivot_root.
Current kernels still support it, but you should _not_ rely on its
continued availability. ... ... ..."
Which explain the use of echo something>real-root-dev

I'm lost on this, why trying to implement the use of real-root-dev? What is the
need of pivot_root? I thought that once the linuxrc was ended, initrd was
cleaned up,and kernel mounted the root by its own (using rdev or lilo setup)

And actually, it's this last method i am using to get it working

Adding lilo.conf & fstab scripts in a tiffy ;)

Comment 12 lethalwp 2001-08-24 11:31:08 EDT
Created attachment 29375 [details]
my fstab
Comment 13 lethalwp 2001-08-24 11:31:46 EDT
Created attachment 29376 [details]
my lilo.conf
Comment 14 Matt Wilson 2001-08-24 11:36:23 EDT
18 decimal == 0x12.
Comment 15 Matt Wilson 2001-08-24 11:40:23 EDT
you'll notice we're using pivot_root now.  What we're doing is tricking the
kernel into thinking that the real-root-device is the ramdisk (which is really
the initrd).  This means that the kernel won't be doing anything at all when
linuxrc ends except for exec'ing /sbin/init.
Comment 16 lethalwp 2001-08-24 12:26:29 EDT
you've told me initrd was to little to put a bash in it, but that gave me the
idea of doing it... giving it 8MB of ram, bash, ls, cat, + libs

anyway, i have found the explanation, which is quite ridiculous, and was so
evident :(

after the:
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed:2
in the bash, i've seen my rootdev was correctly mounted in /sysroot
and then checking /sysroot/initrd: no such directory, so i've made one, and the
system was able to boot.

I really do not understand the need of using that 'tempdir', which, if deleted,
will stop the whole bootsequence?


But, if i may ask one little last question:
kernel said: real-root-dev: 2066  which is in hex=818  and you' telling me to
take those number appart?, and convert 8->hex  and 18->hex?
(A Yes/No question ;) )


Thank you for helping, well-done ;)
Greetz, lethalwp
Comment 17 Matt Wilson 2001-08-24 12:30:46 EDT
run "rpm -y mkinitrd" - it required a new RPM of filesystem which made the
directory, it seems you don't have that installed...


Note You need to log in before you can comment on or make changes to this bug.