Penguin
Diff: HowToLoopbackRootFS
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToLoopbackRootFS.

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

Newer page: version 2 Last edited on Tuesday, October 26, 2004 4:43:37 pm by AristotlePagaltzis
Older page: version 1 Last edited on Friday, June 7, 2002 1:07:01 am by perry Revert
@@ -1,1273 +1 @@
-  
-  
-  
-The Loopback Root Filesystem HOWTO  
-  
-  
-  
-----  
-  
-!!!The Loopback Root Filesystem HOWTO  
-  
-!!by Andrew M. Bishop,  
-amb@gedanken.demon.co.ukv1.1, 24 September 1999  
-  
-  
-----  
-''This HOWTO explains how to use the Linux loopback device to create a Linux  
-native filesystem format installation that can be run from a DOS partition  
-without re-partitioning. Other uses of this same technique are also discussed.''  
-----  
-  
-  
-  
-  
-!!1. Introduction  
-  
-  
-*1.1 Copyright  
-  
-*1.2 Revision History  
-  
-  
-  
-  
-  
-!!2. Principles of Loopback Devices and Ramdisks  
-  
-  
-*2.1 Loopback Devices  
-  
-*2.2 Ramdisk Devices  
-  
-*2.3 The Initial Ramdisk Device  
-  
-*2.4 The Root Filesystem  
-  
-*2.5 The Linux Boot Sequence  
-  
-  
-  
-  
-  
-!!3. How To Create a Loopback Root Device  
-  
-  
-*3.1 Requirements  
-  
-*3.2 Creating the Linux Kernel  
-  
-*3.3 Creating the Initial Ramdisk Device  
-  
-*3.4 Creating The Root Device  
-  
-*3.5 Creating the Swap Device  
-  
-*3.6 Creating the MSDOS Directory  
-  
-*3.7 Creating the Boot Floppy  
-  
-  
-  
-  
-  
-!!4. Booting the System  
-  
-  
-*4.1 Possible Problems With Solutions  
-  
-*4.2 Reference Documents  
-  
-  
-  
-  
-  
-!!5. Other Loopback Root Device Possibilities  
-  
-  
-*5.1 DOS Hard-disk Only Installation  
-  
-*5.2 LILO Booted Installation  
-  
-*5.3 VFAT / NTFS Installation  
-  
-*5.4 Installing Linux without Re-partitioning  
-  
-*5.5 Booting From a Non-bootable device  
-  
-----  
-  
-!!1. Introduction  
-  
-  
-  
-  
-  
-  
-  
-!!1.1 Copyright  
-  
-  
-  
-The Loopback Root Filesystem HOWTO  
-Copyright (C) 1998,99 Andrew M. Bishop (amb@gedanken.demon.co.uk).  
-  
-  
-This documentation is free documentation; you can redistribute it and/or modify  
-it under the terms of the GNU General Public License as published by  
-the Free Software Foundation; either version 2 of the License, or  
-(at your option) any later version.  
-  
-  
-This program 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. See the  
-GNU General Public License for more details.  
-  
-  
-The GNU General Public License is available from  
-http://www.fsf.org/  
-or, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA  
-  
-  
-  
-  
-!!1.2 Revision History  
-  
-  
-  
-  
-  
-; __Version 1..__:  
-  
-Initial Version (June 1998)  
-; __Version 1..1-1..3__:  
-  
-Slight Modifications, kernel version changes, typos etc. (1998 - July 1999)  
-; __Version 1.1__:  
-  
-Added Copyright Information and Re-Submitted (September 1999)  
-  
-  
-  
-  
-----  
-  
-!!2. Principles of Loopback Devices and Ramdisks  
-  
-  
-First I will describe some of the general principles that are used in the  
-setting up of a loopback filesystem as the root device.  
-  
-  
-  
-  
-  
-  
-  
-!!2.1 Loopback Devices  
-  
-  
-  
-A __loopback device__ in Linux is a virtual device that can be used like any  
-other media device.  
-  
-  
-  
-  
-  
-Examples of normal media devices are hard disk partitions like  
-/dev/hda1, /dev/hda2, /dev/sda1, or entire disks like  
-the floppy disk /dev/fd0 etc. They are all devices that can be used to  
-hold a files and directory structures. They can be formatted with the  
-filesystem that is required (ext2fs, msdos, ntfs etc.) and then mounted.  
-  
-  
-  
-  
-  
-The loopback filesystem associates a file on another filesystem as a complete  
-device. This can then be formatted and mounted just like any of the other  
-devices listed above. To do this the device called /dev/loop0 or  
-/dev/loop1 etc is associated with the file and then this new virtual  
-device is mounted.  
-  
-  
-  
-  
-  
-  
-  
-!!2.2 Ramdisk Devices  
-  
-  
-  
-In Linux it is also possible to have another type of virtual device mounted as a  
-filesystem, this is the __ramdisk device__.  
-  
-  
-  
-  
-  
-In this case the device does not refer to any physical hardware, but to a  
-portion of memory that is set aside for the purpose. The memory that is  
-allocated is never swapped out to disk, but remains in the disk cache.  
-  
-  
-  
-  
-  
-A ramdisk can be created at any time by writing to the ramdisk device  
-/dev/ram0 or /dev/ram1 etc. This can then be formatted and  
-mounted in the same way that the loopback device is.  
-  
-  
-  
-  
-  
-When a ramdisk is used to boot from (as is often done on Linux installation  
-disks or rescue disks) then the disk image (the entire contents of the disk as a  
-single file) can be stored on the boot floppy in a compressed form. This is  
-automatically recognised by the kernel when it boots and is uncompressed into  
-the ramdisk before it is mounted.  
-  
-  
-  
-  
-  
-  
-  
-!!2.3 The Initial Ramdisk Device  
-  
-  
-  
-The __initial ramdisk__ device in Linux is another important mechanism that  
-we need to be able to use a loopback device as a the root filesystem.  
-  
-  
-  
-  
-  
-When the initial ramdisk is used the filesystem image is copied into memory and  
-mounted so that the files on it can be accessed. A program on this ramdisk  
-(called /linuxrc) is run and when it is finished a different device is  
-mounted as the root filesystem. The old ramdisk is still present though and is  
-mounted on the directory /initrd if present or available through the  
-device /dev/initrd.  
-  
-  
-  
-  
-  
-This is unusual behaviour since the normal boot sequence boots from the  
-designated root partition and keeps on running. With the initial ramdisk option  
-the root partition is allowed to change before the main boot sequence is  
-started.  
-  
-  
-  
-  
-  
-  
-  
-!!2.4 The Root Filesystem  
-  
-  
-  
-The root filesystem is the device that is mounted first so that it appears as  
-the directory called / after booting.  
-  
-  
-  
-  
-  
-There are a number of complications about the root filesystem that are due to  
-the fact that it contains all files. When booting the rc scripts are  
-run, these are either the files in /etc/rc.d or /etc/rc?.d  
-depending on the version of the /etc/init program.  
-  
-  
-  
-  
-  
-When the system has booted it is not possible to unmount the root partition or  
-change it since all programs will be using it to some extent. This is why the  
-initial ramdisk is so useful because it can be used so that the final root  
-partition is not the same as the one that is loaded at boot time.  
-  
-  
-  
-  
-  
-  
-  
-!!2.5 The Linux Boot Sequence  
-  
-  
-  
-To show how the initial ramdisk operates in the boot sequence, the order of  
-events is listed below.  
-  
-  
-  
-  
-  
-  
-  
-  
-#The kernel is loaded into memory, this is performed by LILO or  
-LOADLIN. You can see the Loading... message as this happens.  
-#  
-  
-#The ramdisk image is loaded into memory, again this is performed by  
-LILO or LOADLIN. You can see the Loading... message  
-again as this happens.  
-#  
-  
-#The kernel is initialised, including parsing the command line options and  
-setting of the ramdisk as the root device.  
-#  
-  
-#The program /linuxrc is run on the initial ramdisk.  
-#  
-  
-#The root device is changed to that specified in the kernel parameter.  
-#  
-  
-#The init program /etc/init is run which will perform the user  
-configurable boot sequence.  
-#  
-  
-  
-  
-This is just a simplified version of what happens, but is sufficient to explain  
-how the kernel starts up and where the initial ramdisk is used.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!3. How To Create a Loopback Root Device  
-  
-  
-Now that the general principles are explained the method of creating the  
-loopback device can be explained.  
-  
-  
-  
-  
-  
-  
-  
-!!3.1 Requirements  
-  
-  
-  
-To create the loopback root device will require a number of things.  
-  
-  
-  
-  
-  
-  
-  
-  
-*A working Linux system.  
-*  
-  
-*A way to copy large files onto the target DOS partition.  
-*  
-  
-  
-  
-Most important is access to an installed Linux system. This is because the loop  
-device can only be created under Linux. This will mean that it is not possible  
-to bootstrap a working system from nothing. The requirements of the Linux  
-system that you use is that you can compile a kernel on it.  
-  
-  
-  
-  
-  
-Once the loopback device is created it will be a large file. I have used an 80  
-MB files, but while this was sufficient for an X terminal it may not be enough  
-if you want to use it for much else. This file must be copied onto the DOS  
-partition, so either a network or a lot of floppy disks must be used.  
-  
-  
-  
-  
-  
-The software that you will require includes  
-  
-  
-  
-  
-  
-*LOADLIN version 1.6 or above  
-*  
-  
-*A version of mount that supports loopback devices  
-*  
-  
-*A version of the kernel that supports the required options.  
-*  
-  
-  
-  
-All of these should be standard for recent Linux installations.  
-  
-  
-  
-  
-  
-  
-  
-!!3.2 Creating the Linux Kernel  
-  
-  
-  
-I created the loopback device using Linux kernel version 2..31, other versions  
-should also work, but they must have at least the options listed below.  
-  
-  
-  
-  
-  
-The kernel options that you will need to enable are the following:  
-  
-  
-*RAM disk support (CONFIG_BLK_DEV_RAM).  
-*  
-  
-*Initial RAM disk (initrd) support (CONFIG_BLK_DEV_INITRD).  
-*  
-  
-*Loop device support (CONFIG_BLK_DEV_LOOP).  
-*  
-  
-*fat fs support (CONFIG_FAT_FS).  
-*  
-  
-*msdos fs support (CONFIG_MSDOS_FS).  
-*  
-  
-  
-  
-The first two are for the RAM disk device itself and the initial ram disk  
-device. The next one is the loop back filesystem option. The last two are the  
-msdos filesystem support which is required to mount the DOS partitition.  
-  
-  
-  
-  
-  
-Compiling a kernel without modules is the easiest option, although if you do  
-want modules then it should be possible although I have not tried it. If  
-modules are used then you should make sure that you have the options above  
-compiled in and not as modules themselves.  
-  
-  
-  
-  
-  
-Depending on the kernel version that you have you may need to apply a kernel  
-patch. It is a very simple one that allows the loopback device to be used as  
-the root filesystem.  
-  
-  
-*Kernel versions before 2..; I have no information about these.  
-*  
-  
-*Kernel version 2..0 to 2..34; you need to apply the kernel patch for  
-2..x kernels as shown below.  
-*  
-  
-*Kernel version 2..35 to 2..x; no kernel patch is required.  
-*  
-  
-*Kernel version 2.1.x; you need to apply the kernel patch for 2..x or  
-2.2.x kernels as shown below, depending on the exact 2.1.x version.  
-*  
-  
-*Kernel version 2.2.0 to 2.2.10; you need to apply the kernel patch for  
-2.2.x kernels as shown below.  
-*  
-  
-*Kernel version 2.3.x; you need to apply the kernel patch for 2.2.x kernels  
-as shown below.  
-*  
-  
-  
-  
-  
-  
-  
-For 2..x kernels the file /init/main.c needs to have a single line  
-added to it as shown by the modified version below. The line that says  
-"loop", 0x0700 is the one that was added.  
-  
-  
-  
-  
-  
-  
-  
-  
-static void parse_root_dev(char * line)  
-{  
-int base = ;  
-static struct dev_name_struct {  
-const char *name;  
-const int num;  
-} devices[ [] = {  
-{ "nfs", 0x00ff },  
-{ "loop", 0x0700 },  
-{ "hda", 0x0300 },  
-...  
-{ "sonycd", 0x1800 },  
-{ NULL, 0 }  
-};  
-...  
-}  
-  
-  
-  
-  
-  
-  
-  
-For 2.2.x kernels the file /init/main.c needs to have three lines added  
-to it as shown by the modified version below. The line that says "loop",  
-0x0700 and the ones either side of it are the ones that were added.  
-  
-  
-  
-  
-  
-  
-  
-  
-static struct dev_name_struct {  
-const char *name;  
-const int num;  
-} root_dev_names[[] __initdata = {  
-#ifdef CONFIG_ROOT_NFS  
-{ "nfs", 0x00ff },  
-#endif  
-#ifdef CONFIG_BLK_DEV_LOOP  
-{ "loop", 0x0700 },  
-#endif  
-#ifdef CONFIG_BLK_DEV_IDE  
-{ "hda", 0x0300 },  
-...  
-{ "ddv", DDV_MAJOR << 8},  
-#endif  
-{ NULL, 0 }  
-};  
-  
-  
-  
-  
-Once the kernel is configured it should be compiled to produce a zImage  
-file (make zImage). This file will be arch/i386/boot/zImage  
-when compiled.  
-  
-  
-  
-  
-  
-  
-  
-!!3.3 Creating the Initial Ramdisk Device  
-  
-  
-  
-The initial ramdisk is most easily created as a loopback device from the start.  
-You will need to do this as root, the commands that you need to execute are  
-listed below, they are assumed to be run from root's home directory  
-(/root).  
-  
-  
-  
-  
-  
-  
-  
-  
-mkdir /root/initrd  
-dd if=/dev/zero of=initrd.img bs=1k count=1024  
-mke2fs -i 1024 -b 1024 -m 5 -F -v initrd.img  
-mount initrd.img /root/initrd -t ext2 -o loop  
-cd initrd  
-[[create the files]  
-cd ..  
-umount /root/initrd  
-gzip -c -9 initrd.img > initrdgz.img  
-  
-  
-  
-  
-There are a number of steps to this, but they can be described as follows.  
-  
-  
-#Create a mount point for the initial ramdisk (an empty directory).  
-#  
-  
-#Create an empty file of the size required. Here I have used 1024kB, you may  
-need less or more depending on the contents, (the size is the last parameter).  
-#  
-  
-#Make an ext2 filesystem on the empty file.  
-#  
-  
-#Mount the file onto the mount point, this uses the loopback device.  
-#  
-  
-#Change to the mounted loopback device.  
-#  
-  
-#Create the files that are required (see below for details).  
-#  
-  
-#Move out of the mounted loopback device.  
-#  
-  
-#Unmount the device.  
-#  
-  
-#Create a compressed version for use later.  
-#  
-  
-  
-  
-__Contents Of The Initial Ramdisk__  
-  
-  
-The files that you will need on the ramdisk are the minimum requirements to be  
-able to execute any commands.  
-  
-  
-  
-  
-  
-*/linuxrc The script that is run to mount the msdos file system  
-(see below).  
-*  
-  
-*/lib/* The dynamic linker and the libraries that the programs  
-need.  
-*  
-  
-*/etc/* The cache used by the dynamic linker (not strictly needed,  
-but does stop it complaining).  
-*  
-  
-*/bin/* A shell interpreter (ash because it is smaller  
-than bash. The mount and losetup programs for  
-handling the DOS disk and setting up the loopback devices.  
-*  
-  
-*/dev/* The devices that will be used. You need  
-/dev/zero for ld-linux.so, /dev/hda* to mount the  
-msdos disk and /dev/loop* for the lopback device.  
-*  
-  
-*/mnt An empty directory to mount the msdos disk on.  
-*  
-  
-  
-  
-The initial ramdisk that I used is listed below, the contents come to about  
-800kB when the overhead of the filesystem are taken into account.  
-  
-  
-  
-  
-  
-  
-  
-  
-total 18  
-drwxr-xr-x 2 root root 1024 Jun 2 13:57 bin  
-drwxr-xr-x 2 root root 1024 Jun 2 13:47 dev  
-drwxr-xr-x 2 root root 1024 May 20 07:43 etc  
-drwxr-xr-x 2 root root 1024 May 27 07:57 lib  
--rwxr-xr-x 1 root root 964 Jun 3 08:47 linuxrc  
-drwxr-xr-x 2 root root 12288 May 27 08:08 lost+found  
-drwxr-xr-x 2 root root 1024 Jun 2 14:16 mnt  
-./bin:  
-total 168  
--rwxr-xr-x 1 root root 60880 May 27 07:56 ash  
--rwxr-xr-x 1 root root 5484 May 27 07:56 losetup  
--rwsr-xr-x 1 root root 28216 May 27 07:56 mount  
-lrwxrwxrwx 1 root root 3 May 27 08:08 sh -> ash  
-./dev:  
-total  
-brw-r--r-- 1 root root 3, 0 May 20 07:43 hda  
-brw-r--r-- 1 root root 3, 1 May 20 07:43 hda1  
-brw-r--r-- 1 root root 3, 2 Jun 2 13:46 hda2  
-brw-r--r-- 1 root root 3, 3 Jun 2 13:46 hda3  
-brw-r--r-- 1 root root 7, 0 May 20 07:43 loop0  
-brw-r--r-- 1 root root 7, 1 Jun 2 13:47 loop1  
-crw-r--r-- 1 root root 1, 3 May 20 07:42 null  
-crw-r--r-- 1 root root 5, 0 May 20 07:43 tty  
-crw-r--r-- 1 root root 4, 1 May 20 07:43 tty1  
-crw-r--r-- 1 root root 1, 5 May 20 07:42 zero  
-./etc:  
-total 3  
--rw-r--r-- 1 root root 2539 May 20 07:43 ld.so.cache  
-./lib:  
-total 649  
-lrwxrwxrwx 1 root root 18 May 27 08:08 ld-linux.so.1 -> ld-linux.so.1.7.14  
--rwxr-xr-x 1 root root 21367 May 20 07:44 ld-linux.so.1.7.14  
-lrwxrwxrwx 1 root root 14 May 27 08:08 libc.so.5 -> libc.so.5.3.12  
--rwxr-xr-x 1 root root 583795 May 20 07:44 libc.so.5.3.12  
-./lost+found:  
-total  
-./mnt:  
-total  
-  
-  
-  
-  
-The only complex steps about this are the devices in dev. Use the  
-mknod program to create them, use the existing devices in /dev  
-as a template to get the required parameters.  
-  
-  
-  
-  
-  
-__The /linuxrc file__  
-  
-  
-The /linuxrc file on the initial ramdisk is required to do all of the  
-preparations so that the loopback device can be used for the root partition when  
-it exits.  
-  
-  
-The example below tries to mount /dev/hda1 as an msdos partition and  
-if it succeeds then sets up the files /linux/linuxdsk.img as  
-/dev/loop0 and /linux/linuxswp.img as /dev/loop1.  
-  
-  
-  
-  
-  
-  
-  
-  
-#!/bin/sh  
-echo INITRD: Trying to mount /dev/hda1 as msdos  
-if /bin/mount -n -t msdos /dev/hda1 /mnt; then  
-echo INITRD: Mounted OK  
-/bin/losetup /dev/loop0 /mnt/linux/linuxdsk.img  
-/bin/losetup /dev/loop1 /mnt/linux/linuxswp.img  
-exit  
-else  
-echo INITRD: Mount failed  
-exit 1  
-fi  
-  
-  
-  
-  
-The first device /dev/loop0 will become the root device and the second  
-one /dev/loop1 will become the swap space.  
-  
-  
-  
-  
-  
-If you want to be able to write to the DOS partition as a non-root user when you  
-have finished then you should use mount -n -t msdos /dev/hda1 /mnt -o  
-uid=,gid=,umask=000,quiet instead. This will map all accesses to the DOS  
-partition to root and set the permissions appropriately.  
-  
-  
-  
-  
-  
-  
-  
-!!3.4 Creating The Root Device  
-  
-  
-  
-The root device that you will be using is the file linuxdsk.img. You  
-will need to create this in the same way that the initial ramdisk was created,  
-but bigger. You can install any Linux installation that you like onto this  
-disk.  
-  
-  
-  
-  
-  
-The easiest way might be to copy an existing Linux installation into it. An  
-alternative is to install a new Linux installation onto it.  
-  
-  
-  
-  
-  
-Assuming that you have done this, there are some minor changes that you must  
-make.  
-  
-  
-  
-  
-  
-The /etc/fstab file must reference the root partition and the  
-swap using the two loopback devices that are setup on the initial ramdisk.  
-  
-  
-  
-  
-  
-  
-  
-  
-/dev/loop0 / ext2 defaults 1 1  
-/dev/loop1 swap swap defaults 1 1  
-  
-  
-  
-  
-This will ensure that when the real root device is used the kernel will not be  
-confused about where the root device is. It will also allow the swap space to  
-be added in the same way a swap partition is normally used. You should remove  
-any other reference to a root disk device or swap partition.  
-  
-  
-  
-  
-  
-If you want to be able to read the DOS partition after Linux has started then  
-you will need to make a number of extra small changes.  
-  
-  
-  
-  
-  
-Create a directory called /initrd, this is where the initial ramdisk  
-will be mounted once the loopback root filesystem is mounted.  
-  
-  
-Create a symbolic link called /DOS that points to /initrd/mnt  
-where the real DOS parition will be mounted.  
-  
-  
-Add a line into the rc file that mounts the disks. This should run the command  
-mount -f -t msdos /dev/hda1 /initrd/mnt, this will create a 'fake'  
-mount of the DOS partition so that all programs (like df) will know that  
-the DOS partition is mounted and where to find it. If you used different  
-options in the /linuxrc file that obviously you should use them here  
-also.  
-  
-  
-  
-  
-  
-There is no need to have a Linux kernel on this root device since that is  
-already loaded earlier. If you are using modules however then you should  
-include them on this device as normal.  
-  
-  
-  
-  
-  
-  
-  
-!!3.5 Creating the Swap Device  
-  
-  
-  
-The root device that you will be using is the file linuxswap.img. The  
-swap device is very simple to create. Create an empty file as was done for the  
-initial ramdisk and then run mkswap linuxswap.img to intialise it.  
-  
-  
-  
-  
-  
-The size of the swap space will depend on what you plan to do with the installed  
-system, but I would recommend between 8MB and the amount of RAM that you have.  
-  
-  
-  
-  
-  
-  
-  
-!!3.6 Creating the MSDOS Directory  
-  
-  
-  
-The files that are going to be used need to be moved onto the DOS partition.  
-  
-  
-  
-  
-  
-The files that are required in the DOS directory called C:\LINUX are  
-the following:  
-  
-  
-  
-  
-  
-*LINUXDSK.IMG The disk image that will become the root device.  
-*  
-  
-*LINUXSWP.IMG The swap space.  
-*  
-  
-  
-  
-  
-  
-!!3.7 Creating the Boot Floppy  
-  
-  
-  
-The boot floppy that is used is just a normal DOS format bootable floppy.  
-  
-  
-This is created using format a: /s from DOS.  
-  
-  
-  
-  
-  
-Onto this disk you will need to create an AUTOEXEC.BAT file (as below)  
-and copy the kernel, compressed initial ramdisk and LOADLIN executable.  
-  
-  
-  
-  
-  
-*AUTOEXEC.BAT The DOS automatically executed batch file.  
-*  
-  
-*LOADLIN.EXE The LOADLIN program executable.  
-*  
-  
-*ZIMAGE The Linux kernel.  
-*  
-  
-*INITRDGZ.IMG The compressed initial ramdisk image.  
-*  
-  
-  
-  
-The AUTOEXEC.BAT file should contain just one line as below.  
-  
-  
-  
-  
-  
-\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro  
-  
-  
-  
-  
-This specifies the kernel image to use, the initial ramdisk image, the root  
-device after the initial ramdisk has finished and that the root partition is to  
-be mounted read-only.  
-  
-  
-  
-----  
-  
-!!4. Booting the System  
-  
-  
-To boot from this new root device all that is required is that the floppy disk  
-prepared as described above is inserted for the PC to boot from.  
-  
-  
-  
-  
-  
-You will see the following sequence of events.  
-  
-  
-#DOS boots  
-#  
-  
-#AUTOEXEC.BAT starts  
-#  
-  
-#LOADLIN is run  
-#  
-  
-#The Linux kernel is copied into memory  
-#  
-  
-#The initial ramdisk is copied into memory  
-#  
-  
-#The Linux kernel is started running  
-#  
-  
-#The /linuxrc file on the initial ramdisk is run  
-#  
-  
-#The DOS partition is mounted and the root and swap devices set up  
-#  
-  
-#The boot sequence continues from the loopback device  
-#  
-  
-  
-  
-When this is complete you can remove the boot floppy and use the Linux system.  
-  
-  
-  
-  
-!!4.1 Possible Problems With Solutions  
-  
-  
-  
-There are a number of stages where this process could fail, I will try to  
-explain what they are and what to check.  
-  
-  
-  
-  
-  
-DOS booting is easy to recognise by the message that it prints MS-DOS  
-Starting ... on the screen. If this is not seen then the floopy disk is  
-either not-bootable or the PC is not bootable from the floppy disk drive.  
-  
-  
-  
-  
-  
-When the AUTOEXEC.BAT file is run the commands in it should be echoed  
-to the screen by default. In this case there is just the single line in the  
-file that starts LOADLIN.  
-  
-  
-  
-  
-  
-When LOADLIN executes it will do two very visible things, firstly it  
-will load the kernel into memory, secondly it will copy the ramdisk into memory.  
-Both of these are indicated by a Loading... message.  
-  
-  
-  
-  
-  
-The kernel starts by uncompressing itself, this can give __crc__ errors if  
-the kernel image is corrupted. Then it will start running the initialisation  
-sequence which is very verbose with diagnostic messages. Loading of the initial  
-ramdisk device is also visible during this phase.  
-  
-  
-  
-  
-  
-When the /linuxrc file is run there is no diagnostic messages, but you  
-can add these yourself as an aid to debugging. If this stage fails to set up  
-the loopback device as the root device then you may see a message that there is  
-no root device and the kernel aborts.  
-  
-  
-  
-  
-  
-The normal boot sequence of the new root device will now continue and this is  
-quite verbose. There may be problems about the root device being mounted  
-read-write, but the LOADLIN command line option 'ro' should  
-stop that. Other problems that can occur are that the boot sequence is confused  
-about where the root device is, this is probably due to a problem with  
-/etc/fstab.  
-  
-  
-  
-  
-  
-When the boot sequence has completed, the remaining problem is that programs are  
-confused about whether the DOS partition is mounted or not. This is why it is a  
-good idea to use the fake mount command described earlier. This makes life a  
-lot easier if you want to access the files on the DOS device.  
-  
-  
-  
-  
-  
-  
-  
-!!4.2 Reference Documents  
-  
-  
-  
-The documents that I used to create my first loopback root filesystem were:  
-  
-  
-  
-  
-  
-  
-  
-  
-*The Linux kernel source, in particular init/main.c  
-*  
-  
-*The Linux kernel documentation, in particular  
-Documentation/initrd.txt and Documentation/ramdisk.txt.  
-*  
-  
-*The LILO documentation.  
-*  
-  
-*The LOADLIN documentation  
-*  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!5. Other Loopback Root Device Possibilities  
-  
-  
-Once the principle of booting a filesystem in a file on a DOS partition has been  
-established there are many other things that you can now do.  
-  
-  
-  
-  
-  
-  
-  
-!!5.1 DOS Hard-disk Only Installation  
-  
-  
-  
-If it is possible to boot Linux from a file on a DOS harddisk by using a boot  
-floppy then it is obviously also possible to do it using the harddisk itself.  
-  
-  
-A configuration boot menu can be used to give the option of running  
-LOADLIN from within the AUTOEXEC.BAT. This will give a much  
-faster boot sequence, but is otherwise identical.  
-  
-  
-  
-  
-  
-  
-  
-!!5.2 LILO Booted Installation  
-  
-  
-  
-Using LOADLIN is only one option for booting a Linux kernel. There is  
-also LILO that does much the same but without needing DOS.  
-  
-  
-In this case the DOS format floppy disk can be replaced by an ext2fs format one.  
-Otherwise the details are very similar, with the kernel and the initial ramdisk  
-being files on that disk.  
-  
-  
-The reason that I chose the LOADLIN method is that the arguments that  
-need to be given to LILO are slightly more complex. Also it is more  
-obvious to a casual observer what the floppy disk is since it can be read under  
-DOS.  
-  
-  
-  
-  
-  
-  
-  
-!!5.3 VFAT / NTFS Installation  
-  
-  
-  
-I have tried the NTFS method, and have had no problems with it. The NTFS  
-filesystem driver is not a standard kernel option in version 2..x, but is  
-available as a patch from  
-http://www.informatik.hu-berlin.de/~loewis/ntfs/. In version 2.2.x the  
-NTFS driver is included as standard in the kernel.  
-  
-  
-The only changes for the VFAT or NTFS options are in the initial ramdisk, the  
-file /linuxrc needs to mount a file system of type vfat or ntfs rather  
-that msdos.  
-  
-  
-I know of no reason why this should not also work on a VFAT partition.  
-  
-  
-  
-  
-  
-  
-  
-!!5.4 Installing Linux without Re-partitioning  
-  
-  
-  
-The process of installing Linux on a PC from a standard distribution requires  
-booting from a floppy disk and re-partitioning the disk. This stage could  
-instead be accomplished by a boot floppy that creates an empty loopback device  
-and swap file. This would allow the installation to proceed as normal, but it  
-would install into the loopback device rather than a partition.  
-  
-  
-This could be used as an alternative to a UMSDOS installation, it would  
-be more efficient in disk usage since the minimum allocation unit in the ext2  
-filesystem is 1kB instead of up to 32kB on a DOS partition. It can also be used  
-on VFAT and NTFS formatted disks which are otherwise a problem.  
-  
-  
-  
-  
-  
-  
-  
-!!5.5 Booting From a Non-bootable device  
-  
-  
-  
-This method can also be used to boot a Linux system from a device that is not  
-normally bootable.  
-  
-  
-  
-  
-  
-  
-  
-  
-*CD-Rom  
-*  
-  
-*Zip Disks  
-*  
-  
-*Parallel port disk drives  
-*  
-  
-  
-  
-Obviously there are many other devices that could be used, NFS root filesystems  
-are already included in the kernel as an option, but the method described here  
-might also be used instead .  
-  
-  
-  
-----  
+Describe [HowToLoopbackRootFS ] here.