Bug 8056 - mkbootdisk fails on LS-120 (Superdisk) IDE drives
Summary: mkbootdisk fails on LS-120 (Superdisk) IDE drives
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: mkbootdisk
Version: 6.1
Hardware: i386
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Matt Wilson
QA Contact:
URL:
Whiteboard:
: 8275 (view as bug list)
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 1999-12-30 00:38 UTC by Terry Griffin
Modified: 2008-05-01 15:37 UTC (History)
0 users

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2001-01-11 17:22:47 UTC
Embargoed:


Attachments (Terms of Use)

Description Terry Griffin 1999-12-30 00:38:42 UTC
The mkbootdisk utility fails to work with LS-120 (a.k.a. SuperDisk) IDE
drives. The target system in this case was an ASUS ME-99 based system with
LS-120 aware BIOS, an LS-120 drive installed as /dev/hdb, and no
conventional floppy disk drive. A quick search of USENET showed others
having similar problems on laptops that had LS-120 drives instead of
conventional floppy drives.

Hacking mkbootdisk to create a boot floppy in an LS-120 drive was easy
enough, but the resulting disk was not bootable in that same drive. It hung
up after printing out the letters "LIL".

My workaround was to manually create an emergency boot disk using syslinux.

Comment 1 Matt Wilson 2000-02-09 07:29:59 UTC
*** Bug 8275 has been marked as a duplicate of this bug. ***

Comment 2 Adam Haile 2001-01-11 17:22:44 UTC
I experienced the same problem on my NEC Versa SX laptop with a builtin LS-120
drive.  After a bit of probing, it turns out there are two problems with
mkbootdisk and LS-120 drives:

1. When mkbootdisk invokes lilo to write a MBR to the floppy, lilo attempts to
create a device, dev.0, in the tmp directory of the bootdisk.  However,
mkbootdisk didn't create a tmp directory on the bootdisk, only dev, etc, and
boot.  As a result, lilo reports "Fatal: mknod /tmp/dev.0: No such file or
directory." (Since lilo has chrooted to /tmp/mkbootdisk, it's really complaining
about /tmp/mkbootdisk/tmp/dev.0.)  The fix is to have mkbootdisk create tmp when
it creates the other dirs.  (Incidentally, a web search on "/tmp/dev.0" turns up
*lots* of people who have seen this error, not just with LS-120 drives but with
md and raid.)

2. LS-120 drives need a line in lilo.conf specifying bios=0.  Since LS-120
drives are connected to an IDE controller, Lilo assumes they are identified by a
BIOS code of 0x80, like a harddisk.  In fact, they use 0, like a floppy, so lilo
must be told this in lilo.conf.

I created two patches to mkbootdisk to accomplish these two things.  The first
requires the user to specify that the device is an LS-120 drive by using a
--ls120 flag.  The second is a little smarter -- it automatically checks whether
the device is an LS-120 drive by probing its identifier in the /proc/ide
filesystem.  The downside to the automatic approach, however, is that it might
be a little more brittle, since it relies on the structure of the /proc
heirarchy, which could change between kernel versions.

First, here's the patch that requires a --ls120 flag:

*** mkbootdisk.orig	Thu Jan 11 11:41:55 2001
--- mkbootdisk	Thu Jan 11 12:14:47 2001
***************
*** 11,16 ****
--- 11,17 ----
  unset witheth
  unset mkinitrdargs
  unset compact
+ unset ls120

  MOUNTDIR=/tmp/mkbootdisk
  PATH=/sbin:$PATH
***************
*** 56,61 ****
--- 57,65 ----
  	--compact)
  	    compact="compact"
  	    ;;
+ 	--ls120)
+ 	    ls120=true
+ 	    ;;
  	*)
  	    if [ -z "$kernel" ]; then
  		kernel=$1
***************
*** 134,139 ****
--- 138,145 ----
      exit 1
  }

+ [ -n "$ls120" ] && ls120="disk=$device bios=0"
+
  [ -n "$pause" ] && {
      echo "Insert a disk in $device. Any information on the disk will be lost."
      echo -n "Press <Enter> to continue or ^C to abort: "
***************
*** 171,182 ****
--- 177,190 ----
  mkdir $MOUNTDIR/etc
  mkdir $MOUNTDIR/dev
  mkdir $MOUNTDIR/boot
+ mkdir $MOUNTDIR/tmp
  cp -Pa $device $MOUNTDIR
  cp -Pa $rootdev $MOUNTDIR
  cp -a /boot/boot.b $MOUNTDIR/boot/boot.b

  cat > $MOUNTDIR/etc/lilo.conf <<EOF
  $compact
+ $ls120
  boot=$device
  timeout=100
  message=/boot/message

Here's the smarter, "magic" version:

*** mkbootdisk.orig	Thu Jan 11 11:41:55 2001
--- mkbootdisk	Thu Jan 11 12:21:53 2001
***************
*** 11,16 ****
--- 11,17 ----
  unset witheth
  unset mkinitrdargs
  unset compact
+ unset ls120

  MOUNTDIR=/tmp/mkbootdisk
  PATH=/sbin:$PATH
***************
*** 134,139 ****
--- 135,145 ----
      exit 1
  }

+ # look in /proc/ide/.../model to see if $device is an LS-120 drive
+ if grep -qsiE 'LS-?120' /proc/ide/`basename $device`/model; then
+     ls120="disk=$device bios=0"
+ fi
+
  [ -n "$pause" ] && {
      echo "Insert a disk in $device. Any information on the disk will be lost."
      echo -n "Press <Enter> to continue or ^C to abort: "
***************
*** 171,182 ****
--- 177,190 ----
  mkdir $MOUNTDIR/etc
  mkdir $MOUNTDIR/dev
  mkdir $MOUNTDIR/boot
+ mkdir $MOUNTDIR/tmp
  cp -Pa $device $MOUNTDIR
  cp -Pa $rootdev $MOUNTDIR
  cp -a /boot/boot.b $MOUNTDIR/boot/boot.b

  cat > $MOUNTDIR/etc/lilo.conf <<EOF
  $compact
+ $ls120
  boot=$device
  timeout=100
  message=/boot/message


Comment 3 Matt Wilson 2001-01-27 01:47:32 UTC
even with these changes some bioses make it hard to use lilo for the boot disk.
 as such, our future versions will use syslinux.  this is working well.  new
mkbootdisk package is in rawhide.



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