Jürgen Keil wrote:
diskread: reading beyond end of ramdisk
       start = 0x2000, size = 0x2000
failed to read superblock


I believe this is a new bug, introduced by the fix for:

6344611 create_ramdisk needs to react less poorly to missing files or 
directories.

http://cvs.opensolaris.org/source/diff/on/usr/src/cmd/boot/scripts/create_ramdisk.ksh?r2=1.7&r1=1.6

Note how the test on line 99 tests for the existence of the wrong file; it is
missing the ${ALT_ROOT} file prefix.  This breaks creating ramdisk boot archives
on a server for diskless clients.  I guess it also breaks creating the ramdisk 
boot
archive during CD/Network installation (because the install target HDD is 
probably
mounted at "/a" and create_ramdisk is run with option "-R /a", and the getsize
shell function computes a bogus ramdisk size estimate - unless it is run from 
the
"/a" directory).


I've filed the following bug on bugs.opensolaris.org
(Sorry, I've not yet got the CR / bug id):

6353553..

cheers,
steve
=================================================================

In snv_27 /boot/solaris/bin/create_ramdisk is badly broken, it cannot build
boot archives for a Solaris installation in an alternate root any more:

Example (diskless client):

# cd /tmp
# pwd
/tmp
# /export/root/moritz/boot/solaris/bin/create_ramdisk -R /export/root/moritz
Creating ram disk on /export/root/moritz
updating /export/root/moritz/platform/i86pc/boot_archive...this may take a 
minute
Could not seek to offset -1 in /tmp/create_ramdisk.3228.tmp/rd.file: Invalid 
argument
mount: I/O error
mount: Cannot mount /dev/lofi/1
umount: warning: /tmp/create_ramdisk.3228.tmp/rd.mount not in mnttab
umount: /tmp/create_ramdisk.3228.tmp/rd.mount not mounted
rmdir: directory "/tmp/create_ramdisk.3228.tmp/rd.mount": Directory not empty


Root cause: the getsize shell function in boot/solaris/bin/create_ramdisk
estimates a size of 0 KBytes for the ramdisk.

    94  function getsize {
    95          # Estimate image size, add %10 overhead for ufs stuff
    96          total_size=0
    97          for file in $filelist
    98          do
    99                  if [ -e $file ] ; then
   100                          du -sk ${ALT_ROOT}/${file} | read size name
   101                          (( total_size += size ))
   102                  fi
   103          done
   104          (( total_size += total_size * 10 / 100 ))
   105  }


Of cause the test at line 99 must test "${ALT_ROOT}/${file}", not "$file" !

Workaround:
===========

run create_ramdisk with the current directory set to the alternate root
directory; with the example above:

    # cd /export/root/moritz
    # /export/root/moritz/boot/solaris/bin/create_ramdisk -R /export/root/moritz
Suggested Fix:
==============

--- usr/src/cmd/boot/scripts/create_ramdisk.ksh~        2005-11-14 
22:11:41.000000000 +0100
+++ usr/src/cmd/boot/scripts/create_ramdisk.ksh 2005-11-19 20:32:19.401462000 
+0100
@@ -96,7 +96,7 @@
        total_size=0
        for file in $filelist
        do
-               if [ -e $file ] ; then
+               if [ -e ${ALT_ROOT}/$file ] ; then
                        du -sk ${ALT_ROOT}/${file} | read size name
                        (( total_size += size ))
                fi
This message posted from opensolaris.org
_______________________________________________
opensolaris-discuss mailing list
[email protected]


--
stephen lau // [EMAIL PROTECTED] | 650.786.0845 | http://whacked.net
opensolaris // solaris kernel development
_______________________________________________
opensolaris-discuss mailing list
[email protected]

Reply via email to