The Linux Bootdisk HOWTO
Graham Chapman,
[email protected]
v1.01, 6 February 1995
This document describes how to create Linux boot, boot/root and util-
ity maintenance disks. These disks could be used as rescue disks or to
test new kernels.
1. Introduction
1.1. Why Build Boot Disks?
Linux boot disks are useful in a number of situations, such as:
o Testing a new kernel.
o Recovering from disk or system failure. Such a failure could be
anything from a lost boot sector to a disk head crash.
There are several ways of producing boot disks:
o Use one from a distribution such as Slackware. This will at least
allow you to boot.
o Use a rescue package to set up disks designed to be used as rescue
disks.
o Learn what is required for each of the various types of disk to
operate, then build your own.
I choose the last option - learn how it works so that you can do it
yourself. That way, if something breaks, you can work out what to do
to fix it. Plus you learn a lot about how Linux works along the way.
Experienced Linux users may find little of use in this document.
However users new to Linux system administration who wish to protect
against root disk loss and other mishaps may find it useful.
A note on versions - this document has been updated to support the
following packages and versions:
o Linux 1.1.73
o LILO 0.15
Copyright (c) Graham Chapman 1995.
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.
1.2. Feedback and Credits
I welcome any feedback, good or bad, on the content of this document.
Please let me know if you find any errors or omissions.
I thank the following people for correcting errors and providing
useful suggestions for improvement:
Randolph Bentson
Bjxrn-Helge Mevik
Johannes Stille
1.3. Change History
v1.01, 6 February 1995
o Fix: DO NOT cp <kernel file> /dev/fd0 - this will overwrite any
file system on the diskette.
o Fix: Put LILO boot.b and map files on target disk.
o Add: -dp flags to cp commands to avoid problems.
o Chg: restructure to try to improve readability.
o Add: can now use ext2 filesystem on root diskettes.
o Chg: can now separate boot and root diskettes.
o Add: credits section in Introduction.
o Add: FAQ.
v1.0, 2 January 1995
o Converted to conform to HOWTO documentation standards.
o Added new section - Change History.
o Various minor corrections.
v0.10, 1 November 1994 Original version, labelled "draft".
2. Disks
2.1. Summary of Disk Types
I classify boot-related disks into 4 types. The discussion here and
throughout this document uses the term "disk" to refer to diskettes
unless otherwise specified. Most of the discussion could be equally
well applied to hard disks.
A summary of disk types and uses is:
boot
A disk containing a kernel which can be booted. The disk can
contain a filesystem and use a boot loader to boot, or it can
simply contain the kernel only at the start of the disk. The
disk can be used to boot the kernel using a root file system on
another disk. This could be useful if you lost your boot loader
due to, for example, an incorrect installation attempt.
root
A disk with a file system containing everything required to run
a Linux system. It does not necessarily contain either a kernel
or a boot loader.
This disk can be used to run the system independently of any
other disks, once the kernel has been booted. A special kernel
feature allows a separate root disk to be mounted after booting,
with the root disk being automatically copied to a ramdisk.
You could use this type of disk to check another disk for
corruption without mounting it, or to restore another disk
following disk failure or loss of files.
boot/root
A disk which is the same as a root disk, but contains a kernel
and a boot loader. It can be used to boot from, and to run the
system. The advantage of this type of disk is that is it compact
- everything required is on a single disk. However the
gradually increasing size of everything means that it won't
necessarily always be possbile to fit everything on a single
diskette.
utility
A disk which contains a file system, but is not intended to be
mounted as a root file system. It is an additional data disk.
You would use this type of disk to carry additional utilities
where you have too much to fit on your root disk.
The term "utility" only really applies to diskettes, where you
would use a utility disk to store additional recovery utility
software.
2.2. Boot
2.2.1. Overview
All PC systems start the boot process by executing code in ROM to load
the sector from sector 0, cylinder 0 of the boot drive and try and
execute it. On most bootable disks, sector 0, cylinder 0 contains
either:
o code from a boot loader such as LILO, which locates the kernel,
loads it and executes it to start the boot proper.
o the start of an operating system kernel, such as Linux.
If a Linux kernel has been written to a diskette as a raw device, then
the first sector will be the first sector of the Linux kernel itself,
and this sector will continue the boot process by loading the rest of
the kernel and running Linux. For a more detailed description of the
boot sector contents, see the documentation in lilo-01.5 or higher.
An alternative method of storing a kernel on a boot disk is to create
a filesystem, not as a root filesystem, but simply as a means of
installing LILO and thus allowing boot-time command line options to be
specified. For example, the same kernel could then be used to boot
using a hard disk root filesystem, or a diskette root filesystem. This
could be useful if you were trying to rebuild the hard disk
filesystem, and wanted to repeatedly test results.
2.2.2. Setting Pointer to Root
The kernel must somehow obtain a pointer to the drive and partititon
to be mounted as the root drive. This can be provided in several ways:
o By setting ROOT_DEV = <device> in the Linux kernel makefile and
rebuilding the kernel (for advice on how to rebuild the kernel,
read the Linux FAQ and look in /usr/src/linux). Comments in the
Linux makefile describe the valid values for <device>.
o By running the rdev utility:
rdev <filename> <device>
This will set the root device of the kernel contained in <filename> to
be <device>. For example:
rdev Image /dev/sda1
This sets the root device in the kernel in Image to the first parti-
tion on the first SCSI drive.
There are some alternative ways of issuing the rdev command. Try:
rdev -?
and it will display command usage.
There is usually no need to configure the root device for boot
diskette use, because the kernel currently used to boot from probably
already points to the root drive device. The need can arise, howoever,
if you obtain a kernel from another machine, for example, from a
distribution, or if you want to use the kernel to boot a root
diskette. It never hurts to check, though. To use rdev to check the
current root device in a kernel file, enter the command:
rdev -r <filename>
It is possible to change the root device set in a kernel by means
other than using rdev. For details, see the FAQ at the end of this
document.
2.2.3. Copying Kernel to Boot Diskette
Once the kernel has been configured then it must be copied to the boot
diskette.
If the disk is not intended to contain a file system, then the kernel
must be copied using the dd command, as follows:
dd if=<filename> of=<device>
where <filename> is the name of the kernel
and <device> is the diskette raw device,
usually /dev/fd0
The seek parameter to the dd command should NOT be used. The file must
be copied to start at the boot sector (sector 0, cylinder 0), and
omitting the seek parameter will do this.
The output device name varies. Many systems have /dev/fd0 as an alias
of one sort or another for the "real" device name for the default
diskette drive. For example, where the default drive (i.e. "drive A:"
in DOS) is a high density 3 1/2 inch diskette drive, the device name
will be /dev/fd0H1440, but usually /dev/fd0 points to the same device.
Where the kernel is to be copied to a boot disk containing a
filesystem, then the disk is mounted at a suitable point in a
currently-mounted filesystem, then the cp command is used. For
example:
mount -t ext2 /dev/fd0 /mnt
cp Image /mnt
umount /mnt
2.3. Root
2.3.1. Overview
A root disk contains a complete working Linux system, but without
necessarily including a kernel. In other words, the disk may not be
bootable, but once the kernel is running, the root disk contains
everything needed to support a full Linux system. To be able to do
this, the disk must include the minimum requirements for a Linux
system:
o File system.
o Minimum set of directories - dev, proc, bin, etc, lib, usr, tmp.
o Basic set of utilities - bash (to run a shell), ls, cp etc.
o Minimum set of config files - rc, inittab, fstab etc.
o Runtime library to provide basic functions used by utilities.
Of course, any system only becomes useful when you can run something
on it, and a root diskette usually only becomes useful when you can do
something like:
o Check a file system on another drive, for example to check your
root file system on your hard drive, you need to be able to boot
Linux from another drive, as you can with a root diskette system.
Then you can run fsck on your original root drive while it is not
mounted.
o Restore all or part of your original root drive from backup using
archive/compression utilities including cpio, tar, gzip and ftape.
2.4. Boot/Root
This is essentially the same as the root disk, with the addition of a
kernel and a boot loader such as LILO.
With this configuration, a kernel file is copied to the root file
system, and LILO is then run to install a configuration which points
to the kernel file on the target disk. At boot time, LILO will boot
the kernel from the target disk.
Several files must be copied to the diskette for this method to work.
Details of these files and the required LILO configuration, including
a working sample, are given below in the section titled "LILO".
2.4.1. RAM Drives and Root Filesystems on Diskette
For a diskette root filesystem to be efficient, you need to be able to
run it from a ramdrive, i.e. an emulated disk drive in main memory.
This avoids having the system run at a snail's pace, which a diskette
would impose.
There is an added benefit from using a ramdrive - the Linux kernel
includes an automatic ramdisk root feature, whereby it will, under
certain circumstances, automatically copy the contents of a root
diskette to a RAM disk, and then switch the root drive to be the RAM
disk instead of the diskette. This has two major benefits:
o The system runs a lot faster.
o The diskette drive is freed up to allow other diskettes to be used
on a single-diskette drive system.
The requirements for this feature to be invoked are:
o The file system on the diskette drive must be either a minix or an
ext2 file system. The ext2 file system is generally the preferred
file system to use. Note that if you have a Linux kernel earlier
than 1.1.73, then you should see the comments in the section below
titled "File Systems" to see whether your kernel will support ext2.
If your kernel is old then you may have to use minix. This will not
cause any significant problems.
o A RAM disk must be configured into the kernel, and it must be at
least as big as the diskette drive.
A RAM disk can be configured into the kernel in several ways:
o By uncommenting the RAMDISK macro in the Linux kernel makefile, so
that it reads:
RAMDISK = -DRAMDISK=1440
to define a ramdisk of 1440 1K blocks, the size of a high-density
diskette.
o By running the rdev utility, available on most Linux systems. This
utility displays or sets values for several things in the kernel,
including the desired size for a ramdisk. To configure a ramdisk of
1440 blocks into a kernel in a file named Image, enter:
rdev -r Image 1440
this might change in the future, of course. To see what your version
of rdev does, enter the command:
rdev -?
and it should display its options.
o By using the boot loader package LILO to configure it into your
kernel at boot time. This can be done using the LILO configuration
parameter:
ramdisk = 1440
to request a RAM drive of 1440 1K blocks at boot time.
o By interrupting a LILO automatic boot and adding ramdisk=1440 to
the command line. For example, such a command line might be:
vmlinux ramdisk=1440
See the section on LILO for more details.
o By editing the kernel file and altering the values near the start
of the file which record the ramdisk size. This is definitely a
last resort, but can be done. See the FAQ near the end of this
document for more details.
The easiest of these methods is LILO configuration, because you need
to set up a LILO configuration file anyway, so why not add the ramdisk
size here?
LILO configuration is briefly described in a section titled "LILO"
below, but it is advisable to obtain the latest stable version of LILO
from your nearest Linux mirror site, and read the documentation that
comes with it.
2.5. Utility
Often one disk is not sufficient to hold all the software you need to
be able to perform rescue functions of analysing, repairing and
restoring corrupted disk drives. By the time you include tar, gzip
e2fsck, fdisk, Ftape and so on, there is enough for a whole new
diskette, maybe even more if you want lots of tools.
This means that a rescue set often requires a utility diskette, with a
file system containing any extra files required. This file system can
then be mounted at a convenient point, such as /usr, on the boot/root
system.
Creating a file system is fairly easy, and is described above in the
section titled "File Systems" above.
3. Components
3.1. File Systems
The Linux kernel now supports two file system types for root disks to
be automatically copied to ramdisk. These are minix and ext2, of which
ext2 is the preferred file system. The ext2 support was added
sometime between 1.1.17 and 1.1.57, I'm not sure exactly which. If you
have a kernel within this range then edit
/usr/src/linux/drivers/block/ramdisk.c and look for the word "ext2".
If it is not found, then you will have to use a minix file system, and
therefore the "mkfs" command to create it.
To create an ext2 file system on a diskette on my system, I issue the
following command:
mke2fs /dev/fd0
The mke2fs command will automatically detect the space available and
configure itself accordingly. It does not therefore require any
parameters.
An easy way to test the result is to create a system using the above
command or similar, and then attempt to mount the diskette. If it is
an ext2 system, then the command:
mount -t ext2 /dev/fd0 /<mount point>
should work.
3.2. Kernel
3.2.1. Building a Custom Kernel
In most cases it would be possible to copy your current kernel and
boot the diskette from that. However there may be cases where you wish
to build a separate one.
One reason is size. The kernel is one of the largest files in a
minimum system, so if you want to build a boot/root diskette, then you
will have to reduce the size of the kernel as much as possible. The
kernel now supports changing the diskette after booting and before
mounting root, so it is not necessary any more to squeeze the kernel
into the same disk as everything else, therefore these comments apply
only if you choose to build a boot/root diskette.
There are two ways of reducing kernel size:
o Building it with the minumum set of facilities necessary to support
the desired system. This means leaving out everything you don't
need. Networking is a good thing to leave out, as well as support
for any disk drives and other devices which you don't need when
running your boot/root system.
o Compressing it, using the standard compressed-kernel option
included in the makefile:
make zImage
Refer to the documentation included with the kernel source for up-to-
date information on building compressed kernels. Note that the kernel
source is usually in /usr/src/linux.
Having worked out a minimum set of facilities to include in a kernel,
you then need to work out what to add back in. Probably the most
common uses for a boot/root diskette system would be to examine and
restore a corrupted root file system, and to do this you may need
kernel support.
For example, if your backups are all held on tape using Ftape to
access your tape drive, then, if you lose your current root drive and
drives containing Ftape, then you will not be able to restore from
your backup tapes. You will have to reinstall Linux, download and
reinstall Ftape, and then try and read your backups.
It is probably desirable to maintain a copy of the same version of
backup utilities used to write the backups, so that you don't waste
time trying to install versions that cannot read your backup tapes.
The point here is that, whatever I/O support you have added to your
kernel to support backups should also be added into your boot/root
kernel. Note, though, that the Ftape module (or at least the one I
have) is quite large and will not fit on your boot/root diskette. You
will need to put it on a utility diskette - this is described below in
the section titled "ADDING UTILITY DISKETTES".
The procedure for actually building the kernel is described in the
documentation that comes with the kernel. It is quite easy to follow,
so start by looking in /usr/src/linux. Note that if you have trouble
building a kernel, then you should probably not attempt to build
boot/root systems anyway.
3.3. Devices
A /dev directory containing a special file for all devices to be used
by the system is mandatory for any Linux system. The directory itself
is a normal directory, and can be created with the mkdir command in
the normal way. The device special files, however, must be created in
a special way, using the mknod command.
There is a shortcut, though - copy your existing /dev directory
contents, and delete the ones you don't want. The only requirement is
that you copy the device special files using the -R option. This will
copy the directory without attempting to copy the contents of the
files. Note that if you use lower caser, as in "-r", there will be a
vast difference, because you will probably end up copying the entire
contents of all of your hard disks - or at least as much of them as
will fit on a diskette! Therefore, take care, and use the command:
cp -dpR /dev /mnt
assuming that the diskette is mounted at /mnt. The dp switches ensure
that symbolic links are copied as links (rather than the target file
being copied) and that the original file attributes are preserved,
thus preserving ownership information.
If you want to do it the hard way, use ls -l to display the major and
minor device numbers for the devices you want, and create them on the
diskette using mknod.
Many distributions include a shell script called MAKEDEV in the /dev
directory. This shell script could be used to create the devices, but
it is probably easier to just copy your existing ones, especially for
rescue disk purposes.
3.4. Directories
It might be possible to get away with just /dev, /proc and /etc to run
a Linux system. I don't know - I've never tested it. However a
reasonable minimum set of directories consists of the following:
/dev
Required to perform I/O with devices
/proc
Required by the ps command
/etc
System configuration files
/bin
Utility executables considered part of the system
/lib
Shared libraries to provide run-time support
/mnt
A mount point for maintenance on other disks
/usr
Additional utilities and applications
Note that the directory tree presented here is for root diskette use
only. Refer to the Linux File System Standard for much better
information on how file systems should be structured in "standard"
Linux systems.
Four of these directories can be created very easily:
o /dev is described above in the section titled DEVICES.
o /proc only needs to exist. Once the directory is created using
mkdir, nothing more is required.
o Of the others, /mnt and /usr are included in this list only as
mount points for use after the boot/root system is running. Hence
again, these directories only need to be created.
The remaining 3 directories are described in the following sections.
3.4.1. /etc
This directory must contain a number of configuration files. On most
systems, these can be divided into 3 groups:
o Required at all times, e.g. rc, fstab, passwd.
o May be required, but no-one is too sure.
o Junk that crept in.
Files which are not essential can be identified with the command:
ls -ltru
This lists files in reverse order of date last accessed, so if any
files are not being accessed, then they can be omitted from a root
diskette.
On my root diskettes, I have the number of config files down to 15.
This reduces my work to dealing with three sets of files:
o The ones I must configure for a boot/root system:
rc system startup script
fstab list of file systems to be mounted
inittab parameters for the init process - the
first process started at boot time.
o the ones I should tidy up for a boot/root system:
passwd list of logins
shadow contains passwords
These should be pruned on secure systems to avoid copying user's pass-
words off the system, and so that when you boot from diskette,
unwanted logins are rejected.
o The rest. They work at the moment, so I leave them alone.
Out of this, I only really have to configure two files, and what they
should contain is suprisingly small.
o rc should contain:
#!/bin/sh
/etc/mount -av
/bin/hostname boot_root
and I don't really need to run hostname - it just looks nicer if I do.
Even mount is actually only needed to mount /proc to support the ps
command - Linux will run without it.
o fstab should contain:
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
I don't think that the first entry is really needed, but I find that
if I leave it out, mount won't mount /proc.
Inittab should be ok as is, unless you want to ensure that users on
serial ports cannot login. To prevent this, comment out all the
entries for /etc/getty which include a ttys or ttyS device at the end
of the line. Leave in the tty ports so that you can login at the
console.
For the rest, just copy all the text files in your /etc directory,
plus all the executables in your /etc directory that you cannot be
sure you do not need. As a guide, consult the sample ls listing in
"Sample Boot/Root ls-lR Directory Listing" - this is what I have, so
probably it will be sufficient for you if you copy only those files.
3.4.2. /bin
Here is a convenient point to place the extra utilities you need to
perform basic operations, utilities such as ls, mv, cat, dd etc.
See the section titled "Sample Boot/Root ls-lR Directory Listing" for
the list of files that I place in my boot/root /bin directory. You may
notice that it does not include any of the utilities required to
restore from backup, such as cpio, tar, gzip etc. That is because I
place these on a separate utility diskette, to save space on the
boot/root diskette. Once I have booted my boot/root diskette, it then
copies itself to the ramdisk leaving the diskette drive free to mount
another diskette, the utility diskette. I usually mount this as /usr.
Creation of a utility diskette is described below in the section
titled "Adding Utility Diskettes".
3.4.3. /lib
Two libraries are required to run many facilities under Linux:
o ld.so
o libc.so.4
If they are not found in your /lib directory then the system will be
unable to boot. If you're lucky you may see an error message telling
you why.
These should be present in you existing /lib directory. Note that
libc.so.4 may be a symlink to a libc library with version number in
the filename. If you issue the command:
ls -l /lib
you will see something like:
libc.so.4 -> libc.so.4.5.21
In this case, the libc library you want is libc.so.4.5.21.
3.5. LILO
3.5.1. Overview
For the boot/root to be any use, it must be bootable. To achieve this,
the easiest way (possibly the only way?) is to install a boot loader,
which is a piece of executable code stored at sector 0, cylinder 0 of
the diskette. See the section above titled "BOOT DISKETTE" for an
overview of the boot process.
LILO is a tried and trusted boot loader available from any Linux
mirror site. It allows you to configure the boot loader, including:
o Which device is to be mounted as the root drive.
o Whether to use a ramdisk.
3.5.2. Sample LILO Configuration
This provides a very convenient place to specify to the kernel how it
should boot. My root/boot LILO configuration file, used with LILO
0.15, is:
______________________________________________________________________
boot = /dev/fd0
install = ./mnt/boot.b
map = ./mnt/lilo.map
delay = 50
message = ./mnt/lilo.msg
timeout = 150
compact
image = ./mnt/vmlinux
ramdisk = 1440
root = /dev/fd0
______________________________________________________________________
Note that boot.b, lilo.msg and the kernel must first have been copied
to the diskette using a command similar to:
______________________________________________________________________
cp /boot/boot.b ./mnt
______________________________________________________________________
If this is not done, then LILO will not run correctly at boot time if
the hard disk is not available, and there is little point setting up a
rescue disk which requires a hard disk in order to boot.
I run lilo using the command:
/sbin/lilo -C <configfile>
I run it from the directory containing the mnt directory where I have
mounted the diskette. This means that I am telling LILO to install a
boot loader on the boot device (/dev/fd0 in this case), to boot a
kernel in the root directory of the diskette.
I have also specified that I want the root device to be the diskette,
and I want a RAM disk created of 1440 1K blocks, the same size as the
diskette. Since I have created an ext2 file system on the diskette,
this completes all the conditions required for Linux to automatically
switch the root device to the ramdisk, and copy the diskette contents
there as well.
The ramdisk features of Linux are described further in the section
above titled "RAM DRIVES AND BOOT/ROOT SYSTEMS".
It is also worth considering using the "single" parameter to cause
Linux to boot in single-user mode. This could be useful to prevent
users logging in on serial ports.
I also use the "DELAY" "MESSAGE" and "TIMEOUT" statements so that when
I boot the disk, LILO will give me the opportunity to enter command
line options if I wish. I don't need them at present, but I never know
when I might want to set a different root device or mount a filesystem
read-only.
The message file I use contains the message:
Linux Boot/Root Diskette
========================
Enter a command line of the form:
vmlinux [ command-line options]
If nothing is entered, linux will be loaded with
defaults after 15 seconds.
This is simply a reminder to myself what my choices are.
Readers are urged to read the LILO documentation carefully before
atttempting to install anything. It is relatively easy to destroy
partitions if you use the wrong "boot = " parameter. If you are
inexperienced, do NOT run LILO until you are sure you understand it
and you have triple-checked your parameters.
3.5.3. Removing LILO
One other thing I might as well add here while I'm on the LILO topic:
if you mess up lilo on a drive containing DOS, you can always replace
the boot sector with the DOS boot loader by issuing the DOS command:
FDISK /MBR
where MBR stands for "Master Boot Record". Note that some purists
disagree with this, and they may have grounds, but it works.
3.5.4. Useful LILO Options
LILO has several useful options which are worth keeping in mind when
building boot disks:
o Command line options - you can enter command line options to set
the root device, ramdrive size, special device parameters, or other
things. If you include the DELAY = nn statement in your LILO
configuration file, then LILO will pause to allow you to select a
kernel image to boot, and to enter, on the same line, any options.
For example:
vmlinux aha152x=0x340,11,3,1 ro
will pass the aha152x parameters through to the aha152x scsi disk
driver (provided that driver has been included when the kernel was
built) and will ask for the root filesystem to be mounted read-only.
o Command line "lock" option - this option asks LILO to store the
command line entered as the default command line to be used for all
future boots. This is particularly useful where you have a device
which cannot be autoselected. By using "lock" you can avoid having
to type in the device parameter string every time you boot. For
example:
vmlinux aha152x=0x340,11,3,1 root=/dev/sda8 ro lock
o APPEND configuration statement - this allows device parameter
strings to be stored in the configuration, as an alternative to
using the "lock" command line option. Note that any keywords of the
form word=value MUST be enclosed in quotes. For example:
APPEND = "aha152x=0x340,11,3,1"
o DELAY configuration statement - this pauses for DELAY tenths of
seconds and allows the user to interrupt the automatic boot of the
default command line, so that the user can enter an alternate
command line.
4. Samples
4.1. Disk Directory Listings
This lists the contents of files and directories that I keep on my
hard disk to use when building boot/root and utility diskettes. It
shows which files I put in the /etc and /bin directories on my
diskettes.
The sample shell scripts in the next section use these directories and
files as a model to build the diskettes.
4.1.1. Boot/Root Disk ls-lR Directory Listing
The boot/root listing is of directory boot_disk:
total 226
drwxr-xr-x 2 root root 1024 Oct 8 13:40 bin/
drwxr-xr-x 2 root root 3072 Sep 8 16:37 dev/
drwxr-xr-x 2 root root 1024 Oct 8 12:38 etc/
drwxr-xr-x 2 root root 1024 Sep 10 14:58 lib/
-rw-r--r-- 1 root root 297956 Jan 25 21:55 vmlinux
boot_disk/bin:
total 366
-rwxr-xr-x 1 root root 4376 Sep 9 21:34 cat*
-rwxr-xr-x 1 root root 4112 Sep 9 21:34 chown*
-rwxr-xr-x 1 root root 12148 Sep 9 21:34 cp*
-rwxr-xr-x 1 root root 4376 Sep 9 21:34 cut*
-rwxr-xr-x 1 root root 7660 Sep 9 21:34 dd*
-rwxr-xr-x 1 root root 4696 Sep 9 21:34 df*
-rwx--x--x 1 root root 1392 Sep 10 14:13 hostname*
-rwxr-xr-x 1 root root 5252 Sep 9 21:34 ln*
-rwsr-xr-x 1 root root 6636 Sep 9 21:34 login*
-rwxr-xr-x 1 root root 13252 Sep 9 21:34 ls*
-rwxr-xr-x 1 root root 4104 Sep 9 21:34 mkdir*
-rwxr-xr-x 1 root root 21504 Sep 10 15:27 more*
-rwxr-xr-x 1 root root 6744 Sep 9 21:34 mv*
-rwxr-xr-x 1 root root 9780 Sep 9 21:34 ps*
-rwxr-xr-x 1 root root 5076 Sep 9 21:34 rm*
-r-xr-xr-x 1 root root 12604 Sep 9 21:34 sed*
-rwxr-xr-x 1 root root 222208 Sep 9 21:34 sh*
-rws--x--x 1 root root 16464 Sep 9 21:34 su*
-rwxr-xr-x 1 root root 1216 Sep 9 21:34 sync*
boot_disk/dev:
total 73
-rwxr-xr-x 1 root root 8331 Sep 8 16:31 MAKEDEV*
crw-r--r-- 1 root root 10, 3 Sep 8 16:31 bmouseatixl
crw-r--r-- 1 root root 10, 0 Sep 8 16:31 bmouselogitec
crw-r--r-- 1 root root 10, 2 Sep 8 16:31 bmousems
crw-r--r-- 1 root root 10, 1 Sep 8 16:31 bmouseps2
crw------- 1 root root 0, 0 Sep 8 16:31 boot0
crw-r--r-- 1 root root 4, 0 Sep 8 16:31 console
crw-r--r-- 1 root root 5, 64 Sep 8 16:31 cua0
crw-r--r-- 1 root root 5, 65 Sep 8 16:31 cua1
crw-r--r-- 1 root root 5, 66 Sep 8 16:31 cua2
crw-r--r-- 1 root root 5, 67 Sep 8 16:31 cua3
brw-r--r-- 1 root root 2, 0 Sep 8 16:31 fd0
brw-r--r-- 1 root root 2, 12 Sep 8 16:31 fd0D360
brw-r--r-- 1 root root 2, 16 Sep 8 16:31 fd0D720
brw-r--r-- 1 root root 2, 28 Sep 8 16:31 fd0H1440
brw-r--r-- 1 root root 2, 12 Sep 8 16:31 fd0H360
brw-r--r-- 1 root root 2, 16 Sep 8 16:31 fd0H720
brw-r--r-- 1 root root 2, 16 Sep 8 16:31 fd0Q720
brw-r--r-- 1 root root 2, 4 Sep 8 16:31 fd0d360
brw-r--r-- 1 root root 2, 8 Sep 8 16:31 fd0h1200
brw-r--r-- 1 root root 2, 20 Sep 8 16:31 fd0h360
brw-r--r-- 1 root root 2, 24 Sep 8 16:31 fd0h720
brw-r--r-- 1 root root 2, 24 Sep 8 16:31 fd0q720
brw-r--r-- 1 root root 2, 1 Sep 8 16:31 fd1
brw-r--r-- 1 root root 2, 13 Sep 8 16:31 fd1D360
brw-r--r-- 1 root root 2, 17 Sep 8 16:31 fd1D720
brw-r--r-- 1 root root 2, 29 Sep 8 16:31 fd1H1440
brw------- 1 root root 2, 31 Sep 8 16:31 fd1H1722
brw-r--r-- 1 root root 2, 13 Sep 8 16:31 fd1H360
brw-r--r-- 1 root root 2, 17 Sep 8 16:31 fd1H720
brw-r--r-- 1 root root 2, 17 Sep 8 16:31 fd1Q720
brw-r--r-- 1 root root 2, 5 Sep 8 16:31 fd1d360
brw-r--r-- 1 root root 2, 9 Sep 8 16:31 fd1h1200
brw-r--r-- 1 root root 2, 21 Sep 8 16:31 fd1h360
brw-r--r-- 1 root root 2, 25 Sep 8 16:31 fd1h720
brw-r--r-- 1 root root 2, 25 Sep 8 16:31 fd1q720
brw-r----- 1 root root 3, 0 Sep 8 16:31 hda
brw-r----- 1 root root 3, 1 Sep 8 16:31 hda1
brw-r----- 1 root root 3, 2 Sep 8 16:31 hda2
brw-r----- 1 root root 3, 3 Sep 8 16:31 hda3
brw-r----- 1 root root 3, 4 Sep 8 16:31 hda4
brw-r----- 1 root root 3, 5 Sep 8 16:31 hda5
brw-r----- 1 root root 3, 6 Sep 8 16:31 hda6
brw-r----- 1 root root 3, 7 Sep 8 16:31 hda7
brw-r----- 1 root root 3, 8 Sep 8 16:31 hda8
brw-r----- 1 root root 3, 64 Sep 8 16:31 hdb
brw-r----- 1 root root 3, 65 Sep 8 16:31 hdb1
brw-r----- 1 root root 3, 66 Sep 8 16:31 hdb2
brw-r----- 1 root root 3, 67 Sep 8 16:31 hdb3
brw-r----- 1 root root 3, 68 Sep 8 16:31 hdb4
brw-r----- 1 root root 3, 69 Sep 8 16:31 hdb5
brw-r----- 1 root root 3, 70 Sep 8 16:31 hdb6
brw-r----- 1 root root 3, 71 Sep 8 16:31 hdb7
brw-r----- 1 root root 3, 72 Sep 8 16:31 hdb8
crw-r----- 1 root root 1, 2 Sep 8 16:31 kmem
brw------- 1 root root 12, 0 Sep 8 16:31 loop0
brw------- 1 root root 12, 1 Sep 8 16:31 loop1
crw-r--r-- 1 root root 6, 0 Sep 8 16:31 lp0
crw-r--r-- 1 root root 6, 1 Sep 8 16:31 lp1
crw-r--r-- 1 root root 6, 2 Sep 8 16:31 lp2
brw-r--r-- 1 root root 12, 0 Sep 8 16:31 mcd0
crw-r----- 1 root root 1, 1 Sep 8 16:31 mem
crw-r--r-- 1 root root 5, 65 Sep 8 16:31 modem
crw-r--r-- 1 root root 5, 64 Sep 8 16:31 mouse
crw-r--r-- 1 root root 27, 4 Sep 8 16:31 nrft0
crw-r--r-- 1 root root 27, 5 Sep 8 16:31 nrft1
crw-r--r-- 1 root root 27, 6 Sep 8 16:31 nrft2
crw-r--r-- 1 root root 27, 7 Sep 8 16:31 nrft3
crw------- 1 root root 9, 128 Sep 8 16:31 nrmt0
crw-r--r-- 1 root root 1, 3 Sep 8 16:31 null
crw-r----- 1 root root 6, 0 Sep 8 16:31 par0
crw-r----- 1 root root 6, 1 Sep 8 16:31 par1
crw-r----- 1 root root 6, 2 Sep 8 16:31 par2
crw-r----- 1 root root 1, 4 Sep 8 16:31 port
crw-r--r-- 1 root root 10, 1 Sep 8 16:31 ps2aux
crw-r--r-- 1 root root 4, 128 Sep 8 16:31 ptyp0
crw-r--r-- 1 root root 4, 129 Sep 8 16:31 ptyp1
crw-r--r-- 1 root root 4, 130 Sep 8 16:31 ptyp2
crw-r--r-- 1 root root 4, 131 Sep 8 16:31 ptyp3
crw-r--r-- 1 root root 4, 132 Sep 8 16:31 ptyp4
crw-r--r-- 1 root root 4, 133 Sep 8 16:31 ptyp5
crw-r--r-- 1 root root 4, 134 Sep 8 16:31 ptyp6
crw-r--r-- 1 root root 4, 135 Sep 8 16:31 ptyp7
crw-r--r-- 1 root root 4, 136 Sep 8 16:31 ptyp8
crw-r--r-- 1 root root 4, 137 Sep 8 16:31 ptyp9
crw-r--r-- 1 root root 4, 138 Sep 8 16:31 ptypa
crw-r--r-- 1 root root 4, 139 Sep 8 16:31 ptypb
crw-r--r-- 1 root root 4, 140 Sep 8 16:31 ptypc
crw-r--r-- 1 root root 4, 141 Sep 8 16:31 ptypd
crw-r--r-- 1 root root 4, 142 Sep 8 16:31 ptype
crw-r--r-- 1 root root 4, 143 Sep 8 16:31 ptypf
brw-r----- 1 root root 1, 0 Sep 8 16:31 ram
crw-r--r-- 1 root root 27, 0 Sep 8 16:31 rft0
crw-r--r-- 1 root root 27, 1 Sep 8 16:31 rft1
crw-r--r-- 1 root root 27, 2 Sep 8 16:31 rft2
crw-r--r-- 1 root root 27, 3 Sep 8 16:31 rft3
crw------- 1 root root 9, 0 Sep 8 16:31 rmt0
brw-r----- 1 root root 8, 0 Sep 8 16:31 sda
brw-r----- 1 root root 8, 1 Sep 8 16:31 sda1
brw-r----- 1 root root 8, 2 Sep 8 16:31 sda2
brw-r----- 1 root root 8, 3 Sep 8 16:31 sda3
brw-r----- 1 root root 8, 4 Sep 8 16:31 sda4
brw-r----- 1 root root 8, 5 Sep 8 16:31 sda5
brw-r----- 1 root root 8, 6 Sep 8 16:31 sda6
brw-r----- 1 root root 8, 7 Sep 8 16:31 sda7
brw-r----- 1 root root 8, 8 Sep 8 16:31 sda8
brw-r----- 1 root root 8, 16 Sep 8 16:31 sdb
brw-r----- 1 root root 8, 17 Sep 8 16:31 sdb1
brw-r----- 1 root root 8, 18 Sep 8 16:31 sdb2
brw-r----- 1 root root 8, 19 Sep 8 16:31 sdb3
brw-r----- 1 root root 8, 20 Sep 8 16:31 sdb4
brw-r----- 1 root root 8, 21 Sep 8 16:31 sdb5
brw-r----- 1 root root 8, 22 Sep 8 16:31 sdb6
brw-r----- 1 root root 8, 23 Sep 8 16:31 sdb7
brw-r----- 1 root root 8, 24 Sep 8 16:31 sdb8
brw------- 1 root root 8, 32 Sep 8 16:31 sdc
brw------- 1 root root 8, 33 Sep 8 16:31 sdc1
brw------- 1 root root 8, 34 Sep 8 16:31 sdc2
brw------- 1 root root 8, 35 Sep 8 16:31 sdc3
brw------- 1 root root 8, 36 Sep 8 16:31 sdc4
brw------- 1 root root 8, 37 Sep 8 16:31 sdc5
brw------- 1 root root 8, 38 Sep 8 16:31 sdc6
brw------- 1 root root 8, 39 Sep 8 16:31 sdc7
brw------- 1 root root 8, 40 Sep 8 16:31 sdc8
brw------- 1 root root 8, 48 Sep 8 16:31 sdd
brw------- 1 root root 8, 49 Sep 8 16:31 sdd1
brw------- 1 root root 8, 50 Sep 8 16:31 sdd2
brw------- 1 root root 8, 51 Sep 8 16:31 sdd3
brw------- 1 root root 8, 52 Sep 8 16:31 sdd4
brw------- 1 root root 8, 53 Sep 8 16:31 sdd5
brw------- 1 root root 8, 54 Sep 8 16:31 sdd6
brw------- 1 root root 8, 55 Sep 8 16:31 sdd7
brw------- 1 root root 8, 56 Sep 8 16:31 sdd8
brw------- 1 root root 8, 64 Sep 8 16:31 sde
brw------- 1 root root 8, 65 Sep 8 16:31 sde1
brw------- 1 root root 8, 66 Sep 8 16:31 sde2
brw------- 1 root root 8, 67 Sep 8 16:31 sde3
brw------- 1 root root 8, 68 Sep 8 16:31 sde4
brw------- 1 root root 8, 69 Sep 8 16:31 sde5
brw------- 1 root root 8, 70 Sep 8 16:31 sde6
brw------- 1 root root 8, 71 Sep 8 16:31 sde7
brw------- 1 root root 8, 72 Sep 8 16:31 sde8
brw-r--r-- 1 root root 11, 0 Sep 8 16:31 sr0
brw-r----- 1 root root 11, 1 Sep 8 16:31 sr1
brw-r----- 1 root root 11, 2 Sep 8 16:31 sr2
brw-r----- 1 root root 3, 1 Sep 8 16:31 swap
crw-r--r-- 1 root root 5, 0 Sep 8 16:31 tty
crw-r--r-- 1 root root 4, 0 Sep 8 16:31 tty0
crw------- 1 root root 4, 1 Sep 8 16:31 tty1
crw-r--r-- 1 root root 4, 2 Sep 8 16:31 tty2
-rw-r--r-- 1 root root 20 Sep 8 16:31 tty21
crw-r--r-- 1 root root 4, 3 Sep 8 16:31 tty3
crw-r--r-- 1 root root 4, 4 Sep 8 16:31 tty4
crw-r--r-- 1 root root 4, 5 Sep 8 16:31 tty5
crw-r--r-- 1 root root 4, 6 Sep 8 16:31 tty6
crw------- 1 root root 4, 7 Sep 8 16:31 tty7
crw------- 1 root root 4, 8 Sep 8 16:31 tty8
crw-r--r-- 1 root root 4, 64 Sep 8 16:31 ttyS0
crw-r--r-- 1 root root 4, 65 Sep 8 16:31 ttyS1
crw-r--r-- 1 root root 4, 66 Sep 8 16:31 ttyS2
crw-r--r-- 1 root root 4, 192 Sep 8 16:31 ttyp0
crw-r--r-- 1 root root 4, 193 Sep 8 16:31 ttyp1
crw-r--r-- 1 root root 4, 194 Sep 8 16:31 ttyp2
crw-r--r-- 1 root root 4, 195 Sep 8 16:31 ttyp3
crw-r--r-- 1 root root 4, 196 Sep 8 16:31 ttyp4
crw-r--r-- 1 root root 4, 197 Sep 8 16:31 ttyp5
crw-r--r-- 1 root root 4, 198 Sep 8 16:31 ttyp6
crw-r--r-- 1 root root 4, 199 Sep 8 16:31 ttyp7
crw-r--r-- 1 root root 4, 200 Sep 8 16:31 ttyp8
crw-r--r-- 1 root root 4, 201 Sep 8 16:31 ttyp9
crw-r--r-- 1 root root 4, 202 Sep 8 16:31 ttypa
crw-r--r-- 1 root root 4, 203 Sep 8 16:31 ttypb
crw-r--r-- 1 root root 4, 204 Sep 8 16:31 ttypc
crw-r--r-- 1 root root 4, 205 Sep 8 16:31 ttypd
crw-r--r-- 1 root root 4, 206 Sep 8 16:31 ttype
crw-r--r-- 1 root root 4, 207 Sep 8 16:31 ttypf
-rw------- 1 root root 63488 Sep 8 16:31 ttys0
crw-r--r-- 1 root root 4, 67 Sep 8 16:31 ttys3
crw-r--r-- 1 root root 1, 5 Sep 8 16:31 zero
boot_disk/etc:
total 173
-rw-r--r-- 1 root root 53 Sep 8 18:48 boot.env
-rwxr-xr-x 1 root root 27408 Sep 8 18:48 e2fsck*
-rwxr-xr-x 1 root root 18540 Sep 8 18:48 fdisk*
-rw-r--r-- 1 root root 69 Oct 8 12:27 fstab
-r-x------ 1 root root 13312 Sep 8 18:48 getty*
-rw-r--r-- 1 root root 334 Sep 8 18:48 group
-rw-r--r-- 1 root root 12 Sep 8 18:48 host.conf
-rw-r--r-- 1 root root 62 Sep 8 18:48 hosts
-r-x------ 1 root root 6684 Sep 8 18:48 ifconfig*
-rwxr-xr-x 1 root root 11492 Sep 8 18:48 init*
-rw-r--r-- 1 root root 1017 Sep 9 22:12 inittab
-rw-r--r-- 1 root root 0 Oct 8 12:19 issue
-rw-r----- 1 root root 5137 Sep 8 18:48 login.defs
-rwxr-xr-x 1 root root 14028 Sep 8 18:48 mke2fs*
-rwxr-x--- 1 root root 2436 Sep 8 18:48 mkswap*
-rwxr-xr-x 1 root root 11288 Sep 8 18:48 mount*
-rw-r--r-- 1 root root 327 Sep 8 18:48 passwd
-rwxr-xr-x 1 root root 383 Sep 10 16:02 profile*
-rw-r--r-- 1 root root 94 Sep 8 18:48 protocols
-rwxr-xr-x 1 root root 334 Oct 8 12:27 rc*
-rwxr-xr-x 1 root root 9220 Sep 8 18:48 reboot*
-r-x------ 1 root root 4092 Sep 8 18:48 route*
-rw-r--r-- 1 root root 20 Sep 8 18:48 securetty
-rw-r--r-- 1 root root 9749 Sep 8 18:48 services
-rw-r--r-- 1 root root 36 Sep 8 18:48 shells
-rwxr-xr-x 1 root root 13316 Sep 8 18:48 shutdown*
-rwxr-xr-x 1 root root 2496 Sep 8 18:48 swapoff*
-rwxr-xr-x 1 root root 2496 Sep 8 18:48 swapon*
-rw-r--r-- 1 root root 5314 Sep 8 18:48 termcap
-rwxr-xr-x 1 root root 5412 Sep 8 18:48 umount*
-rw-r--r-- 1 root root 224 Sep 8 18:48 utmp
-rw-r--r-- 1 root root 280 Sep 8 18:48 wtmp
boot_disk/lib:
total 629
-rwxr-xr-x 1 root root 17412 Sep 10 14:58 ld.so*
-rwxr-xr-x 1 root root 623620 Sep 8 18:33 libc.so.4*
<sect2>Utility Disk ls-lR Directory Listing
<p>
The utility listing is of directory util_disk:
total 1
drwxr-xr-x 2 root root 1024 Sep 10 16:05 bin/
util_disk/bin:
total 897
-rwxr-xr-x 1 root root 41984 Sep 10 14:11 cpio*
-rwxr-xr-x 1 root root 504451 Sep 9 21:39 ftape.o*
-rwxr-xr-x 1 root root 63874 Sep 9 21:40 gzip*
-rwxr-xr-x 1 root root 13316 Sep 9 21:34 insmod*
-rwxr-xr-x 1 root root 58 Sep 9 21:34 lsmod*
-rwxr-xr-x 1 root root 3288 Sep 9 21:34 mknod*
-rwxr-xr-x 1 root root 9220 Sep 9 21:34 rmmod*
-rwxr-xr-x 1 root root 226308 Sep 9 22:13 tar*
4.2. Shell Scripts to Build Diskettes
There are two shell scripts:
o mkroot - builds a root or boot/root diskette.
o mkutil - builds a utility diskette.
Both are currently configured to run in the parent directory of
boot_disk and util_disk, each of which contains everything to be
copied to it's diskette. Note that these shell scripts will *NOT*
automatically set up and copy all the files for you - you work out
which files are needed, set up the directories and copy the files to
those directories. The shell scripts are samples which will copy the
contents of those directories. Note that they are primitive shell
scripts and are not meant for the novice user.
The scripts both contain configuration variables at the start which
allow them to be easily configured to run anywhere. First, set up the
model directories and copy all the required files into them. Then
check the configuration variables in the shell scripts and change them
as required before running the scripts.
4.2.1. mkroot - Make Root or Boot/Root Diskette
______________________________________________________________________
# mkroot: make a boot/boot disk - creates a boot/root 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 dirst be set up,
# then change the configuration variables below to suit
# your system.
#
# usage: mkroot [nokernel]
# if the parameter is omitted, then the kernel and LILO
# are copied.
# 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...
BOOTDISKDIR=./boot_disk # name of boot disk directory
MOUNTPOINT=./mnt # temporary mount point for diskette
LILODIR=/sbin # directory containing lilo
LILOBOOT=/boot/boot.b # lilo boot sector
LILOMSG=./lilo.msg # lilo message to display at boot time
LILOCONFIG=./lilo.conf # lilo parms for boot/root diskette
DISKETTEDEV=/dev/fd0 # device name of diskette drive
echo $0: create boot/root diskette
echo Warning: data on diskette will be overwritten!
echo Insert diskette in $DISKETTEDEV and and press any key...
read anything
mke2fs $DISKETTEDEV
if [ $? -ne 0 ]
then
echo mke2fs failed
exit
fi
mount -t ext2 $DISKETTEDEV $MOUNTPOINT
if [ $? -ne 0 ]
then
echo mount failed
exit
fi
# copy the directories containing files
for i in bin etc lib
do
cp -dpr $BOOTDISKDIR/$i $MOUNTPOINT
done
# copy dev *without* trying to copy the files in it
cp -dpR $BOOTDISKDIR/dev $MOUNTPOINT
# create empty directories required
mkdir $MOUNTPOINT/proc
mkdir $MOUNTPOINT/tmp
mkdir $MOUNTPOINT/mnt
mkdir $MOUNTPOINT/usr
# copy the kernel
if [ "$1" != "nokernel" ]
then
echo "Copying kernel"
cp $BOOTDISKDIR/vmlinux $MOUNTPOINT
echo kernel copied
# setup lilo
cp $LILOBOOT $MOUNTPOINT
cp $LILOMSG $MOUNTPOINT
$LILODIR/lilo -C $LILOCONFIG
echo LILO installed
fi
umount $MOUNTPOINT
echo Root diskette complete
______________________________________________________________________
4.2.2. mkutil - Make Utility Diskette
______________________________________________________________________
# 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...
read anything
mke2fs $DISKETTEDEV
if [ $? -ne 0 ]
then
echo mke2fs failed
exit
fi
# Any file system type would do here
mount -t ext2 $DISKETTEDEV $MOUNTPOINT
if [ $? -ne 0 ]
then
echo mount failed
exit
fi
# copy the directories containing files
cp -dpr $UTILDISKDIR/bin $MOUNTPOINT
umount $MOUNTPOINT
echo Utility diskette complete
______________________________________________________________________
5. FAQ
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
command:
rdev vmlinuz
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:
FDISK /MBR
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
this.
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
are:
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
drive
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
time?
Where a disk device cannot be autodetected it is necessary to supply
the kernel with a command device parameter string, such as:
aha152x=0x340,11,3,1
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
would be:
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
statement.
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.
6. References
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:
http://sunsite.unc.edu/mdw/linux.html
If desperate, send mail to:
[email protected]
with the word "help" in the message, then follow the mailed
instructions.
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
document.
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:
http://www.icce.rug.nl/karel/programs/SAR.html
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.