Last-modified: 11 Mar 95
---This is part 2/2---
# mkutil: make a utility diskette - creates a utility diskette
# by building a file system on it, then mounting it and
# copying required files from a model.
# Note: the model to copy from from must first be set up,
# then change the configuration variables below to suit
# your system.
# Copyright (c) Graham Chapman 1994. All rights reserved.
# Permission is granted for this material to be freely
# used and distributed, provided the source is acknowledged.
# No warranty of any kind is provided. You use this material
# at your own risk.
# Configuration variables...
UTILDISKDIR=./util_disk # name of directory containing model
MOUNTPOINT=./mnt # temporary mount point for diskette
DISKETTEDEV=/dev/fd0 # device name of diskette drive
echo $0: create utility diskette
echo Warning: data on diskette will be overwritten!
echo Insert diskette in $DISKETTEDEV and and press any key...
if [ $? -ne 0 ]
echo mke2fs failed
# Any file system type would do here
mount -t ext2 $DISKETTEDEV $MOUNTPOINT
if [ $? -ne 0 ]
echo mount failed
# copy the directories containing files
cp -dpr $UTILDISKDIR/bin $MOUNTPOINT
echo Utility diskette complete
5.1. Q. How can I make a boot disk with a XXX driver?
The easiest way is to obtain a Slackware kernel from your nearest
Slackware mirror site. Slackware kernels are generic kernels which
atttempt to include drivers for as many devices as possible, so if you
have a SCSI or IDE controller, chances are that a driver for it is
included in the Slackware kernel.
Go to the a1 directory and select either IDE or SCSI kernel depending
on the type of controller you have. Check the xxxxkern.cfg file for
the selected kernel to see the drivers which have been included in
that kernel. If the device you want is in that list, then the
corresponding kernel should boot your computer. Download the
xxxxkern.tgz file and copy it to your boot diskette as described above
in the section on making boot disks.
You must then check the root device in the kernel, using the rdev
Rdev will then display the current root device in the kernel. If this
is not the same as the root device you want, then use rdev to change
it. For example, the kernel I tried was set to /dev/sda2, but my root
scsi partition is /dev/sda8. To use a root diskette, you would have to
use the command:
rdev vmlinuz /dev/fd0
If you want to know how to set up a Slackware root disk as well,
that's outside the scope of this HOWTO, so I suggest you check the
Linux Install Guide or get the Slackware distribution. See the section
in this HOWTO titled "References".
5.2. Q. How do I update my boot floppy with a new kernel?
Just copy the kernel to your boot diskette using the dd command for a
boot diskette without a filesystem, or the cp command for a boot/root
disk. Refer to the section in this HOWTO titled "Boot" for details on
creating a boot disk. The description applies equally to updating a
kernel on a boot disk.
5.3. Q. How do I remove LILO so that I can use DOS to boot again?
This is not really a Bootdisk topic, but it is asked so often, so: the
answer is, use the DOS command:
MBR stands for Master Boot Record, and it replaces the boot sector
with a clean DOS one, without affecting the partition table. Some
purists disagree with this, but even the author of LILO, Werner
Almesberger, suggests it. It is easy, and it works.
You can also use the dd command to copy the backup saved by LILO to
the boot sector - refer to the LILO documentation if you wish to do
5.4. Q. How can I boot if I've lost my kernel AND my boot disk?
If you don't have a boot disk standing by, then probably the easiest
method is to obtain a Slackware kernel for your disk controller type
(IDE or SCSI) as described above for "How do I make a boot disk with a
XXX driver?". You can then boot your computer using this kernel, then
repair whatever damage there is.
The kernel you get may not have the root device set to the disk type
and partition you want. For example, Slackware's generic scsi kernel
has the root device set to /dev/sda2, whereas my root Linux partition
happens to be /dev/sda8. In this case the root device in the kernel
will have to be changed.
You can still change the root device and ramdisk settings in the
kernel even if all you have is a kernel, and some other operating
system, such as DOS.
Rdev changes kernel settings by changing the values at fixed offsets
in the kernel file, so you can do the same if you have a hex editor
available on whatever systems you do still have running - for example,
Norton Utilities Disk Editor under DOS. You then need to check and if
necessary change the values in the kernel at the following offsets:
0x01F8 Low byte of RAMDISK size
0x01F9 High byte of RAMDISK size
0x01FC Minor device number - see below
0X01FD Major device number - see below
The ramdisk size is the number of blocks of ramdisk to create. If you
want to boot from a root diskette then set this to decimal 1440, which
is 0x05A0, thus set offset 0x01F8 to 0xA0 and offset 0x01F9 to 0x05.
This will allocate enough space for a 1.4Mb diskette.
The major and minor device numbers must be set to the device you want
to mount your root filesystem on. Some useful values to select from
device major minor
/dev/fd0 2 0 1st floppy drive
/dev/hda1 3 1 partition 1 on 1st IDE drive
/dev/sda1 8 1 partition 1 on 1st scsi drive
/dev/sda8 8 8 partition 8 on 1st scsi drive
Once you have set these values then you can write the file to a
diskette using either Norton Utilities Disk Editor, or a program
called rawrite.exe. This program is included in several distributions,
including the SLS and Slackware distributions. It is a DOS program
which writes a file to the "raw" disk, starting at the boot sector,
instead of writing it to the file system. If you use Norton Utilities,
then you must write the file to a physical disk starting at the
beginning of the disk.
5.5. Q. How can I make extra copies of boot/root diskettes?
It is never desirable to have just one set of rescue disks - 2 or 3
should be kept in case one is unreadable.
The easiest way of making copies of any diskettes, including bootable
and utility diskettes, is to use the dd command to copy the contents
of the original diskette to a file on your hard drive, and then use
the same command to copy the file back to a new diskette. Note that
you do not need to, and should not, mount the diskettes, because dd
uses the raw device interface.
To copy the original, enter the command:
dd if=<device> of=<filename>
where <device> = the device name of the diskette
and <filename> = the name of the file where you
want to copy to
For example, to copy from /dev/fd0 to a temporary file called
/tmp/diskette.copy, I would enter the command:
dd if=/dev/fd0 of=/tmp/diskette.copy
Omitting the "count" parameter, as we have done here, means that the
whole diskette of 2880 (for a high-density) blocks will be copied.
To copy the resulting file back to a new diskette, insert the new
diskette and enter the reverse command:
dd if=<filename> of=<device>
Note that the above discussion assumes that you have only one diskette
drive. If you have two of the same type, then you can copy diskettes
using a command like:
dd if=/dev/fd0 of=/dev/fd1
5.6. Q. How can I boot without typing in "ahaxxxx=nn,nn,nn" every
Where a disk device cannot be autodetected it is necessary to supply
the kernel with a command device parameter string, such as:
This parameter string can be supplied in several ways using LILO:
o By entering it on the command line every time the system is booted
via LILO. This is boring, though.
o By using the LILO "lock" keyword to make it store the command line
as the default command line, so that LILO will use the same options
every time it boots.
o By using the APPEND statement in the lilo config file. Note that
the parameter string must be enclosed in quotes.
For example, a sample command line using the above parameter string
vmlinux aha152x=0x340,11,3,1 root=/dev/sda1 lock
This would pass the device parameter string through, and also ask the
kernel to set the root device to /dev/sda1 and save the whole command
line and reuse it for all future boots.
A sample APPEND statement is:
APPEND = "aha152x=0x340,11,3,1"
Note that the parameter string must NOT be enclosed in quotes on the
command line, but it MUST be enclosed in quotes in the APPEND
Note also that for the parameter string to be acted on, the kernel
must contain the driver for that disk type. If it does not, then there
is nothing listening for the parameter string, and you will have to
rebuild the kernel to include the required driver. For details on
rebuilding the kernel, cd to /usr/src/linux and read the README, and
read the Linux FAQ and Installation HOWTO. Alternatively you could
obtain a generic kernel for the disk type and install that.
Readers are strongly urged to read the LILO documentation before
experimenting with LILO installation. Incautious use of the "BOOT"
statement can damage partitions.
In this section, vvv is used in package names in place of the version,
to avoid referring here to specific versions. When retrieving a
package, always get the latest version unless you have good reasons
for not doing so.
6.1. LILO - Linux Loader
Written by Werner Almesberger. Excellent boot loader, and the
documentation includes information on the boot sector contents and the
early stages of the boot process.
Ftp from: tsx-11.mit.edu:/pub/linux/packages/lilo/lilo.vvv.tar.gz also
on sunsite and mirror sites.
6.2. Linux FAQ and HOWTOs
These are available from many sources. Look at the usenet newsgroups
news.answers and comp.os.linux.announce.
Ftp from: sunsite.unc.edu:/pub/Linux/docs
o FAQ is in /pub/linux/docs/faqs/linux-faq
o HOWTOs are in /pub/Linux/docs/HOWTO
For WWW, start at the Linux documentation home page:
If desperate, send mail to:
with the word "help" in the message, then follow the mailed
Note: if you haven't read the Linux FAQ and related documents such as
the Linux Installation HOWTO and the Linux Install Guide, then you
should not be trying to build boot diskettes.
6.3. Rescue Shell Scripts
Written by Thomas Heiling. This contains shell scripts to produce boot
and boot/root diskettes. It has some dependencies on specific versions
of other software such as LILO, and so might need some effort to
convert to your system, but it might be useful as a starting point if
you wanted more comprehensive shell scripts than are provided in this
Ftp from: sunsite.unc.edu:/pub/Linux/system/Recovery/rescue.tgz
6.4. SAR - Search and Rescue
Written by Karel Kubat. SAR produces a rescue diskette, using several
techniques to minimize the space required on the diskette. The manual
includes a description of the Linux boot/login process.
Ftp from: ftp.icce.rug.nl:/pub/unix/SAR-vvv.tar.gz
The manual is available via WWW from:
6.5. Slackware Distribution
Apart from being one of the more popular Linux distributions around,
it is also a good place to get a generic kernel. It is available from
almost everywhere, so there is little point in putting addresses here.
Greg Hankins (greg.hank...@cc.gatech.edu) | Georgia Institute of Technology
Computing and Networking Services | College of Computing, room 212
+1 404 853 9989 | Atlanta, GA 30332-0280
<A HREF="http://www.cc.gatech.edu/staff/h/Greg.Hankins/">Greg Hankins</A>