Penguin
Diff: HowToBootdiskHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and revision by previous author of HowToBootdiskHOWTO.

Other diffs: Previous Major Revision, Previous Revision, or view the Annotated Edit History

Newer page: version 3 Last edited on Thursday, October 21, 2004 5:16:22 pm by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:06:18 am by perry Revert
@@ -1,3385 +1 @@
-The Linux Bootdisk HOWTO  
-!!!The Linux Bootdisk HOWTO  
-!Tom Fawcett  
-  
- Bootdisk-HOWTO@linuxdoc.org  
-  
-  
-  
-  
-Copyright (c) 1995-2002 by Tom Fawcett  
-  
-  
-  
-v4.5, January 2002  
-  
-  
-  
-  
-  
-  
-  
- This document describes how to design and build boot/root  
-diskettes for Linux. These disks can be used as rescue disks or  
-to test new system components. You should be reasonably  
-familiar with system administration tasks before attempting to  
-build a bootdisk. If you just want a rescue disk to have for  
-emergencies, see Appendix A.1.  
-  
-  
-  
-  
-  
-  
-----; __Table of Contents__; 1. Preface: ; 1.1. Version notes; 1.2. To do list; 1.3. Feedback and credits; 1.4. Distribution policy; 2. Introduction; 3. Bootdisks and the boot process: ; 3.1. The boot process; 3.2. Disk types; 4. Building a root filesystem: ; 4.1. Overview; 4.2. Creating the filesystem; 4.3. Populating the filesystem; 4.4. Providing for PAM and NSS; 4.5. Modules; 4.6. Some final details; 4.7. Wrapping it up; 5. Choosing a kernel; 6. Putting them together: Making the diskette(s): ; 6.1. Transferring the kernel with LILO; 6.2. Transferring the kernel without LILO; 6.3. Setting the ramdisk word; 6.4. Transferring the root filesystem; 7. Troubleshooting, or The Agony of Defeat; 8. Reducing root filesystem size: ; 8.1. Increase the diskette density; 8.2. Replace common utilities with !BusyBox; 8.3. Use an alternate shell; 8.4. Strip libraries and binaries; 8.5. Move files to a utility disk; 9. Miscellaneous topics: ; 9.1. Non-ramdisk root filesystems; 9.2. Building a utility disk; 10. How the pros do it; 11. Creating bootable CD-ROMs: ; 11.1. What is El Torito?; 11.2. How it Works; 11.3. How to make it work; 11.4. Create Win9x Bootable CD-Roms; 12. Frequently Asked Question (FAQ) list; A. Resources and pointers: ; A.1. Pre-made Bootdisks; A.2. Rescue packages; A.3. LILO -- the Linux loader; A.4. Ramdisk usage; A.5. The Linux boot process; B. LILO boot error codes; C. Sample root filesystem listings; D. Sample utility disk directory listing  
-!!!1. Preface  
-  
-  
-  
-  
-  
-  
- This document may be outdated. If the date on the title page is  
-more than six months ago, please check the Bootdisk-HOWTO homepage to see if a more recent version exists.  
-  
-  
-  
-  
-Although this document should be legible in its text form,  
-it looks much better in Postscript, PDF or HTML forms because of  
-the typographical conventions used.  
-  
-  
-----  
-!!1.1. Version notes  
-  
-Graham Chapman wrote the original Bootdisk-HOWTO and supported it  
-through version 3.1. Tom Fawcett started as co-author around the time  
-kernel v2 was introduced, and he is the document's current maintainer.  
-Chapman has disappeared from the Linux community and his whereabouts are  
-currently unknown.  
-  
-  
-  
-  
-This information is intended for Linux on the  
-''Intel'' platform. Much of this information may be  
-applicable to Linux on other processors, but I have no first-hand  
-experience or information about this. If you have experience with  
-bootdisks on other platforms, please contact me.  
-  
-  
-----  
-!!1.2. To do list  
-  
-  
-  
-  
-  
-  
-#  
-  
- User-mode-linux ( http://user-mode-linux.sourceforge.net) seems like a great  
-way to test out bootdisks without having to reboot your machine  
-constantly. I haven't been able to get it to work. If anyone has  
-been using this consistently with homemade bootdisks, please let  
-me know.  
-  
-  
-  
-#  
-#  
-  
- Re-analyze distribution bootdisks and update the "How the  
-Pros do it" section.  
-  
-  
-  
-#  
-#  
-  
-Figure out just how much of the init-getty-login sequence can  
-be simplified, and rip it out. A few people have said that  
-init can be linked directly to /bin/sh; if so, and if this imposes  
-no great limitations, alter the instructions to do this.  
-This would eliminate the need for getty, login, gettydefs, and  
-maybe all that PAM and NSS stuff.  
-  
-  
-  
-#  
-#  
-  
-Go through the 2.4 kernel source code again and write a  
-detailed explanation of how the boot process and ramdisk-loading  
-process work, in detail. (If only so that I understand it  
-better.) There are some issues about initrd and limitations of  
-booting devices (eg flash memory) that I don't understand yet.  
-  
-  
-  
-#  
-#  
-  
- Delete section that describes how to upgrade existing  
-distribution bootdisks. This is usually more trouble than it's  
-worth.  
-  
-  
-  
-#  
-#  
-  
-Replace rdev commands with LILO keywords.  
-  
-  
-  
-#  
-  
-  
-----  
-!!1.3. Feedback and credits  
-  
-I welcome any feedback, good or bad, on the content of this  
-document. I have done my best to ensure that the instructions and  
-information herein are accurate and reliable, but I don't know  
-everything and I don't keep up on kernel development. Please let me  
-know if you find errors or omissions. When writing, please indicate the  
-version number of the document you're referencing. Be nice.  
-  
-  
-  
-  
- We thank the many people who assisted with corrections and  
-suggestions. Their contributions have made it far better than we  
-could ever have done alone.  
-  
-  
-  
-  
- Send comments and corrections to the author at the email address  
-above. ''Please read Section 7  
-before asking me questions''. Do  
-''not'' email me disk images.  
-  
-  
-----  
-!!1.4. Distribution policy  
-  
- Copyright © 1995-2002 by Tom Fawcett and Graham Chapman.  
-This document may be distributed under the terms set forth in the Linux Documentation Project  
-License. Please contact the authors if you are unable to get  
-the license.  
-  
-  
-  
-  
- This is free documentation. It is distributed in the hope  
-that it will be useful, but ''without any  
-warranty''; without even the implied warranty of  
-''merchantability'' or ''fitness for a  
-particular purpose''.  
-  
-  
-----  
-!!!2. Introduction  
-  
-Linux boot disks are useful in a number of situations, such as testing a  
-new kernel, recovering from a disk failure (anything from a lost boot  
-sector to a disk head crash), fixing a disabled system, or upgrading  
-critical system files safely (such as libc.so).  
-  
-  
-  
-There are several ways of obtaining boot disks:  
-  
-  
-  
-  
-  
-*  
-  
-Use one from a distribution such as Slackware. This will at  
-least allow you to boot.  
-  
-  
-  
-*  
-*  
-  
-Use a rescue package to set up disks designed to be used  
-as rescue disks.  
-  
-  
-  
-*  
-*  
-  
-Learn what is required for each of the types of disk to operate,  
-then build your own.  
-  
-  
-*  
-Some people choose the last option so they can do it themselves. That way,  
-if something breaks, they can work out what to do to fix it. Plus it's a  
-great way to learn about how a Linux system works.  
-  
-  
-  
-This document assumes some basic familiarity with Linux system  
-administration concepts. For example, you should know about  
-directories, filesystems and floppy diskettes. You should know how to  
-use __mount__ and __df__. You should  
-know what /etc/passwd and  
-fstab files are for and what they look like. You  
-should know that most of the commands in this HOWTO should be run as  
-root.  
-  
-  
-  
-Constructing a bootdisk from scratch can be complicated. If you  
-haven't read the Linux FAQ and related documents, such as the Linux  
-Installation HOWTO and the Linux Installation Guide, you should not be  
-trying to build boot diskettes. If you just need a working bootdisk  
-for emergencies, it is ''much'' easier to download a  
-prefabricated one. See Appendix A.1, below, for where to  
-find these.  
-  
-----  
-!!!3. Bootdisks and the boot process  
-  
-A bootdisk is basically a miniature, self-contained Linux system on a  
-diskette. It must perform many of the same functions that a complete  
-full-size Linux system performs. Before trying to build one you should  
-understand the basic Linux boot process. Here we present the basics, which  
-are sufficient for understanding the rest of this document. Many details and  
-alternative options have been omitted.  
-  
-----  
-!!3.1. The boot process  
-  
-  
-All PC systems start the boot process by executing code in ROM  
-(specifically, the ''BIOS'') to load the sector from  
-sector , cylinder 0 of the boot drive. The boot drive is usually the  
-first floppy drive (designated A: in DOS and  
-/dev/fd0 in Linux). The BIOS then tries to execute  
-this sector. On most bootable disks, sector , cylinder 0 contains either:  
-  
-  
-  
-  
-  
-*  
-  
-code from a boot loader such as LILO, which locates the kernel,  
-loads it and executes it to start the boot proper; or  
-  
-  
-*  
-*  
-  
-the start of an operating system kernel, such as Linux.  
-  
-  
-*  
-  
-  
-  
-If a Linux kernel has been raw-copied to a diskette, the first sector of the  
-disk will be the first sector of the Linux kernel itself. This first sector  
-will continue the boot process by loading the rest of the kernel from the boot  
-device.  
-  
-  
-  
-When the kernel is completely loaded, it initializes device drivers and its  
-internal data structures. Once it is completely initialized, it consults a  
-special location in its image called the ''ramdisk word''.  
-This word tells it how and where to find its ''root  
-filesystem''. A root filesystem is simply a filesystem that will be  
-mounted as ``/''. The kernel has to be told where to  
-look for the root filesystem; if it cannot find a loadable image there, it  
-halts.  
-  
-  
-  
-In some boot situations - often when booting from a diskette  
-- the root filesystem is loaded into a ''ramdisk'',  
-which is RAM accessed by the system as if it were a disk. RAM is several  
-orders of magnitude faster than a floppy disk, so system operation is fast  
-from a ramdisk. Also, the kernel can load a ''compressed  
-filesystem'' from the floppy and uncompress it onto the ramdisk,  
-allowing many more files to be squeezed onto the diskette.  
-  
-  
-  
-Once the root filesystem is loaded and mounted, you see a message like:  
-  
- VFS: Mounted root (ext2 filesystem) readonly.  
-  
-  
-  
-Once the system has loaded a root filesystem successfully, it tries to  
-execute the init program (in /bin or  
-/sbin). init reads its  
-configuration file /etc/inittab, looks for a line  
-designated sysinit, and executes the named script. The  
-sysinit script is usually something like  
-/etc/rc or /etc/init.d/boot. This  
-script is a set of shell commands that set up basic system services, such as  
-running __fsck__ on hard disks, loading necessary kernel  
-modules, initializing swapping, initializing the network, and mounting disks  
-mentioned in /etc/fstab.  
-  
-  
-  
-This script often invokes various other scripts to do modular  
-initialization. For example, in the common !SysVinit structure, the directory  
-/etc/rc.d/ contains a complex structure of subdirectories  
-whose files specify how to enable and shut down most system services. However,  
-on a bootdisk the sysinit script is often very simple.  
-  
-  
-  
-When the sysinit script finishes control returns to __init__,  
-which then enters the ''default runlevel'', specified in  
-inittab with the initdefault keyword.  
-The runlevel line usually specifies a program like __getty__,  
-which is responsible for handling commununications through the console and  
-ttys. It is the __getty__ program which prints the familiar  
-``login:'' prompt. The __getty__ program in  
-turn invokes the __login__ program to handle login validation  
-and to set up user sessions.  
-  
-----  
-!!3.2. Disk types  
-  
-Having reviewed the basic boot process, we can now define various  
-kinds of disks involved. We classify disks into four types. The  
-discussion here and throughout this document uses the term ``disk'' to  
-refer to floppy diskettes unless otherwise specified, though most of  
-the discussion could apply equally well to hard disks.  
-  
-  
-  
-  
-  
-  
-  
-; boot:  
-  
-A disk containing a kernel which can be booted. The disk  
-can be used to boot the kernel, which then may load a root file system on  
-another disk. The kernel on a bootdisk usually must be told where to find  
-its root filesystem.  
-  
-  
-  
-Often a bootdisk loads a root filesystem from another diskette, but it is  
-possible for a bootdisk to be set up to load a hard disk's root filesystem  
-instead. This is commonly done when testing a new kernel (in fact,  
-``__make zdisk__'' will create such a bootdisk automatically  
-from the kernel source code).  
-  
-; root:  
-  
-A disk with a filesystem containing files  
-required to run a Linux system. Such a disk does not necessarily  
-contain either a kernel or a boot loader.   
-  
-  
-  
-A root disk can be used to run the system independently of any other  
-disks, once the kernel has been booted. Usually the root disk is  
-automatically copied to a ramdisk. This makes root disk accesses much  
-faster, and frees up the disk drive for a utility disk.  
-  
-; boot/root:  
-  
-A disk which contains both the kernel and a root filesystem. In other  
-words, it contains everything necessary to boot and run a Linux system  
-without a hard disk. 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 is increasingly difficult to  
-fit everything on a single diskette, even with compression.  
-  
-; utility:  
-  
-A disk which contains a filesystem, 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.  
-  
-  
-  
-  
-  
-In general, when we talk about ``building a bootdisk'' we mean  
-creating both the boot (kernel) and root (files) portions. They may  
-be either together (a single boot/root disk) or separate (boot + root  
-disks). The most flexible approach for rescue diskettes is probably  
-to use separate boot and root diskettes, and one or more utility  
-diskettes to handle the overflow.  
-  
-----  
-!!!4. Building a root filesystem  
-  
-Creating the root filesystem involves selecting files necessary for the  
-system to run. In this section we describe how to build a  
-''compressed root filesystem''. A less common option is to  
-build an uncompressed filesystem on a diskette that is directly mounted as  
-root; this alternative is described in Section 9.1.  
-  
-----  
-!!4.1. Overview  
-  
-A root filesystem must contain 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:  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-The basic file system structure,  
-  
-  
-*  
-*  
-  
-Minimum set of directories: /dev,  
-/proc,  
-/bin,  
-/etc,  
-/lib,  
-/usr,  
-/tmp,  
-  
-  
-*  
-*  
-  
-Basic set of utilities: sh, ls, cp,  
-mv, etc.,  
-  
-  
-*  
-*  
-  
-Minimum set of config files: rc, inittab, fstab, etc.,  
-  
-  
-*  
-*  
-  
-Devices: /dev/hd*, /dev/tty*, /dev/fd0, etc.,  
-  
-  
-*  
-*  
-  
-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:  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-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.  
-  
-  
-*  
-*  
-  
- Restore all or part of your original root drive from backup using  
-archive and compression utilities such as cpio,  
-tar, gzip and  
-ftape.  
-  
-  
-*  
-  
-  
-  
-We describe how to build a ''compressed'' filesystem, so  
-called because it is compressed on disk and, when booted, is uncompressed onto  
-a ramdisk. With a compressed filesystem you can fit many files (approximately  
-six megabytes) onto a standard 1440K diskette. Because the filesystem is much  
-larger than a diskette, it cannot be built on the diskette. We have to build  
-it elsewhere, compress it, then copy it to the diskette.  
-  
-----  
-!!4.2. Creating the filesystem  
-  
-In order to build such a root filesystem, you need a spare device that  
-is large enough to hold all the files before compression. You will  
-need a device capable of holding about four megabytes. There are  
-several choices:  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
- Use a ''ramdisk'' (DEVICE =  
-/dev/ram0). In this case, memory is used to simulate  
-a disk drive. The ramdisk must be large enough to hold a filesystem of the  
-appropriate size. If you use LILO, check your configuration file  
-(/etc/lilo.conf) for a line like RAMDISK =  
-nnn which determines the maximum RAM that can be allocated to a  
-ramdisk. The default is 4096K, which should be sufficient. You should  
-probably not try to use such a ramdisk on a machine with less than 8MB of  
-RAM.  
-Check to make sure you have a device like /dev/ram0,  
-/dev/ram or /dev/ramdisk. If not, create  
-/dev/ram0 with __mknod__ (major number  
-1, minor ).  
-  
-  
-*  
-*  
-  
-If you have an unused hard disk partition that is large enough (several  
-megabytes), this is acceptable.  
-  
-  
-*  
-*  
-  
-Use a ''loopback device'', which allows a disk file to be  
-treated as a device. Using a loopback device you can create a three  
-megabyte file on your hard disk and build the filesystem on it.  
-  
-  
-  
-Type __man losetup__ for instructions on using loopback  
-devices. If you don't have __losetup__, you can get it  
-along with compatible versions of __mount__ and  
-__unmount__ from the util-linux package  
-in the directory ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/.  
-  
-  
-  
- If you do not have a loop device (/dev/loop0,  
-/dev/loop1, etc.) on your system, you will have to  
-create one with ``__mknod /dev/loop0 b 7 __''. Once you've  
-installed these special __mount__ and  
-__umount__ binaries, create a temporary file on a hard disk  
-with enough capacity (eg, /tmp/fsfile). You can use a  
-command like:  
-  
- dd if=/dev/zero of=/tmp/fsfile bs=1k count=nnn  
-to create an nnn-block file.  
-  
-  
-  
-Use the file name in place of DEVICE below. When you issue a  
-mount command you must include the option -o loop to tell  
-mount to use a loopback device.  
-  
-  
-  
-*  
-  
-  
-  
-After you've chosen one of these options, prepare the DEVICE  
-with:  
-  
- dd if=/dev/zero of=DEVICE bs=1k count=4096  
-  
-  
-  
-This command zeroes out the device.  
-  
-  
-  
-  
-  
-  
-  
-  
-Zeroing the device is critical because the filesystem will be compressed  
-later, so all unused portions should be filled with zeroes to achieve maximum  
-compression. Keep this in mind whenever you move or delete files on the  
-filesystem. The filesystem will correctly de-allocate the blocks,  
-''but it will not zero them out again''. If you do a lot of  
-deletions and copying, your compressed filesystem may end up much larger than  
-necessary.  
-  
-  
-  
-  
-Next, create the filesystem. The Linux kernel recognizes two file system  
-types for root disks to be automatically copied to ramdisk. These are minix  
-and ext2, of which ext2 is preferred. If using ext2, you may find it useful  
-to use the -N option to specify more inodes than the  
-default; -N 2000 is suggested so that you don't run out of  
-inodes. Alternatively, you can save on inodes by removing lots of unnecessary  
-/dev files. __mke2fs__ will by default  
-create 360 inodes on a 1.44Mb diskette. I find that 120 inodes is ample on my  
-current rescue root diskette, but if you include all the devices in  
-/dev you will easily exceed 360. Using a compressed root  
-filesystem allows a larger filesystem, and hence more inodes by default, but  
-you may still need to either reduce the number of files or increase the number  
-of inodes.  
-  
-  
-  
-So the command you use will look like:  
-  
- mke2fs -m 0 -N 2000 DEVICE  
-  
-  
-  
-(If you're using a loopback device, the disk file you're using should be  
-supplied in place of this DEVICE.)  
-  
-  
-  
-The __mke2fs__ command will automatically detect the  
-space available and configure itself accordingly. The  
-``-m '' parameter prevents it from reserving space  
-for root, and hence provides more usable space on the disk.  
-  
-  
-  
-Next, mount the device:  
-  
- mount -t ext2 DEVICE /mnt  
-(You must create a mount point /mnt if it  
-does not already exist.) In the remaining sections, all destination  
-directory names are assumed to be relative to /mnt.  
-  
-----  
-!!4.3. Populating the filesystem  
-  
-Here is a reasonable minimum set of directories for your root filesystem  
- [[1 ]:  
-  
-  
-  
-  
-  
-*  
-  
-/dev -- Device files, required to perform I/O  
-  
-  
-*  
-*  
-  
-/proc -- Directory stub required by the  
-proc filesystem  
-  
-  
-*  
-*  
-  
-/etc -- System configuration files  
-  
-  
-*  
-*  
-  
-/sbin -- Critical system binaries  
-  
-  
-*  
-*  
-  
-/bin -- Essential binaries 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  
-  
-  
-*  
-  
-  
-  
-Three of these directories will be empty on the root filesystem, so they  
-only need to be created with __mkdir__. The  
-/proc directory is basically a stub under which the  
-proc filesystem is placed. The directories /mnt and  
-/usr are only mount points for use after the boot/root  
-system is running. Hence again, these directories only need to be created.  
-  
-  
-  
-The remaining four directories are described in the following sections.  
-  
-----  
-!4.3.1. /dev  
-  
- 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 mkdir 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 devices files from your  
-existing hard disk /dev directory. The only requirement  
-is that you copy the device special files using -R option.  
-This will copy the directory without attempting to copy the contents of the  
-files. Be sure to use an ''upper case R''.  
-For example:  
-  
- cp -dpR /dev/fd[[01]* /mnt/dev  
-cp -dpR /dev/tty[[-6] /mnt/dev  
-assuming that the diskette is mounted at /mnt. The  
-dp switches ensure that symbolic links are copied as links,  
-rather than using the target file, 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.  
-  
-  
-  
-However the devices files are created, check that any special devices  
-you need have been placed on the rescue diskette. For example,  
-ftape uses tape devices, so you will need to copy all of  
-these if you intend to access your floppy tape drive from the bootdisk.  
-  
-  
-  
-Note that one inode is required for each device special file, and inodes  
-can at times be a scarce resource, especially on diskette filesystems. You'll  
-need to be selective about the device files you include. For example, if you  
-do not have SCSI disks you can safely ignore /dev/sd*; if  
-you don't intend to use serial ports you can ignore  
-/dev/ttyS*.  
-  
-  
-  
-If, in building your root filesystem, you get the error No  
-space left on device but a df command shows space  
-still available, you have probably run out of inodes. A df  
--i will display inode usage.  
-  
-  
-  
-  
-  
-  
-  
-  
-Be sure to include the following files from this directory:  
-console, kmem, mem, null,  
-ram0 and tty1.  
-  
-----  
-!4.3.2. /etc  
-  
-The /etc directory contains configuration files. What it should contain  
-depends on what programs you intend to run.  
-On most systems, these can be divided into three groups:  
-  
-  
-  
-  
-  
-#  
-  
-Required at all times, ''e.g.'' rc,  
-fstab, passwd.  
-  
-  
-#  
-#  
-  
-May be required, but no one is too sure.  
-  
-  
-#  
-#  
-  
-Junk that crept in.  
-  
-  
-#  
-Files which are not essential can usually 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, 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:  
-  
-  
-  
-  
-  
-#  
-  
-The ones I must configure for a boot/root system:  
-  
-  
-  
-  
-  
-##  
-  
-rc.d/* -- system startup and run level change scripts  
-  
-  
-##  
-##  
-  
-fstab -- list of file systems to be mounted  
-  
-  
-##  
-##  
-  
-inittab -- parameters for the  
-__init__ process, the first process started at boot time.  
-  
-  
-##  
-##  
-  
-gettydefs -- parameters for the  
-__init__ process, the first process started at boot time.  
-  
-  
-##  
-  
-  
-#  
-#  
-  
-The ones I should tidy up for a boot/root system:  
-  
-  
-  
-  
-  
-##  
-  
-passwd -- Critical list of users, home directories, etc.  
-  
-  
-##  
-##  
-  
-group -- user groups.   
-  
-  
-##  
-##  
-  
-shadow -- passwords of users. You may not have this.  
-  
-  
-##  
-##  
-  
-termcap -- the terminal capability database.  
-  
-  
-##  
-  
-  
-  
-If security is important, passwd and  
-shadow should be pruned to avoid copying user passwords  
-off the system, and so that unwanted logins are rejected when you boot from  
-diskette.  
-  
-  
-  
-  
-Be sure that passwd contains at least  
-root. If you intend other users to login, be sure their  
-home directories and shells exist.  
-  
-  
-  
-termcap, the terminal database, is typically several  
-hundred kilobytes. The version on your boot/root diskette should be pruned  
-down to contain only the terminal(s) you use, which is usually just the  
-linux or linux-console entry.  
-  
-  
-#  
-#  
-  
-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 surprisingly small.  
-  
-  
-  
-  
-  
-*  
-  
-rc should contain:  
-  
- #!/bin/sh  
-/bin/mount -av  
-/bin/hostname Kangaroo  
-Be sure it is executable, be sure it has a "#!" line at the top, and be sure  
-any absolute filenames are correct. You don't really need to run  
-__hostname__ - it just looks nicer if you do.  
-  
-  
-*  
-*  
-  
-fstab should contain at least:  
-  
- /dev/ram0 / ext2 defaults  
-/dev/fd0 / ext2 defaults  
-/proc /proc proc defaults  
-You can copy entries from your existing fstab, but you  
-should not automatically mount any of your hard disk partitions; use the  
-noauto keyword with them. Your hard disk may be damaged  
-or dead when the bootdisk is used.  
-  
-  
-*  
-  
-  
-  
-Your inittab should be changed so that its  
-sysinit line runs rc or whatever  
-basic boot script will be used. Also, if you want to ensure that users on  
-serial ports cannot login, comment out all the entries for  
-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.  
-  
-  
-  
-A minimal inittab file looks like this:  
-  
- id:2:initdefault:  
-si::sysinit:/etc/rc  
-1:2345:respawn:/sbin/getty 9600 tty1  
-2:23:respawn:/sbin/getty 9600 tty2  
-The inittab file defines what the system will run in  
-various states including startup, move to multi-user mode, etc.  
-Check carefully the filenames mentioned in inittab; if  
-init cannot find the program mentioned the bootdisk will  
-hang, and you may not even get an error message.  
-  
-  
-  
-Note that some programs cannot be moved elsewhere because other programs have  
-hardcoded their locations. For example, on my system,  
-/etc/shutdown has hardcoded in it  
-/etc/reboot. If I move reboot to  
-/bin/reboot, and then issue a shutdown  
-command, it will fail because it cannot find the reboot  
-file.  
-  
-  
-  
-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 listing in Appendix C. Probably  
-it will suffice to copy only those files, but systems differ a great deal, so  
-you cannot be sure that the same set of files on your system is equivalent to  
-the files in the list. The only sure method is to start with  
-inittab and work out what is required.  
-  
-  
-  
-Most systems now use an /etc/rc.d/ directory  
-containing shell scripts for different run levels. The minimum is a single  
-rc script, but it may be simpler just to copy  
-inittab and the /etc/rc.d  
-directory from your existing system, and prune the shell scripts in the  
-rc.d directory to remove processing not relevent to a  
-diskette system environment.  
-  
-----  
-!4.3.3. /bin and /sbin  
-  
-The /bin directory is a convenient place for extra  
-utilities you need to perform basic operations, utilities such as  
-__ls__, __mv__, __cat__ and  
-__dd__. See Appendix C for an example list  
-of files that go in a __/bin__ and  
-/sbin directories. It does not include any of the  
-utilities required to restore from backup, such as __cpio__,  
-__tar__ and __gzip__. That is because I  
-place these on a separate utility diskette, to save space on the boot/root  
-diskette. Once the boot/root diskette is booted, it is copied 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 Section 9.2. It is probably desirable to maintain a copy of the  
-same version of backup utilities used to write the backups so you don't  
-waste time trying to install versions that cannot read your backup tapes.  
-  
-  
-  
-  
-  
-  
-  
-  
-Be sure to include the following programs: init,  
-getty or equivalent, login, mount, some  
-shell capable of running your rc scripts, a link from sh to the  
-shell.  
-  
-----  
-!4.3.4. /lib  
-  
-In /lib you place necessary shared libraries and  
-loaders. If the necessary libraries 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.  
-  
-  
-  
-Nearly every program requires at least the libc  
-library, libc.so.''N'', where  
-''N'' is the current version number. Check your  
-/lib directory. The file  
-libc.so.N is usually a symlink to a filename with a  
-complete version number:  
-  
-  
-  
-  
-% ls -l /lib/libc*  
--rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*  
-lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -b libc-2.1.1.so*  
-  
-  
-  
- In this case, you want libc-2.1.1.so. To find  
-other libraries you should go through all the binaries you plan to include  
-and check their dependencies with __ldd__. For example:  
-  
- % ldd /sbin/mke2fs  
-libext2fs.so.2 =b /lib/libext2fs.so.2 (0x40014000)  
-libcom_err.so.2 =b /lib/libcom_err.so.2 (0x40026000)  
-libuuid.so.1 =b /lib/libuuid.so.1 (0x40028000)  
-libc.so.6 =b /lib/libc.so.6 (0x4002c000)  
-/lib/ld-linux.so.2 =b /lib/ld-linux.so.2 (0x40000000)  
-Each file on the right-hand side is required. The file may be a symbolic  
-link.  
-  
-  
-  
- Note that some libraries are ''quite large'' and  
-will not fit easily on your root filesystem. For example, the  
-libc.so listed above is about 4 meg. You will  
-probably need to strip libraries when copying them to your root filesystem.  
-See Section 8 for instructions.  
-  
-  
-  
-In /lib you must also include a loader for the libraries.  
-The loader will be either ld.so (for A.OUT libraries,  
-which are no longer common) or ld-linux.so (for  
-ELF libraries). Newer versions of __ldd__ tell you exactly  
-which loader is needed, as in the example above, but older versions may not.  
-If you're unsure which you need, run the __file__ command on  
-the library. For example:  
-  
-% file /lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so  
-/lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped  
-/lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped  
-/lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped  
-The QMAGIC indicates that 4.7.2 is for  
-A.OUT libraries, and ELF indicates that  
-5.4.33 and 2.1.1 are for ELF.  
-  
-  
-  
-  
-Copy the specific loader(s) you need to the root filesystem you're building.  
-Libraries and loaders should be checked ''carefully'' against  
-the included binaries. If the kernel cannot load a necessary library, the  
-kernel may hang with no error message.  
-  
-----  
-!!4.4. Providing for PAM and NSS  
-  
-Your system may require dynamically loaded libraries that are not visible to  
-ldd. If you don't provide for these, you may have  
-trouble logging in or using your bootdisk.  
-  
-----  
-!4.4.1. PAM (Pluggable Authentication Modules)  
-  
-If your system uses PAM (Pluggable Authentication Modules), you must make some  
-provision for it on your bootdisk. Briefly, PAM is a sophisticated modular  
-method for authenticating users and controlling their access to services. An  
-easy way to determine if your system uses PAM is run ldd  
-on your login executable; if the output includes  
-libpam.so, you need PAM.  
-  
-  
-  
-Fortunately, security is usually of no concern with bootdisks since  
-anyone who has physical access to a machine can usually do anything they  
-want anyway. Therefore, you can effectively disable PAM by creating a  
-simple /etc/pam.conf file in your root filesystem that  
-looks like this:  
-  
-OTHER auth optional /lib/security/pam_permit.so  
-OTHER account optional /lib/security/pam_permit.so  
-OTHER password optional /lib/security/pam_permit.so  
-OTHER session optional /lib/security/pam_permit.so  
-Also copy the file /lib/security/pam_permit.so to  
-your root filesystem. This library is only about 8K so it imposes minimal  
-overhead.  
-  
-  
-  
-This configuration allows anyone complete access to the files and  
-services on your machine. If you care about security on your bootdisk for  
-some reason, you'll have to copy some or all of your hard disk's PAM setup to  
-your root filesystem. Be sure to read the PAM documentation carefully, and  
-copy any libraries needed in /lib/security onto your root  
-filesystem.  
-  
-  
-  
-You must also include /lib/libpam.so on your bootdisk.  
-But you already know this since you ran ldd on  
-/bin/login, which showed this dependency.  
-  
-----  
-!4.4.2. NSS (Name Service Switch)  
-  
-If you are using glibc (aka libc6), you will have to make provisions  
-for name services or you will not be able to login. The file  
-/etc/nsswitch.conf controls database lookups for  
-various servies. If you don't plan to access services from the  
-network (eg, DNS or NIS lookups), you need only prepare a simple  
-nsswitch.conf file that looks like this:  
-  
- passwd: files  
-shadow: files  
-group: files  
-hosts: files  
-services: files  
-networks: files  
-protocols: files  
-rpc: files  
-ethers: files  
-netmasks: files  
-bootparams: files  
-automount: files  
-aliases: files  
-netgroup: files  
-publickey: files  
-This specifies that every service be provided only by local files.  
-You will also need to include  
-/lib/libnss_files.so.''X'',  
-where ''X'' is 1 for glibc 2.0 and 2 for glibc 2.1.  
-This library will be loaded dynamically to handle the file lookups.  
-  
-  
-  
-If you plan to access the network from your bootdisk, you may want to create a  
-more elaborate nsswitch.conf file. See the  
-nsswitch man page for details. You must include a file  
-/lib/libnss_''service''.so.1  
-for each ''service'' you specify.  
-  
-----  
-!!4.5. Modules  
-  
- If you have a modular kernel, you must consider which modules you  
-may want to load from your bootdisk after booting. You might want to  
-include __ftape__ and __zftape__ modules if  
-your backup tapes are on floppy tape, modules for SCSI devices if you have  
-them, and possibly modules for PPP or SLIP support if you want to access  
-the net in an emergency.  
-  
-  
-  
-These modules may be placed in /lib/modules. You should also  
-include __insmod__, __rmmod__ and __lsmod__. Depending on whether you  
-want to load modules automatically, you might also include __modprobe__,  
-__depmod__ and __swapout__. If you use  
-__kerneld__, include it along  
-with /etc/conf.modules.  
-  
-  
-  
-However, the main advantage to using modules is that you can move non-critical  
-modules to a utility disk and load them when needed, thus using less space on  
-your root disk. If you may have to deal with many different devices, this  
-approach is preferable to building one huge kernel with many drivers built in.  
-  
-  
-  
-  
-  
-  
-  
-  
-In order to boot a compressed ext2 filesystem, you must have ramdisk and  
-ext2 support built-in. ''They cannot be supplied as  
-modules.''  
-  
-----  
-!!4.6. Some final details  
-  
- Some system programs, such as __login__, complain if  
-the file /var/run/utmp and the directory  
-/var/log do not exist. So:  
-  
-  
- mkdir -p /mnt/var/{log,run}  
-touch /mnt/var/run/utmp  
-  
-Finally, after you have set up all the libraries you need, run  
-__ldconfig__ to remake /etc/ld.so.cache on  
-the root filesystem. The cache tells the loader where to find the libraries.  
-You can do this with:  
-  
- ldconfig -r /mnt  
-  
-  
-----  
-!!4.7. Wrapping it up  
-  
-When you have finished constructing the root filesystem, unmount it, copy it  
-to a file and compress it:  
-  
- umount /mnt  
-dd if=DEVICE bs=1k | gzip -v9 b rootfs.gz  
-When this finishes you will have a file rootfs.gz. This  
-is your compressed root filesystem. You should check its size to make sure it  
-will fit on a diskette; if it doesn't you'll have to go back and remove some  
-files. Some suggestions for reducing root filesystem size appear in Section 8.  
-  
-----  
-!!!5. Choosing a kernel  
-  
-At this point you have a complete compressed root filesystem. The next step  
-is to build or select a 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. If you are building a single boot/root diskette, the  
-kernel will be one of the largest files on the diskette so you will have to  
-reduce the size of the kernel as much as possible. To reduce kernel size,  
-build 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. As stated  
-before, your kernel ''must'' have ramdisk and ext2 support  
-built into it.  
-  
-  
-  
- 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 to read  
-your backups.  
-  
-  
-  
-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.  
-  
-  
-  
-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. If you have trouble  
-building a kernel, you should probably not attempt to build boot/root  
-systems anyway. Remember to compress the kernel with ``__make zImage__''.  
-  
-----  
-!!!6. Putting them together: Making the diskette(s)  
-  
-At this point you have a kernel and a compressed root filesystem. If you are  
-making a boot/root disk, check their sizes to make sure they will both fit on  
-one disk. If you are making a two disk boot+root set, check the root  
-filesystem to make sure it will fit on a single diskette.  
-  
-  
-  
- You should decide whether to use LILO to boot the bootdisk kernel.  
-The alternative is to copy the kernel directly to the diskette and boot  
-without LILO. The advantage of using LILO is that it enables you to supply  
-some parameters to the kernel which may be necessary to initialize your  
-hardware (Check the file /etc/lilo.conf on your  
-system. If it exists and has a line like  
-``append=...'', you probably need this feature). The  
-disadvantage of using LILO is that building the bootdisk is more  
-complicated and takes slightly more space. You will have to set up a small  
-separate filesystem, which we shall call the ''kernel  
-filesystem'', where you transfer the kernel and a few other files  
-that LILO needs.  
-  
-  
-  
- If you are going to use LILO, read on; if you are going to transfer  
-the kernel directly, skip ahead to Section 6.2.  
-  
-----  
-!!6.1. Transferring the kernel with LILO  
-  
-First, make sure you have a recent version of LILO.  
-  
-  
-  
-You must create a small configuration file for LILO.  
-It should look like this:  
-  
- boot =/dev/fd0  
-install =/boot/boot.b  
-map =/boot/map  
-read-write  
-backup =/dev/null  
-compact  
-image = KERNEL  
-label = Bootdisk  
-root =/dev/fd0  
-For an explanation of these parameters, see LILO's user documentation. You  
-will probably also want to add an append=... line to  
-this file from your hard disk's /etc/lilo.conf file.  
-  
-  
-  
-Save this file as bdlilo.conf.  
-  
-  
-  
- You now have to create a small filesystem, which we shall call a  
-''kernel filesystem'', to distinguish it from the root  
-filesystem.  
-  
-  
-  
-First, figure out how large the filesystem should be. Take the size of your  
-kernel in blocks (the size shown by ``__ls -s KERNEL__'') and  
-add 50. Fifty blocks is approximately the space needed for inodes plus other  
-files. You can calculate this number exactly if you want to, or just use 50.  
-If you're creating a two-disk set, you may as well overestimate the space since  
-the first disk is only used for the kernel anyway. Call this number  
-KERNEL_BLOCKS.  
-  
-  
-  
-Put a floppy diskette in the drive (for simplicity we'll assume  
-/dev/fd0) and create an ext2 kernel filesystem on it:  
-  
- mke2fs -N 24 -m 0 /dev/fd0 KERNEL_BLOCKS  
-The ``-N 24'' specifies 24 inodes, which is all you should  
-need for this filesystem. Next, mount the filesystem, remove the  
-lost+found directory, and create dev  
-and boot directories for LILO:  
-  
- mount -o dev /dev/fd0 /mnt  
-rm -rf /mnt/lost+found  
-mkdir /mnt/{boot,dev}  
-  
-  
-  
-Next, create devices /dev/null and  
-/dev/fd0. Instead of looking up the device numbers, you  
-can just copy them from your hard disk using -R:  
-  
- cp -R /dev/{null,fd0} /mnt/dev  
-LILO needs a copy of its boot loader, boot.b, which  
-you can take from your hard disk. It is usually kept in the  
-/boot directory.  
-  
- cp /boot/boot.b /mnt/boot  
-Finally, copy in the LILO configuration file you created in the last section,  
-along with your kernel. Both can be put in the root directory:  
-  
- cp bdlilo.conf KERNEL /mnt  
-Everything LILO needs is now on the kernel filesystem, so you are ready to run  
-it. LILO's -r flag is used for installing the boot loader on some other  
-root:  
-  
- lilo -v -C bdlilo.conf -r /mnt  
-LILO should run without error, after which the kernel filesystem  
-should look something like this:  
-  
-total 361  
-1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf  
-1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/  
-1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/  
-358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz  
-boot:  
-total 8  
-4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b  
-4 -rw------- 1 root root 3584 Jan 10 07:23 map  
-dev:  
-total  
-0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0  
-0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null  
-  
-  
-  
-Do not worry if the file sizes are slightly different from yours.  
-  
-  
-  
-Now leave the diskette in the drive and go to Section 6.3.  
-  
-----  
-!!6.2. Transferring the kernel without LILO  
-  
-If you are ''not'' using LILO, transfer the kernel to the  
-bootdisk with __dd__:  
-  
- % dd if=KERNEL of=/dev/fd0 bs=1k  
-353+1 records in  
-353+1 records out  
-In this example, __dd__ wrote 353 complete records + 1  
-partial record, so the kernel occupies the first 354 blocks of the  
-diskette. Call this number KERNEL_BLOCKS and  
-remember it for use in the next section.  
-  
-  
-  
-Finally, set the root device to be the diskette itself, then set the  
-root to be loaded read/write:  
-  
- rdev /dev/fd0 /dev/fd0  
-rdev -R /dev/fd0  
-Be careful to use a capital -R in the second  
-__rdev__ command.  
-  
-----  
-!!6.3. Setting the ramdisk word  
-  
-  
-Inside the kernel image is the ''ramdisk word'' that  
-specifies where the root filesystem is to be found, along with other  
-options. The word can be accessed and set via the __rdev__  
-command, and its contents are interpreted as follows:  
-  
-  
-  
-  
-  
-Bit fieldDescription0-10Offset to start of ramdisk, in 1024 byte blocks11-13unused14Flag indicating that ramdisk is to be loaded15Flag indicating to prompt before loading rootfs  
-  
-  
-  
-  
-  
-  
-  
-If bit 15 is set, on boot-up you will be prompted to place a new floppy  
-diskette in the drive. This is necessary for a two-disk boot set.  
-  
-  
-  
-There are two cases, depending on whether you are building a single  
-boot/root diskette or a double ``boot+root'' diskette set.  
-  
-  
-  
-  
-  
-  
-#  
-  
- If you are building a single disk, the compressed root filesystem  
-will be placed right after the kernel, so the offset will be the first free  
-block (which should be the same as  
-KERNEL_BLOCKS). Bit 14 will be set to 1, and bit  
-15 will be zero.  
-For example, say you're building a single disk and the root filesystem will  
-begin at block 253 (decimal). The ramdisk word value should be 253  
-(decimal) with bit 14 set to 1 and bit 15 set to . To calculate the value  
-you can simply add the decimal values. 253 + (2^14) = 253 + 16384 =  
-16637. If you don't quite understand where this number comes from, plug it  
-into a scientific calculator and convert it to binary,  
-  
-  
-#  
-#  
-  
-If you are building a two-disk set, the root filesystem will begin at  
-block zero of the second disk, so the offset will be zero. Bit 14 will be  
-set to 1 and bit 15 will be 1. The decimal value will be  
-2^14 + 2^15 = 49152 in this case.  
-  
-  
-#  
-  
-After carefully calculating the value for the ramdisk word, set it with  
-__rdev -r__. Be sure to use the  
-''decimal'' value. If you used LILO, the argument to  
-__rdev__ here should be the ''mounted kernel  
-path'',  
-e.g. /mnt/vmlinuz; if you copied the kernel with  
-__dd__, instead  
-use the floppy device name (''e.g.,'' /dev/fd0).  
-  
- rdev -r KERNEL_OR_FLOPPY_DRIVE VALUE  
-  
-  
-  
-If you used LILO, unmount the diskette now.  
-  
-  
-  
-  
-  
-  
-  
-  
-Do not believe what the rdev/ramsize manpage says about ramdisk  
-size.  
-The manpage is obsolete. As of kernel 2.0 or so, the ramdisk word no  
-longer determines the ramdisk size; the word is instead interpreted  
-according to the table at the beginning of section Section 6.3. For a detailed  
-explanation, see the documentation file ramdisk.txt or  
-http://www.linuxhq.com/kernel/v2.4/doc/ramdisk.txt.html.  
-  
-  
-----  
-!!6.4. Transferring the root filesystem  
-  
-The last step is to transfer the root filesystem.  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
- If the root filesystem will be placed on the  
-''same'' disk as the kernel, transfer it using  
-__dd__ with the seek option, which  
-specifies how many blocks to skip:  
-  
- dd if=rootfs.gz of=/dev/fd0 bs=1k seek=''KERNEL_BLOCKS''  
-  
-  
-*  
-*  
-  
-If the root filesystem will be placed on a ''second''  
-disk, remove the first diskette, put the second diskette in the drive, then  
-transfer the root filesystem to it:  
-  
- dd if=rootfs.gz of=/dev/fd0 bs=1k  
-  
-  
-*  
-  
-  
-  
-Congratulations, you are done!  
-  
-  
-  
-  
-  
-  
-  
-  
-You should always test a bootdisk before putting it aside for an emergency.  
-If it fails to boot, read on.  
-  
-----  
-!!!7. Troubleshooting, or The Agony of Defeat  
-  
-When building bootdisks, the first few tries often will not boot. The general  
-approach to building a root disk is to assemble components from your existing  
-system, and try and get the diskette-based system to the point where it displays  
-messages on the console. Once it starts talking to you, the battle is half over  
-because you can see what it is complaining about, and you can fix individual  
-problems until the system works smoothly. If the system just hangs with no  
-explanation, finding the cause can be difficult. The recommended procedure for  
-investigating the problem where the system will not talk to you is as follows:  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-You may see a message like this:  
-  
-Kernel panic: VFS: Unable to mount root fs on XX:YY  
-This is a common problem and it has only a few causes. First, check the device  
-''XX:YY'' against the list of device codes in  
-/usr/src/linux/Documentation/devices.txt. If it is  
-incorrect, you probably didn't do an __rdev -R__, or you did it  
-on the wrong image. If the device code is correct, then check carefully the  
-device drivers compiled into your kernel. Make sure it has floppy disk, ramdisk  
-and ext2 filesystem support built-in.  
-  
-  
-*  
-*  
-  
-If you see many errors like:  
-  
-end_request: I/O error, dev 01:00 (ramdisk), sector NNN  
-This is an I/O error from the ramdisk driver, usually because the kernel is  
-trying to write beyond the end of the device. The ramdisk is too small to hold  
-the root filesystem. Check your bootdisk kernel's initialization messages for a  
-line like:  
-  
- Ramdisk driver initialized : 16 ramdisks of 4096K size  
-Check this size against the ''uncompressed'' size of  
-the root filesystem. If the ramdisks aren't large enough, make them  
-larger.  
-  
-  
-*  
-*  
-  
-Check that the root disk actually contains the directories you think  
-it does. It is easy to copy at the wrong level so that you end up  
-with something like /rootdisk/bin instead of  
-/bin on your root diskette.  
-  
-  
-*  
-*  
-  
-Check that there is a /lib/libc.so with the same link that  
-appears in your /lib directory on your hard disk.  
-  
-  
-*  
-*  
-  
-Check that any symbolic links in your /dev  
-directory in your existing system also exist on your root diskette  
-filesystem, where those links are to devices which you have included  
-in your root diskette. In particular,  
-/dev/console links are essential in many cases.  
-  
-  
-*  
-*  
-  
-Check that you have included /dev/tty1, /dev/null, /dev/zero,  
-/dev/mem, /dev/ram and /dev/kmem files.  
-  
-  
-*  
-*  
-  
-Check your kernel configuration -- support for all resources  
-required up to login point must be built in, not modules.  
-So ''ramdisk and ext2 support must be built-in''.  
-  
-  
-*  
-*  
-  
-Check that your kernel root device and ramdisk settings are correct.  
-  
-  
-*  
-  
-  
-  
-Once these general aspects have been covered, here are some more  
-specific files to check:  
-  
-  
-  
-  
-  
-#  
-  
-Make sure __init__ is included as  
-/sbin/init or /bin/init.  
-Make sure it is executable.  
-  
-  
-#  
-#  
-  
-Run __ldd init__ to check init's libraries. Usually  
-this is just libc.so, but check anyway. Make  
-sure you included the necessary libraries and loaders.  
-  
-  
-#  
-#  
-  
-Make sure you have the right loader for your libraries --  
-ld.so for a.out or ld-linux.so  
-for ELF.  
-  
-  
-#  
-#  
-  
-Check the /etc/inittab on your bootdisk filesystem for  
-the calls to __getty__ (or some __getty__-like  
-program, such as __agetty__, __mgetty__ or  
-__getty_ps__). Double-check these against your hard  
-disk inittab. Check the man pages of the program you use  
-to make sure these make sense. inittab is possibly the  
-trickiest part because its syntax and content depend on the init program used  
-and the nature of the system. The only way to tackle it is to read the man  
-pages for __init__ and inittab and work  
-out exactly what your existing system is doing when it boots. Check to make  
-sure /etc/inittab has a system initialisation entry.  
-This should contain a command to execute the system initialization script,  
-which must exist.  
-  
-  
-#  
-#  
-  
- As with __init__, run __ldd__ on your  
-__getty__ to see what it needs, and make sure the necessary  
-library files and loaders were included in your root filesystem.  
-  
-  
-#  
-#  
-  
-Be sure you have included a shell program (e.g., __bash__ or  
-__ash__)  
-capable of running all of your rc scripts.  
-  
-  
-#  
-#  
-  
-If you have a /etc/ld.so.cache file on your rescue disk,  
-remake it.  
-  
-  
-#  
-  
-  
-  
-If __init__ starts, but you get a message like:  
-  
- Id xxx respawning too fast: disabled for 5 minutes  
-it is coming from __init__, usually indicating that  
-__getty__ or __login__ is dying as soon as it  
-starts up. Check the __getty__ and __login__  
-executables and the libraries they depend upon. Make sure the invocations in  
-/etc/inittab are correct. If you get strange messages  
-from __getty__, it may mean the calling form in  
-/etc/inittab is wrong.  
-  
-  
-  
- If you get a login prompt, and you enter a valid login name but the  
-system prompts you for another login name immediately, the problem may be  
-with PAM or NSS. See Section 4.4. The problem may also be  
-that you use shadow passwords and didn't copy  
-/etc/shadow to your bootdisk.  
-  
-  
-  
- If you try to run some executable, such as __df__, which  
-is on your rescue disk but you yields a message like: df: not  
-found, check two things: (1) Make sure the directory containing the  
-binary is in your PATH, and (2) make sure you have libraries (and loaders) the  
-program needs.  
-  
-----  
-!!!8. Reducing root filesystem size  
-  
-One of the main problems with building bootdisks is getting everything to fit  
-into one (or even two) diskettes. Even when files are compressed this can be  
-very difficult, because Linux system components keep growing. Here are some  
-common techniques used to make everything fit.  
-  
-----  
-!!8.1. Increase the diskette density  
-  
-By default, floppy diskettes are formatted at 1440K, but higher density  
-formats are possible. Whether you can boot from higher density  
-disks depends mostly on your BIOS.  
-fdformat will format disks for  
-the following sizes: 1600K, 1680K, 1722K, 1743K, 1760K, 1840K, and 1920K.  
-See the __fdformat__ man page and  
-/usr/src/linux/Documentation/devices.txt.  
-  
-  
-  
- But what diskette densities/geometries will your machine support? Here  
-are some (lightly edited) answers from Alain Knaff, the author of fdutils.  
-  
-  
-  
-This is more an issue of the BIOS rather than the physical format of the disk.  
-If the BIOS decides that any sector number greater than 18 is bad, then  
-there is not much we can do. Indeed, short of disassembling the BIOS, trial  
-and error seems to be the only way to find out. However, if the BIOS supports  
-ED disks (extra density: 36 sectors/track and 2.88MB), there's a chance that  
-1722K disks are supported as well.  
-  
-  
-  
-Superformatted disks with more than 21 sectors/track are likely not bootable:  
-indeed, those use sectors of non-standard sizes (1024 bytes in a sector  
-instead of 512, for example), and are likely not bootable. It should however  
-be possible to write a special bootsector program to work around this. If I  
-remember correctly, the DOS 2m utility has such a beast, as does OS/2's XDF  
-utilities.  
-  
-  
-  
-Some BIOSes artificially claim that any sector number greater than 18  
-must be in error. As 1722K disks use sector numbers up to 21, these  
-would not be bootable. The best way to test would be to format a test  
-DOS or syslinus disk as 1722K and make it bootable. If you use LILO,  
-don't use the option linear (or else LILO would assume that the disk  
-is the default 18 sectors/track, and the disk will fail to boot even  
-if supported by the BIOS).  
-  
-----  
-!!8.2. Replace common utilities with !BusyBox  
-  
- Much root filesystem space is consumed by common GNU system utilities  
-such as cat, chmod, cp, dd, df, etc. The  
-''!BusyBox'' project was designed to provide minimal  
-replacements for these common system utilities. !BusyBox supplies one single  
-monolithic executable file, /bin/busybox, about 150K, which  
-implements the functions of these utilities. You then create symlinks from  
-different utilities to this executable; busybox sees how it was called and  
-invokes the correct code. !BusyBox even includes a basic shell.  
-!BusyBox is available in binary packages for many distributions, and source  
-code is available from the !BusyBox  
-site.  
-  
-  
-----  
-!!8.3. Use an alternate shell  
-  
- Some of the popular shells for Linux, such as __bash__  
-and __tcsh__, are large and require many libraries. If you  
-don't use the !BusyBox shell, you should still consider replacing your shell  
-anyway. Some light-weight alternatives are __ash__,  
-__lsh__, __kiss__ and __smash__,  
-which are much smaller and require few (or no) libraries. Most of these  
-replacement shells are available from http://www.ibiblio.org/pub/Linux/system/shells/. Make sure any shell you use is capable of running  
-commands in all the rc files you include on your  
-bootdisk.  
-  
-  
-----  
-!!8.4. Strip libraries and binaries  
-  
- Many libraries and binaries are distributed with debugging information.  
-Running __file__ on these files will tell you ``not  
-stripped'' if so.  
-When copying binaries to  
-your root filesystem, it is good practice to use:  
- objcopy --strip-all FROM TO  
-  
-  
-  
-  
-  
-  
-  
-When copying libraries, be sure to use strip-debug instead of  
-strip-all.  
-  
-  
-  
-----  
-!!8.5. Move files to a utility disk  
-  
- If some of your binaries are not needed immediately to boot or login,  
-you can move them to a utility disk. See Section 9.2 for  
-details. You may also consider moving modules to a utility disk as well.  
-  
-  
-----  
-!!!9. Miscellaneous topics  
-!!9.1. Non-ramdisk root filesystems  
-  
-Section 4 gave instructions for building a compressed root  
-filesystem which is loaded to ramdisk when the system boots. This method  
-has many advantages so it is commonly used. However, some systems with  
-little memory cannot afford the RAM needed for this, and they must use root  
-filesystems mounted directly from the diskette.  
-  
-  
-  
-Such filesystems are actually easier to build than compressed root filesystems  
-because they can be built on a diskette rather than on some other device, and  
-they do not have to be compressed. We will outline the procedure as it  
-differs from the instructions above. If you choose to do this, keep in mind  
-that you will have ''much less space'' available.  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-Calculate how much space you will have available for root files.  
-If you are building a single boot/root disk, you must fit all blocks for the  
-kernel plus all blocks for the root filesystem on the one disk.  
-  
-  
-#  
-#  
-  
-Using __mke2fs__, create a root filesystem on a diskette of the  
-appropriate size.  
-  
-  
-#  
-#  
-  
-Populate the filesystem as described above.   
-  
-  
-#  
-#  
-  
-When done, unmount the filesystem and transfer it to a disk file  
-but ''do not compress it''.  
-  
-  
-#  
-#  
-  
-Transfer the kernel to a floppy diskette, as described above. When  
-calculating the ramdisk word, ''set bit 14 to zero'', to indicate that the  
-root filesystem is not to be loaded to ramdisk. Run the __rdev__'s as  
-described.  
-  
-  
-  
-#  
-#  
-  
-Transfer the root filesystem as before.  
-  
-  
-#  
-  
-  
-  
- There are several shortcuts you can take. If you are building a  
-two-disk set, you can build the complete root filesystem directly on the  
-second disk and you need not transfer it to a hard disk file and then back.  
-Also, if you are building a single boot/root disk and using LILO, you can  
-build a ''single'' filesystem on the entire disk,  
-containing the kernel, LILO files and root files, and simply run LILO as  
-the last step.  
-  
-----  
-!!9.2. Building a utility disk  
-  
-Building a utility disk is relatively easy -- simply create a filesystem  
-on a formatted disk and copy files to it. To use it with a bootdisk,  
-mount it manually after the system is booted.  
-  
-  
-  
-In the instructions above, we mentioned that the utility disk could be  
-mounted as /usr. In this case, binaries could be placed into a  
-/bin directory on your utility disk, so that placing  
-/usr/bin in your path will access them. Additional libraries  
-needed by the binaries are placed in /lib on the utility disk.  
-  
-  
-  
-There are several important points to keep in mind when designing a utility  
-disk:  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-Do not place critical system binaries or libraries onto the utility  
-disk, since it will not be mountable until after the system has booted.  
-  
-  
-#  
-#  
-  
-You cannot access a floppy diskette and a floppy tape drive  
-simultaneously. This means that if you have a floppy tape drive, you will not  
-be able to access it while your utility disk is mounted.  
-  
-  
-#  
-#  
-  
-Access to files on the utility disk will be slow.  
-  
-  
-#  
-  
-  
-  
-Appendix D shows a sample of files on a utility disk.  
-Here are some ideas for files you may find useful: programs for examining  
-and manipulating disks (__format, fdisk__) and filesystems  
-(__mke2fs, fsck, debugfs, isofs.o__), a lightweight text  
-editor (__elvis, jove__), compression and archive utilities  
-(__gzip, bzip, tar, cpio, afio__), tape utilities  
-(__mt, ftmt, tob, taper__), communications utilities  
-(__ppp.o, slip.o, minicom__) and utilities for devices  
-(__setserial, mknod__).  
-  
-----  
-!!!10. How the pros do it  
-  
-You may notice that the bootdisks used by major distributions such as  
-Slackware, !RedHat or Debian seem more sophisticated than what is described  
-in this document. Professional distribution bootdisks are based on the  
-same principles outlined here, but employ various tricks because their  
-bootdisks have additional requirements. First, they must be able to work  
-with a wide variety of hardware, so they must be able to interact with the  
-user and load various device drivers. Second, they must be prepared to  
-work with many different installation options, with varying degrees of  
-automation. Finally, distribution bootdisks usually combine installation  
-and rescue capabilities.  
-  
-  
-  
-Some bootdisks use a feature called ''initrd''  
-(''initial ramdisk''). This feature was introduced  
-around 2..x and allows a kernel to boot in two phases. When the  
-kernel first boots, it loads an initial ramdisk image from the boot  
-disk. This initial ramdisk is a root filesystem containing a program  
-that runs before the real root fs is loaded. This program usually  
-inspects the environment and/or asks the user to select various boot  
-options, such as the device from which to load the real rootdisk. It  
-typically loads additional modules not built in to the kernel. When  
-this initial program exits, the kernel loads the real root image and  
-booting continues normally. For further information on  
-__initrd__, see your local file /usr/src/linux/Documentation/initrd.txt  
-and ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz  
-  
-  
-  
-The following are summaries of how each distribution's installation  
-disks seem to work, based on inspecting their filesystems and/or  
-source code. We do not guarantee that this information is completely  
-accurate, or that they have not changed since the versions noted.  
-  
-  
-  
- Slackware (v.3.1) uses a straightforward LILO boot similar to what  
-is described in Section 6.1. The  
-Slackware bootdisk prints a bootup message ("Welcome to the  
-Slackware Linux bootkernel disk!") using LILO's  
-message parameter. This instructs the user to enter a  
-boot parameter line if necessary. After booting, a root filesystem is  
-loaded from a second disk. The user invokes a __setup__  
-script which starts the installation. Instead of using a modular kernel,  
-Slackware provides many different kernels and depends upon the user to  
-select the one matching his or her hardware requirements.  
-  
-  
-  
- !RedHat (v.4.) also uses a LILO boot. It loads a compressed ramdisk  
-on the first disk, which runs a custom __init__ program.  
-This program queries for drivers then loads additional files from a  
-supplemental disk if necessary.  
-  
-  
-  
- Debian (v.1.3) is probably the most sophisticated of the  
-installation disk sets. It uses the SYSLINUX loader to arrange various  
-load options, then uses an initrd image to guide the  
-user through installation. It appears to use both a customized  
-__init__ and a customized shell.  
-  
-----  
-!!!11. Creating bootable CD-ROMs  
-  
-  
-  
-  
-  
-  
-This section was contributed by Rizwan Mohammed Darwe  
-(rizwan AT clovertechnologies dot com)  
-  
-  
-  
-  
-This section assumes that you are familiar with the process and workings of  
-writing CDs in linux. Consider this to be a quick reference to include the  
-ability to boot the CD which you will burn. The CD-Writing-HOWTO should give you  
-an in-depth reference.  
-  
-----  
-!!11.1. What is El Torito?  
-  
-For the x86 platform, many BIOS's have begun to support bootable CDs.  
-The patches for mkisofs is based on the standard called "El Torito".  
-Simply put, El Torito is a specification that says how a cdrom should  
-be formatted such that you can directly boot from it.  
-  
-  
-  
- The "El Torito" spec says that ''any'' cdrom drive  
-should work (SCSI or EIDE) as long as the BIOS supports El Torito. So far  
-this has only been tested with EIDE drives because none of the SCSI  
-controllers that has been tested so far appears to support El Torito. The  
-motherboard definately has to support El Torito. How do you know if your  
-motherboard supports "El Torito"? Well, the ones that support it let you  
-choose booting from hard disk, Floppy, Network or CDROM.  
-  
-----  
-!!11.2. How it Works  
-  
- The El Torito standard works by making the CD drive appear, through  
-BIOS calls, to be a normal floppy drive. This way you simply put any floppy  
-size image (exactly 1440k for a 1.44 meg floppy) somewhere in the ISO  
-filesystem. In the headers of the ISO fs you place a pointer to this image.  
-The BIOS will then grab this image from the CD and for all purposes it acts as  
-if it were booting from the floppy drive. This allows a working LILO boot  
-disk, for example, to simply be used as is.  
-  
-  
-  
-Roughly speaking, the first 1.44 (or 2.88 if supported) Mbytes of the  
-CD-ROM contains a floppy-disk image supplied by you. This image is treated  
-like a floppy by the BIOS and booted from. (As a consequence, while booting  
-from this virtual floppy, your original drive A:  
-(/dev/fd0) may not be accessible, but you can try with  
-/dev/fd1).  
-  
-----  
-!!11.3. How to make it work  
-  
-First create a file, say "boot.img", which is an exact image of the bootable  
-floppy-disk which you want to boot via the CD-ROM. This must be an 1.44 MB  
-bootable floppy-disk. The command below will do this  
-  
- dd if=/dev/fd0 of=boot.img bs=10k count=144  
-assuming the floppy is in the A: drive.  
-  
-  
-  
-Place this image somewhere in the hierarchy which will be the source  
-for the iso9660 filesystem. It is a good idea to put all boot related  
-files in their own directory ("boot/" under the root of the iso9660 fs,  
-for example).  
-  
-  
-  
-One caveat -- Your boot floppy ''must'' load any initial  
-ramdisk via LILO, not the kernel ramdisk driver! This is because once the  
-linux kernel starts up, the BIOS emulation of the CD as a floppy disk is  
-circumvented and will fail. LILO will load the initial ramdisk using BIOS  
-disk calls, so the emulation works as designed.  
-  
-  
-  
-  
-The El Torito specification requires a "boot catalog" to be created as  
-well. This is a 2048 byte file which is of no interest except it is required.  
-The patchwork done by the author of mkisofs will cause it to automatically  
-create the boot catalog, but you must specify where the boot catalog will go  
-in the iso9660 filesystem. Usually it is a good idea to put it in the same  
-place as the boot image, and a name like boot.catalog  
-seems appropriate.  
-  
-  
-  
-So we have our boot image in the file boot.img,  
-and we are going to put it in the directory boot/ under the root of the iso9660 filesystem.  
-We will have the boot catalog go in the same directory with the name  
-boot.catalog. The command to create the iso9660 fs in  
-the file bootcd.iso is then:  
-  
-mkisofs -r -b boot/boot.img -c boot/boot.catalog -o bootcd.iso .  
-The -b option specifies the boot image to be used (note the  
-path is relative to the root of the iso9660 disk), and the -c  
-option is for the boot catalog file. The -r option will make  
-approptiate file ownerships and modes (see the mkisofs  
-manpage). The "." in the end says to take the source from the current  
-directory.  
-  
-  
-  
-Now burn the CD with the usual cdrecord command and it is ready to boot.  
-  
-----  
-!!11.4. Create Win9x Bootable CD-Roms  
-  
-The first step is to get hold of the bootable image used by the source  
-CD. But you cannot simply mount the CD under linux and dd the first 1440k to  
-a floppy disk or to a file like boot.img. Instead you  
-simply boot with the source CD-ROM.  
-  
-  
-  
-When you boot the Win98 CD you are dropped to A: prompt which is the  
-actual ramdisk. And D: or Z: is where all the installables are residing. By  
-using the diskcopy command of dos copy the A: image into the actual floppy  
-drive which is now B: The command below will do this.  
-  
-diskcopy A: B:  
-It works just like dd. You can try booting from this newly created disk to  
-test if the booting process is similar to that of the source CD. Then the  
-usual dd of this floppy to a file like boot.img and then rest is as usual.  
-  
-----  
-!!!12. Frequently Asked Question (FAQ) list; Q: ''I boot from my boot/root disks and nothing happens. What do I  
-do?''; Q: ''How does the Slackware/Debian/!RedHat bootdisk work?''; Q: ''How do I use higher-density (b 1440K) diskettes? How do I figure out  
-which densities will work with my diskette drive?''; Q: ''How do I increase the size of my ramdisks?''; Q: ''How do I make bootable CD-ROMs? ''; Q: ''How do I make bootable LS-120 disks?''; Q: ''How can I make a boot disk with a XYZ driver?''; Q: ''How do I update my root diskette with new files?''; Q: ''How do I remove LILO so that I can use DOS to boot again?''; Q: ''How can I boot if I've lost my kernel ''and''  
-my boot disk?''; Q: ''How can I make extra copies of boot/root diskettes?''; Q: ''How can I boot without typing in "ahaxxxx=nn,nn,nn" every time?''; Q: ''At boot time, I get error "A: cannot execute  
-B". Why?''; Q: ''My kernel has ramdisk support, but initializes ramdisks of 0K. Why?''  
-  
-__Q: __''I boot from my boot/root disks and nothing happens. What do I  
-do?''  
-  
-  
-  
-__A: __See Section 7, above.  
-  
-  
-  
-__Q: __''How does the Slackware/Debian/!RedHat bootdisk work?''  
-  
-  
-  
-__A: __See Section 10, above.  
-  
-  
-  
-__Q: __''How do I use higher-density (b 1440K) diskettes? How do I figure out  
-which densities will work with my diskette drive?''  
-  
-  
-  
-__A: __See Section Section 8, above, for the comments by Alain Knaff  
-on this subject. His is the most authoritative answer I know of.  
-  
-  
-  
-__Q: __''How do I increase the size of my ramdisks?''  
-  
-  
-  
-__A: __This probably should be explained better in the text, but I'll put an answer  
-here for the time being.  
-  
-  
-  
-First, ''do not'' attempt to use the rdev  
-or ramsize commands to do this, no matter what their  
-documentation says. The ramdisk word no longer determines the size of  
-ramdisks.  
-  
-  
-  
-Second, keep in mind that ramdisks are actually dynamic; when you set a  
-ramdisk size you aren't allocating any memory, you're just setting the limit  
-of how large it can grow. Don't be afraid to set these fairly large (eg, 8 or  
-even 16 meg). The RAM space is not actually consumed until you need it.  
-You can set these limits in one of several ways.  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-Use the ramdisk_size=NNN command line  
-parameter. You can either enter this manually or use a command like  
-append="ramdisk_size=NNN" with LILO.  
-  
-  
-#  
-#  
-  
-If you're using LILO, you can use a kernel option like  
-ramdisk=8192K in the lilo.conf file.  
-  
-  
-#  
-#  
-  
-Change the kernel configuration option  
-CONFIG_BLK_DEV_RAM_SIZE and recompile your kernel.  
-  
-  
-#  
-  
-  
-  
-__Q: __''How do I make bootable CD-ROMs? ''  
-  
-  
-  
-__A: __See section Section 11.  
-  
-  
-  
-__Q: __''How do I make bootable LS-120 disks?''  
-  
-  
-  
-__A: __Since I don't have an LS-120 drive, the following information is summarized  
-from information  
-provided by Dave Cinege from the Linux Router Project.  
-  
-  
-  
-The LS-120 is an IDE floppy drive. It is compatible with both standard 3.5"  
-disks and the new 120MB disks. As of Linux v2..31 there is full support. To  
-be able to boot from these you must have a BIOS that specifically allows the  
-LS-120 to be treated as drive 0 (whereas IDE devices normally start at 80).  
-If you do not have BIOS support, you can purchase a small IDE FloppyMAX card  
-from Promise Technologies to overcome this deficiency.  
-  
-  
-  
-The kernel boot loader does not like the LS-120, and instantly dies. Also 2m  
-disks do not like it and will not boot. 1.44MB through 1.74MB disks will work  
-fine. SYSLINUX works with the 120MB disks as of v1.32. You would better off  
-partitioning the disk and using ext2 or minix, instead of SYSLINUX unless you  
-need MS-DOS compatibility.  
-  
-  
-  
-LILO does work fine with 120MB disks. Here is a sample lilo.conf:  
-  
- boot=/dev/hda  
-compact  
-disk=/dev/hda bios=  
-install=/floppy/boot.b  
-map=/floppy/map  
-image=/floppy/linux  
-label=Linux  
-append="load_ramdisk=1"  
-initrd=/floppy/root.bin  
-ramdisk=8192  
-The line "disk=/dev/hda bios=" is what does the trick to make it boot the  
-LS-120.  
-  
-  
-  
-__Q: __''How can I make a boot disk with a XYZ driver?''  
-  
-  
-  
-__A: __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 command  
-__rdev zImage__. If this is not the same as the root device  
-you want, 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 zImage /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''.  
-  
-  
-  
-__Q: __''How do I update my root diskette with new files?''  
-  
-  
-  
-__A: __  
-The easiest way is to copy the filesystem from the rootdisk back to the  
-DEVICE you used (from Section 4.2, above).  
-Then mount the filesystem and make the changes. You have to remember where  
-your root filesystem started and how many blocks it occupied:  
-  
- dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip b DEVICE  
-mount -t ext2 DEVICE /mnt  
-After making the changes, proceed as before (in Section 4.7) and transfer the root filesystem back to the disk.  
-You should not have to re-transfer the kernel or re-compute the ramdisk word  
-if you do not change the starting position of the new root filesystem.  
-  
-  
-  
-__Q: __''How do I remove LILO so that I can use DOS to boot again?''  
-  
-  
-  
-__A: __This is not really a Bootdisk topic, but it is asked often. Within Linux, you  
-can run:  
-  
- /sbin/lilo -u  
-  
-  
-  
- 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.  
-  
-  
-  
-Within DOS and Windows you can use the DOS command:  
-  
- FDISK /MBR  
-MBR stands for Master Boot Record. This command 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.  
-  
-  
-  
-__Q: __''How can I boot if I've lost my kernel ''and''  
-my boot disk?''  
-  
-  
-  
-__A: __If you don't have a boot disk standing by, 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:  
-  
-HEX DEC DESCRIPTION  
-0x01F8 504 Low byte of RAMDISK word  
-0x01F9 505 High byte of RAMDISK word  
-0x01FC 508 Root minor device number - see below  
-0X01FD 509 Root major device number - see below  
-  
-  
-  
-The interpretation of the ramdisk word was described in Section 6.3, above.  
-  
-  
-  
-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 all  
-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 you must write the file to a physical  
-disk starting at the beginning of the disk.  
-  
-  
-  
-__Q: __''How can I make extra copies of boot/root diskettes?''  
-  
-  
-  
-__A: __Because magnetic media may deteriorate over time, you should keep several  
-copies of your rescue disk, in case the original 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=DEVICENAME of=FILENAME  
-where DEVICENAME is the device name of the diskette drive and  
-FILENAME is the name of the (hard-disk) output file. Omitting the  
-count parameter causes __dd__ to copy the  
-whole diskette (2880 blocks if high-density).  
-  
-  
-  
-To copy the resulting file back to a new diskette, insert the new  
-diskette and enter the reverse command:  
-  
- dd if=FILENAME of=DEVICENAME  
-  
-  
-  
-Note that the above discussion assumes that you have only one diskette  
-drive. If you have two of the same type, you can copy diskettes using a  
-command like:  
-  
- dd if=/dev/fd0 of=/dev/fd1  
-  
-  
-  
-__Q: __''How can I boot without typing in "ahaxxxx=nn,nn,nn" every time?''  
-  
-  
-  
-__A: __  
-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:  
-  
-  
-  
-  
-  
-*  
-  
-By entering it on the command line every time the system is booted via  
-LILO. This is boring, though.  
-  
-  
-*  
-*  
-  
-By using LILO's 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.  
-  
-  
-*  
-*  
-  
-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:  
-  
- zImage 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, go 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.  
-  
-  
-  
-__Q: __''At boot time, I get error "A: cannot execute  
-B". Why?''  
-  
-  
-  
-__A: __  
-There are several cases of program names being hardcoded in various utilities.  
-These cases do not occur everywhere, but they may explain why an executable  
-apparently cannot be found on your system even though you can see that it is  
-there. You can find out if a given program has the name of another hardcoded  
-by using the __strings__ command and piping the output  
-through __grep__.  
-  
-  
-  
-Known examples of hardcoding are:  
-  
-  
-  
-  
-  
-*  
-  
-__shutdown__ in some versions has  
-/etc/reboot hardcoded, so __reboot__  
-must be placed in the /etc directory.  
-  
-  
-*  
-*  
-  
-__init__ has caused problems for at least one person, with the  
-kernel being unable to find __init__.  
-  
-  
-*  
-  
-  
-  
- To fix these problems, either move the programs to the correct  
-directory, or change configuration files  
-(e.g. inittab) to point to the correct directory. If  
-in doubt, put programs in the same directories as they are on your hard  
-disk, and use the same inittab and  
-/etc/rc.d files as they appear on your hard disk.  
-  
-  
-  
-__Q: __''My kernel has ramdisk support, but initializes ramdisks of 0K. Why?''  
-  
-  
-  
-__A: __Where this occurs, a kernel message like this will appear as the kernel is  
-booting:  
-  
- Ramdisk driver initialized : 16 ramdisks of 0K size  
-  
-  
-  
-This is probably because the size has been set to 0 by kernel parameters at  
-boot time. This could possibly be because of an overlooked LILO configuration  
-file parameter:  
-  
- ramdisk=  
-  
-  
-  
-This was included in sample LILO configuration files in some older  
-distributions, and was put there to override any previous kernel setting. If  
-you have such a line, remove it.  
-  
-  
-  
-Note that if you attempt to use a ramdisk of 0 size, the  
-behaviour can be unpredictable, and can result in kernel panics.  
-  
-----  
-!!!A. Resources and pointers  
-  
-When retrieving a package, always get the latest version unless you have  
-good reasons for not doing so.  
-  
-----  
-!!!A.1. Pre-made Bootdisks  
-  
-These are sources for distribution bootdisks. ''Please use one of  
-the mirror sites to reduce the load on these machines.''  
-  
-  
-  
-  
-  
-*  
-  
- Slackware bootdisks,  
-rootdisks  
-and Slackware mirror sites  
-  
-  
-*  
-*  
-  
- !RedHat bootdisks and Red Hat mirror sites  
-  
-  
-*  
-*  
-  
- Debian bootdisks and Debian mirror sites  
-  
-  
-*  
-*  
-  
-Mandrake  
-downloads  
-  
-  
-*  
-  
-  
-  
-In addition to the distribution bootdisks, the following rescue disk  
-images are available. Unless otherwise specified, these are available in  
-the directory  
-http://www.ibiblio.org/pub/Linux/system/recovery/!INDEX.html  
-  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-RIP is a boot/rescue system which comes in several  
-versions: one that fits on a 1.44M floppy diskette and one that fits on a  
-CD-ROM. It has large file support and many utility programs for disk  
-maintenance and rescue. It has support for ext2, ext3, iso9660, msdos, ntfs,  
-reiserfs, ufs and vfat. RIP is available from  
-http://www.tux.org/pub/people/kent-robotti/looplinux/rip/index.html  
-  
-  
-*  
-*  
-  
-tomsrtbt, by Tom Oehser, is a single-disk boot/root disk  
-based on kernel 2., with a large set of features and support programs. It  
-supports IDE, SCSI, tape, network adaptors, PCMCIA and more. About 100  
-utility programs and tools are included for fixing and restoring disks.  
-The package also includes scripts for disassembling and reconstructing the  
-images so that new material can be added if necessary.  
-  
-  
-*  
-*  
-  
-rescue02, by John Comyns, is a rescue disk based on kernel  
-1.3.84, with support for IDE and Adaptec 1542 and NCR53C7,8xx. It uses ELF  
-binaries but it has enough commands so that it can be used on any system.  
-There are modules that can be loaded after booting for all other SCSI  
-cards. It probably won't work on systems with 4 mb of ram since it uses a  
-3 mb ram disk.  
-  
-  
-*  
-*  
-  
-resque_disk-2..22, by Sergei Viznyuk, is a  
-full-featured boot/root disk based on kernel 2..22 with built-in  
-support for IDE, many difference SCSI controllers, and ELF/AOUT. Also  
-includes many modules and useful utilities for repairing and restoring  
-a hard disk.  
-  
-  
-*  
-*  
-  
-cramdisk images, based on the 2..23 kernel,  
-available for 4 meg and 8 meg machines. They include math emulation and  
-networking (PPP and dialin script, NE2000, 3C509), or support for the  
-parallel port ZIP drive. These diskette images will boot on a 386 with 4MB  
-RAM. MSDOS support is included so you can download from the net to a DOS  
-partition.  
-  
-  
-*  
-  
-----  
-!!!A.2. Rescue packages  
-  
- Several packages for creating rescue disks are available on  
-www.ibiblio.org. With these packages you specify a set of files for inclusion  
-and the software automates (to varying degrees) the creation of a bootdisk.  
-See http://www.ibiblio.org/pub/Linux/system/recovery/!INDEX.html  
-for more information. ''Check the file dates carefully''.  
-Some of these packages have not been updated in several years and will not  
-support the creation of a compressed root filesystem loaded into ramdisk. To  
-the best of our knowledge, Yard is the only  
-package that will.  
-  
-----  
-!!!A.3. LILO -- the 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 ftp://tsx-11.mit.edu/pub/linux/packages/lilo/. It is also  
-available on Metalab and mirrors.  
-  
-----  
-!!!A.4. Ramdisk usage  
-  
-An excellent description of the how the ramdisk code works may be found  
-with the documentation supplied with the Linux kernel. See  
-/usr/src/linux/Documentation/ramdisk.txt. It is  
-written by Paul Gortmaker and includes a section on creating a compressed  
-ramdisk.  
-  
-----  
-!!!A.5. The Linux boot process  
-  
-For more detail on the Linux boot process, here are some pointers:  
-  
-  
-  
-  
-  
-*  
-  
-The ''Linux  
-System Administrators' Guide'' has a section on booting.  
-  
-  
-*  
-*  
-  
-The LILO ``Technical overview'' has the definitive technical, low-level  
-description of the boot process, up to where the kernel is started.  
-  
-  
-*  
-*  
-  
- The source code is the ultimate guide. Below are some kernel  
-files related to the boot process. If you have the Linux kernel source code,  
-you can find these under /usr/src/linux on your machine;  
-alternatively, Shigio Yamaguchi (shigio at tamacom.com) has a very nice hypertext kernel  
-browser for reading kernel source files. Here are some relevant files  
-to look at:  
-  
-  
-  
-  
-; arch/i386/boot/bootsect.S and  
-setup.S:  
-  
-Contain assembly code for the bootsector itself.  
-  
-; arch/i386/boot/compressed/misc.c:  
-  
-Contains code for uncompressing the kernel.  
-  
-; arch/i386/kernel/:  
-  
-Directory containing kernel initialization code.  
-setup.c defines the ramdisk word.  
-  
-; drivers/block/rd.c:  
-  
-Contains the ramdisk driver. The procedures  
-__rd_load__ and __rd_load_image__ load blocks from a device into a  
-ramdisk. The procedure  
-__identify_ramdisk_image__ determines what  
-kind of filesystem is found and whether it is compressed.  
-  
-  
-  
-  
-*  
-  
-----  
-!!!B. LILO boot error codes  
-  
-Questions about these codes are asked so often on Usenet that we include  
-them here as a public service. This summary is excerpted from Werner  
-Almsberger's LILO User Documentation.  
-  
-  
-  
- When LILO loads itself, it displays the word  
-LILO. Each letter is printed before or after performing  
-some specific action. If LILO fails at some point, the letters printed so  
-far can be used to identify the problem.  
-  
-  
-  
-  
-  
-  
-!OutputProblem(nothing) No part of LILO has been loaded. LILO either isn't installed or  
-the partition on which its boot sector is located isn't active.  
-L The first stage boot loader has been loaded and started, but it  
-can't load the second stage boot loader. The two-digit error  
-codes indicate the type of problem. (See also section ``Disk error  
-codes''.) This condition usually indicates a media failure or a  
-geometry mismatch (e.g. bad disk parameters).  
-LI The first stage boot loader was able to load the second stage boot  
-loader, but has failed to execute it. This can either be caused by  
-a geometry mismatch or by moving /boot/boot.b  
-  
-without running the map installer.  
-LIL The second stage boot loader has been started, but it can't load  
-the descriptor table from the map file. This is typically caused  
-by a media failure or by a geometry mismatch.  
-LIL? The second stage boot loader has been loaded at an incorrect  
-address. This is typically caused by a subtle geometry mismatch or  
-by moving /boot/boot.b without running the  
-map installer.  
-LIL- The descriptor table is corrupt. This can either be caused by a  
-geometry mismatch or by moving /boot/map without running the map  
-installer.  
-LILO All parts of LILO have been successfully loaded.  
-  
-  
-  
-  
-  
-  
-If the BIOS signals an error when LILO is trying to load a boot image, the  
-respective error code is displayed. These codes range from  
-0x00 through 0xbb. See the LILO User  
-Guide for an explanation of these.  
-  
-----  
-!!!C. Sample root filesystem listings  
-  
-  
-/:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 bin  
-drwx--x--x 2 root root 4096 Nov 1 15:39 dev  
-drwx--x--x 3 root root 1024 Nov 1 15:39 etc  
-drwx--x--x 4 root root 1024 Nov 1 15:39 lib  
-drwx--x--x 5 root root 1024 Nov 1 15:39 mnt  
-drwx--x--x 2 root root 1024 Nov 1 15:39 proc  
-drwx--x--x 2 root root 1024 Nov 1 15:39 root  
-drwx--x--x 2 root root 1024 Nov 1 15:39 sbin  
-drwx--x--x 2 root root 1024 Nov 1 15:39 tmp  
-drwx--x--x 7 root root 1024 Nov 1 15:39 usr  
-drwx--x--x 5 root root 1024 Nov 1 15:39 var  
-/bin:  
--rwx--x--x 1 root root 62660 Nov 1 15:39 ash  
--rwx--x--x 1 root root 9032 Nov 1 15:39 cat  
--rwx--x--x 1 root root 10276 Nov 1 15:39 chmod  
--rwx--x--x 1 root root 9592 Nov 1 15:39 chown  
--rwx--x--x 1 root root 23124 Nov 1 15:39 cp  
--rwx--x--x 1 root root 23028 Nov 1 15:39 date  
--rwx--x--x 1 root root 14052 Nov 1 15:39 dd  
--rwx--x--x 1 root root 14144 Nov 1 15:39 df  
--rwx--x--x 1 root root 69444 Nov 1 15:39 egrep  
--rwx--x--x 1 root root 395 Nov 1 15:39 false  
--rwx--x--x 1 root root 69444 Nov 1 15:39 fgrep  
--rwx--x--x 1 root root 69444 Nov 1 15:39 grep  
--rwx--x--x 3 root root 45436 Nov 1 15:39 gunzip  
--rwx--x--x 3 root root 45436 Nov 1 15:39 gzip  
--rwx--x--x 1 root root 8008 Nov 1 15:39 hostname  
--rwx--x--x 1 root root 12736 Nov 1 15:39 ln  
--rws--x--x 1 root root 15284 Nov 1 15:39 login  
--rwx--x--x 1 root root 29308 Nov 1 15:39 ls  
--rwx--x--x 1 root root 8268 Nov 1 15:39 mkdir  
--rwx--x--x 1 root root 8920 Nov 1 15:39 mknod  
--rwx--x--x 1 root root 24836 Nov 1 15:39 more  
--rws--x--x 1 root root 37640 Nov 1 15:39 mount  
--rwx--x--x 1 root root 12240 Nov 1 15:39 mt  
--rwx--x--x 1 root root 12932 Nov 1 15:39 mv  
--r-x--x--x 1 root root 12324 Nov 1 15:39 ps  
--rwx--x--x 1 root root 5388 Nov 1 15:39 pwd  
--rwx--x--x 1 root root 10092 Nov 1 15:39 rm  
-lrwxrwxrwx 1 root root 3 Nov 1 15:39 sh -b ash  
--rwx--x--x 1 root root 25296 Nov 1 15:39 stty  
--rws--x--x 1 root root 12648 Nov 1 15:39 su  
--rwx--x--x 1 root root 4444 Nov 1 15:39 sync  
--rwx--x--x 1 root root 19712 Nov 1 15:39 touch  
--rwx--x--x 1 root root 395 Nov 1 15:39 true  
--rws--x--x 1 root root 19084 Nov 1 15:39 umount  
--rwx--x--x 1 root root 5368 Nov 1 15:39 uname  
--rwx--x--x 3 root root 45436 Nov 1 15:39 zcat  
-/dev:  
-lrwxrwxrwx 1 root root 6 Nov 1 15:39 cdrom -b cdu31a  
-brw-rw-r-- 1 root root 15, 0 May 5 1998 cdu31a  
-crw------- 1 root root 4, 0 Nov 1 15:29 console  
-crw-rw-rw- 1 root uucp 5, 64 Sep 9 19:46 cua0  
-crw-rw-rw- 1 root uucp 5, 65 May 5 1998 cua1  
-crw-rw-rw- 1 root uucp 5, 66 May 5 1998 cua2  
-crw-rw-rw- 1 root uucp 5, 67 May 5 1998 cua3  
-brw-rw---- 1 root floppy 2, 0 Aug 8 13:54 fd0  
-brw-rw---- 1 root floppy 2, 36 Aug 8 13:54 fd0CompaQ  
-brw-rw---- 1 root floppy 2, 84 Aug 8 13:55 fd0D1040  
-brw-rw---- 1 root floppy 2, 88 Aug 8 13:55 fd0D1120  
-brw-rw---- 1 root floppy 2, 12 Aug 8 13:54 fd0D360  
-brw-rw---- 1 root floppy 2, 16 Aug 8 13:54 fd0D720  
-brw-rw---- 1 root floppy 2, 120 Aug 8 13:55 fd0D800  
-brw-rw---- 1 root floppy 2, 32 Aug 8 13:54 fd0E2880  
-brw-rw---- 1 root floppy 2, 104 Aug 8 13:55 fd0E3200  
-brw-rw---- 1 root floppy 2, 108 Aug 8 13:55 fd0E3520  
-brw-rw---- 1 root floppy 2, 112 Aug 8 13:55 fd0E3840  
-brw-rw---- 1 root floppy 2, 28 Aug 8 13:54 fd0H1440  
-brw-rw---- 1 root floppy 2, 124 Aug 8 13:55 fd0H1600  
-brw-rw---- 1 root floppy 2, 44 Aug 8 13:55 fd0H1680  
-brw-rw---- 1 root floppy 2, 60 Aug 8 13:55 fd0H1722  
-brw-rw---- 1 root floppy 2, 76 Aug 8 13:55 fd0H1743  
-brw-rw---- 1 root floppy 2, 96 Aug 8 13:55 fd0H1760  
-brw-rw---- 1 root floppy 2, 116 Aug 8 13:55 fd0H1840  
-brw-rw---- 1 root floppy 2, 100 Aug 8 13:55 fd0H1920  
-lrwxrwxrwx 1 root root 7 Nov 1 15:39 fd0H360 -b fd0D360  
-lrwxrwxrwx 1 root root 7 Nov 1 15:39 fd0H720 -b fd0D720  
-brw-rw---- 1 root floppy 2, 52 Aug 8 13:55 fd0H820  
-brw-rw---- 1 root floppy 2, 68 Aug 8 13:55 fd0H830  
-brw-rw---- 1 root floppy 2, 4 Aug 8 13:54 fd0d360  
-brw-rw---- 1 root floppy 2, 8 Aug 8 13:54 fd0h1200  
-brw-rw---- 1 root floppy 2, 40 Aug 8 13:54 fd0h1440  
-brw-rw---- 1 root floppy 2, 56 Aug 8 13:55 fd0h1476  
-brw-rw---- 1 root floppy 2, 72 Aug 8 13:55 fd0h1494  
-brw-rw---- 1 root floppy 2, 92 Aug 8 13:55 fd0h1600  
-brw-rw---- 1 root floppy 2, 20 Aug 8 13:54 fd0h360  
-brw-rw---- 1 root floppy 2, 48 Aug 8 13:55 fd0h410  
-brw-rw---- 1 root floppy 2, 64 Aug 8 13:55 fd0h420  
-brw-rw---- 1 root floppy 2, 24 Aug 8 13:54 fd0h720  
-brw-rw---- 1 root floppy 2, 80 Aug 8 13:55 fd0h880  
-brw-rw---- 1 root disk 3, 0 May 5 1998 hda  
-brw-rw---- 1 root disk 3, 1 May 5 1998 hda1  
-brw-rw---- 1 root disk 3, 2 May 5 1998 hda2  
-brw-rw---- 1 root disk 3, 3 May 5 1998 hda3  
-brw-rw---- 1 root disk 3, 4 May 5 1998 hda4  
-brw-rw---- 1 root disk 3, 5 May 5 1998 hda5  
-brw-rw---- 1 root disk 3, 6 May 5 1998 hda6  
-brw-rw---- 1 root disk 3, 64 May 5 1998 hdb  
-brw-rw---- 1 root disk 3, 65 May 5 1998 hdb1  
-brw-rw---- 1 root disk 3, 66 May 5 1998 hdb2  
-brw-rw---- 1 root disk 3, 67 May 5 1998 hdb3  
-brw-rw---- 1 root disk 3, 68 May 5 1998 hdb4  
-brw-rw---- 1 root disk 3, 69 May 5 1998 hdb5  
-brw-rw---- 1 root disk 3, 70 May 5 1998 hdb6  
-crw-r----- 1 root kmem 1, 2 May 5 1998 kmem  
-crw-r----- 1 root kmem 1, 1 May 5 1998 mem  
-lrwxrwxrwx 1 root root 12 Nov 1 15:39 modem -b ttyS1  
-lrwxrwxrwx 1 root root 12 Nov 1 15:39 mouse -b psaux  
-crw-rw-rw- 1 root root 1, 3 May 5 1998 null  
-crwxrwxrwx 1 root root 10, 1 Oct 5 20:22 psaux  
-brw-r----- 1 root disk 1, 1 May 5 1998 ram  
-brw-rw---- 1 root disk 1, 0 May 5 1998 ram0  
-brw-rw---- 1 root disk 1, 1 May 5 1998 ram1  
-brw-rw---- 1 root disk 1, 2 May 5 1998 ram2  
-brw-rw---- 1 root disk 1, 3 May 5 1998 ram3  
-brw-rw---- 1 root disk 1, 4 May 5 1998 ram4  
-brw-rw---- 1 root disk 1, 5 May 5 1998 ram5  
-brw-rw---- 1 root disk 1, 6 May 5 1998 ram6  
-brw-rw---- 1 root disk 1, 7 May 5 1998 ram7  
-brw-rw---- 1 root disk 1, 8 May 5 1998 ram8  
-brw-rw---- 1 root disk 1, 9 May 5 1998 ram9  
-lrwxrwxrwx 1 root root 4 Nov 1 15:39 ramdisk -b ram0  
-''*** I have only included devices for the IDE partitions I use.  
-*** If you use SCSI, then use the /dev/sdXX devices instead.''  
-crw------- 1 root root 4, 0 May 5 1998 tty0  
-crw-w----- 1 root tty 4, 1 Nov 1 15:39 tty1  
-crw------- 1 root root 4, 2 Nov 1 15:29 tty2  
-crw------- 1 root root 4, 3 Nov 1 15:29 tty3  
-crw------- 1 root root 4, 4 Nov 1 15:29 tty4  
-crw------- 1 root root 4, 5 Nov 1 15:29 tty5  
-crw------- 1 root root 4, 6 Nov 1 15:29 tty6  
-crw------- 1 root root 4, 7 May 5 1998 tty7  
-crw------- 1 root tty 4, 8 May 5 1998 tty8  
-crw------- 1 root tty 4, 9 May 8 12:57 tty9  
-crw-rw-rw- 1 root root 4, 65 Nov 1 12:17 ttyS1  
-crw-rw-rw- 1 root root 1, 5 May 5 1998 zero  
-/etc:  
--rw------- 1 root root 164 Nov 1 15:39 conf.modules  
--rw------- 1 root root 668 Nov 1 15:39 fstab  
--rw------- 1 root root 71 Nov 1 15:39 gettydefs  
--rw------- 1 root root 389 Nov 1 15:39 group  
--rw------- 1 root root 413 Nov 1 15:39 inittab  
--rw------- 1 root root 65 Nov 1 15:39 issue  
--rw-r--r-- 1 root root 746 Nov 1 15:39 ld.so.cache  
--rw------- 1 root root 32 Nov 1 15:39 motd  
--rw------- 1 root root 949 Nov 1 15:39 nsswitch.conf  
-drwx--x--x 2 root root 1024 Nov 1 15:39 pam.d  
--rw------- 1 root root 139 Nov 1 15:39 passwd  
--rw------- 1 root root 516 Nov 1 15:39 profile  
--rwx--x--x 1 root root 387 Nov 1 15:39 rc  
--rw------- 1 root root 55 Nov 1 15:39 shells  
--rw------- 1 root root 774 Nov 1 15:39 termcap  
--rw------- 1 root root 78 Nov 1 15:39 ttytype  
-lrwxrwxrwx 1 root root 15 Nov 1 15:39 utmp -b ../var/run/utmp  
-lrwxrwxrwx 1 root root 15 Nov 1 15:39 wtmp -b ../var/log/wtmp  
-/etc/pam.d:  
--rw------- 1 root root 356 Nov 1 15:39 other  
-/lib:  
--rwxr-xr-x 1 root root 45415 Nov 1 15:39 ld-2..7.so  
-lrwxrwxrwx 1 root root 11 Nov 1 15:39 ld-linux.so.2 -b ld-2..7.so  
--rwxr-xr-x 1 root root 731548 Nov 1 15:39 libc-2..7.so  
-lrwxrwxrwx 1 root root 13 Nov 1 15:39 libc.so.6 -b libc-2..7.so  
-lrwxrwxrwx 1 root root 17 Nov 1 15:39 libcom_err.so.2 -b libcom_err.so.2.  
--rwxr-xr-x 1 root root 6209 Nov 1 15:39 libcom_err.so.2.  
--rwxr-xr-x 1 root root 153881 Nov 1 15:39 libcrypt-2..7.so  
-lrwxrwxrwx 1 root root 17 Nov 1 15:39 libcrypt.so.1 -b libcrypt-2..7.so  
--rwxr-xr-x 1 root root 12962 Nov 1 15:39 libdl-2..7.so  
-lrwxrwxrwx 1 root root 14 Nov 1 15:39 libdl.so.2 -b libdl-2..7.so  
-lrwxrwxrwx 1 root root 16 Nov 1 15:39 libext2fs.so.2 -b libext2fs.so.2.4  
--rwxr-xr-x 1 root root 81382 Nov 1 15:39 libext2fs.so.2.4  
--rwxr-xr-x 1 root root 25222 Nov 1 15:39 libnsl-2..7.so  
-lrwxrwxrwx 1 root root 15 Nov 1 15:39 libnsl.so.1 -b libnsl-2..7.so  
--rwx--x--x 1 root root 178336 Nov 1 15:39 libnss_files-2..7.so  
-lrwxrwxrwx 1 root root 21 Nov 1 15:39 libnss_files.so.1 -b libnss_files-2..7.so  
-lrwxrwxrwx 1 root root 14 Nov 1 15:39 libpam.so.0 -b libpam.so..64  
--rwxr-xr-x 1 root root 26906 Nov 1 15:39 libpam.so..64  
-lrwxrwxrwx 1 root root 19 Nov 1 15:39 libpam_misc.so.0 -b libpam_misc.so..64  
--rwxr-xr-x 1 root root 7086 Nov 1 15:39 libpam_misc.so..64  
--r-xr-xr-x 1 root root 35615 Nov 1 15:39 libproc.so.1.2.6  
-lrwxrwxrwx 1 root root 15 Nov 1 15:39 libpwdb.so.0 -b libpwdb.so..54  
--rw-r-r--- 1 root root 121899 Nov 1 15:39 libpwdb.so..54  
-lrwxrwxrwx 1 root root 19 Nov 1 15:39 libtermcap.so.2 -b libtermcap.so.2..8  
--rwxr-xr-x 1 root root 12041 Nov 1 15:39 libtermcap.so.2..8  
--rwxr-xr-x 1 root root 12874 Nov 1 15:39 libutil-2..7.so  
-lrwxrwxrwx 1 root root 16 Nov 1 15:39 libutil.so.1 -b libutil-2..7.so  
-lrwxrwxrwx 1 root root 14 Nov 1 15:39 libuuid.so.1 -b libuuid.so.1.1  
--rwxr-xr-x 1 root root 8039 Nov 1 15:39 libuuid.so.1.1  
-drwx--x--x 3 root root 1024 Nov 1 15:39 modules  
-drwx--x--x 2 root root 1024 Nov 1 15:39 security  
-/lib/modules:  
-drwx--x--x 4 root root 1024 Nov 1 15:39 2..35  
-/lib/modules/2..35:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 block  
-drwx--x--x 2 root root 1024 Nov 1 15:39 cdrom  
-/lib/modules/2..35/block:  
-drwx------ 1 root root 7156 Nov 1 15:39 loop.o  
-/lib/modules/2..35/cdrom:  
-drwx------ 1 root root 24108 Nov 1 15:39 cdu31a.o  
-/lib/security:  
--rwx--x--x 1 root root 8771 Nov 1 15:39 pam_permit.so  
-''*** Directory stubs for mounting''  
-/mnt:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 cdrom  
-drwx--x--x 2 root root 1024 Nov 1 15:39 floppy  
-/proc:  
-/root:  
--rw------- 1 root root 176 Nov 1 15:39 .bashrc  
--rw------- 1 root root 182 Nov 1 15:39 .cshrc  
--rwx--x--x 1 root root 455 Nov 1 15:39 .profile  
--rw------- 1 root root 4014 Nov 1 15:39 .tcshrc  
-/sbin:  
--rwx--x--x 1 root root 23976 Nov 1 15:39 depmod  
--rwx--x--x 2 root root 274600 Nov 1 15:39 e2fsck  
--rwx--x--x 1 root root 41268 Nov 1 15:39 fdisk  
--rwx--x--x 1 root root 9396 Nov 1 15:39 fsck  
--rwx--x--x 2 root root 274600 Nov 1 15:39 fsck.ext2  
--rwx--x--x 1 root root 29556 Nov 1 15:39 getty  
--rwx--x--x 1 root root 6620 Nov 1 15:39 halt  
--rwx--x--x 1 root root 23116 Nov 1 15:39 init  
--rwx--x--x 1 root root 25612 Nov 1 15:39 insmod  
--rwx--x--x 1 root root 10368 Nov 1 15:39 kerneld  
--rwx--x--x 1 root root 110400 Nov 1 15:39 ldconfig  
--rwx--x--x 1 root root 6108 Nov 1 15:39 lsmod  
--rwx--x--x 2 root root 17400 Nov 1 15:39 mke2fs  
--rwx--x--x 1 root root 4072 Nov 1 15:39 mkfs  
--rwx--x--x 2 root root 17400 Nov 1 15:39 mkfs.ext2  
--rwx--x--x 1 root root 5664 Nov 1 15:39 mkswap  
--rwx--x--x 1 root root 22032 Nov 1 15:39 modprobe  
-lrwxrwxrwx 1 root root 4 Nov 1 15:39 reboot -b halt  
--rwx--x--x 1 root root 7492 Nov 1 15:39 rmmod  
--rwx--x--x 1 root root 12932 Nov 1 15:39 shutdown  
-lrwxrwxrwx 1 root root 6 Nov 1 15:39 swapoff -b swapon  
--rwx--x--x 1 root root 5124 Nov 1 15:39 swapon  
-lrwxrwxrwx 1 root root 4 Nov 1 15:39 telinit -b init  
--rwx--x--x 1 root root 6944 Nov 1 15:39 update  
-/tmp:  
-/usr:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 bin  
-drwx--x--x 2 root root 1024 Nov 1 15:39 lib  
-drwx--x--x 3 root root 1024 Nov 1 15:39 man  
-drwx--x--x 2 root root 1024 Nov 1 15:39 sbin  
-drwx--x--x 3 root root 1024 Nov 1 15:39 share  
-lrwxrwxrwx 1 root root 10 Nov 1 15:39 tmp -b ../var/tmp  
-/usr/bin:  
--rwx--x--x 1 root root 37164 Nov 1 15:39 afio  
--rwx--x--x 1 root root 5044 Nov 1 15:39 chroot  
--rwx--x--x 1 root root 10656 Nov 1 15:39 cut  
--rwx--x--x 1 root root 63652 Nov 1 15:39 diff  
--rwx--x--x 1 root root 12972 Nov 1 15:39 du  
--rwx--x--x 1 root root 56552 Nov 1 15:39 find  
--r-x--x--x 1 root root 6280 Nov 1 15:39 free  
--rwx--x--x 1 root root 7680 Nov 1 15:39 head  
--rwx--x--x 1 root root 8504 Nov 1 15:39 id  
--r-sr-xr-x 1 root bin 4200 Nov 1 15:39 passwd  
--rwx--x--x 1 root root 14856 Nov 1 15:39 tail  
--rwx--x--x 1 root root 19008 Nov 1 15:39 tr  
--rwx--x--x 1 root root 7160 Nov 1 15:39 wc  
--rwx--x--x 1 root root 4412 Nov 1 15:39 whoami  
-/usr/lib:  
-lrwxrwxrwx 1 root root 17 Nov 1 15:39 libncurses.so.4 -b libncurses.so.4.2  
--rw-r-r--- 1 root root 260474 Nov 1 15:39 libncurses.so.4.2  
-/usr/sbin:  
--r-x--x--x 1 root root 13684 Nov 1 15:39 fuser  
--rwx--x--x 1 root root 3876 Nov 1 15:39 mklost+found  
-/usr/share:  
-drwx--x--x 4 root root 1024 Nov 1 15:39 terminfo  
-/usr/share/terminfo:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 l  
-drwx--x--x 2 root root 1024 Nov 1 15:39 v  
-/usr/share/terminfo/l:  
--rw------- 1 root root 1552 Nov 1 15:39 linux  
--rw------- 1 root root 1516 Nov 1 15:39 linux-m  
--rw------- 1 root root 1583 Nov 1 15:39 linux-nic  
-/usr/share/terminfo/v:  
--rw------- 2 root root 1143 Nov 1 15:39 vt100  
--rw------- 2 root root 1143 Nov 1 15:39 vt100-am  
-/var:  
-drwx--x--x 2 root root 1024 Nov 1 15:39 log  
-drwx--x--x 2 root root 1024 Nov 1 15:39 run  
-drwx--x--x 2 root root 1024 Nov 1 15:39 tmp  
-/var/log:  
--rw------- 1 root root 0 Nov 1 15:39 wtmp  
-/var/run:  
--rw------- 1 root root 0 Nov 1 15:39 utmp  
-/var/tmp:  
-  
-----  
-!!!D. Sample utility disk directory listing  
-  
-  
-total 579  
--rwxr-xr-x 1 root root 42333 Jul 28 19:05 cpio  
--rwxr-xr-x 1 root root 32844 Aug 28 19:50 debugfs  
--rwxr-xr-x 1 root root 103560 Jul 29 21:31 elvis  
--rwxr-xr-x 1 root root 29536 Jul 28 19:04 fdisk  
--rw-r-r--- 1 root root 128254 Jul 28 19:03 ftape.o  
--rwxr-xr-x 1 root root 17564 Jul 25 03:21 ftmt  
--rwxr-xr-x 1 root root 64161 Jul 29 20:47 grep  
--rwxr-xr-x 1 root root 45309 Jul 29 20:48 gzip  
--rwxr-xr-x 1 root root 23560 Jul 28 19:04 insmod  
--rwxr-xr-x 1 root root 118 Jul 28 19:04 lsmod  
-lrwxrwxrwx 1 root root 5 Jul 28 19:04 mt -b mt-st  
--rwxr-xr-x 1 root root 9573 Jul 28 19:03 mt-st  
-lrwxrwxrwx 1 root root 6 Jul 28 19:05 rmmod -b insmod  
--rwxr-xr-x 1 root root 104085 Jul 28 19:05 tar  
-lrwxrwxrwx 1 root root 5 Jul 29 21:35 vi -b elvis  
-  
-  
-!Notes  
-[[1]  
-  
-The directory structure presented here is for root diskette use only.  
-Real Linux systems have a more complex and disciplined set of policies, called  
-the Filesystem  
-Hierarchy Standard, for determining where files should go .)  
+Describe [HowToBootdiskHOWTO ] here.