
                      The Loopback Root Filesystem HOWTO
                                       
: Andrew M. Bishop, [1]amb@gedanken.demon.co.uk
: Jing-Jong SHYUE, [2]shyue@sonoma.com.tw

   v1.1, 24 September 1999
     _________________________________________________________________
   
   ļʹ Linux ƻ豸 Linux ԭϵͳ, ʹ
   Linux ԰װ DOS ָ, ʹ Linux ԭϵͳ. ͬʱҲ۴
   ּɵ;.
     _________________________________________________________________
   
1. 

     * 1.1 Ȩ(˶β)
     * 1.2 汾ݱ(˶β)
       
2. ƻ豸ŵԭ

     * 2.1 ƻ豸
     * 2.2 ŵ豸
     * 2.3 ʼŵ
     * 2.4 Ŀ¼ϵͳ
     * 2.5 Linux 
       
3. νƻظĿ¼豸

     * 3.1 
     * 3.2  Linux 
     * 3.3 ʼŵװ
     * 3.4 Ŀ¼װ
     * 3.5 ûװ
     * 3.6  MSDOS Ŀ¼
     * 3.7 
       
4. ϵͳ

     * 4.1 ܷʽ
     * 4.2 οļ
       
5. ƻظĿ¼װõĿ;

     * 5.1  Linux װڽ DOS ָӲ
     * 5.2  LILO 
     * 5.3  Linux װ VFAT / NTFS ϵͳ
     * 5.4 װ Linux ¸ʽ
     * 5.5 Ӳɿ豸 Linux
     _________________________________________________________________
   
1. 

1.1 Ȩ(˶β)

   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
   [3]http://www.fsf.org/ or, write to the Free Software Foundation,
   Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
   
1.2 汾ݱ(˶β)

   Version 1.0.0
          Initial Version (June 1998)
          
   Version 1.0.1-1.0.3
          Slight Modifications, kernel version changes, typos etc. (1998
          - July 1999)
          
   Version 1.1
          Added Copyright Information and Re-Submitted (September 1999)
          
2. ƻ豸ŵԭ

   ҽڽƻصϵͳɸĿ¼ϵͳҪĻ֪ʶ.
   
2.1 ƻ豸

   ƻ豸  Linux еһ豸, ÷ý豸.
   
    /dev/hda1, /dev/hda2, /dev/sda1 ŵ,  /dev/fd0 
   , 춴豸. Щ豸浵Ŀ¼ṹ. Ҳ
   ʹʽɸֲͬĵϵͳ( ext2fs, msdos, ntfs ),
   ұĿ¼.
   
   ƻصϵͳһڱĵϵͳеĵ, һ
   ܱ豸. 豸ͬǰеʵ豸һ, Աʽ
   Ŀ¼. ƻصϵͳ豸ͨ /dev/loop0 
   /dev/loop1 ȵ, Щ豸ٱָĵ, ܱΪ
   豸.
   
2.2 ŵ豸

    Linux лһֿԱɵϵͳ豸, ҲǼŵ
   .
   
   ״, 豸ָ򲿷ֵʵ, οӲ豸. 
   ЩᱻûӲ, 춴ŵȡ.
   
   ŵʱ侭дŵ豸 /dev/ram0 
   /dev/ram1 ȵ, . ŵͬԱʽĿ¼,
   ƻ豸һ.
   
   ŵͨϵͳʱ,  Linux İװŵǾԮ
   ŵ. Ҫĳʽͨһŵӳ, ӳͨѹ
   . ϵͳĽ֪, ڿб⿪
   춼ŵ, ٱسɿĵϵͳ.
   
2.3 ʼŵ

   ܽƻ豸ɸĿ¼ϵͳ֮ǰ, ʼŵһǳҪĻ
   .
   
   ΪŵҪһϵͳӳ񵵵, ӳ񵵱
   ǿԱȡ. ŵĹҪʽʵĸĿ¼ϵͳ֮
   ǰ, ŵе /linuxrc ᱻִ.  /dev/initrd ҿ
   õĻ, ŵᱻ /initrd֮.
   
   һĿ, һ൱, Ϊʼŵ
   Լִ. Ҫʼ֮ǰ, ԾʼŵĲ
   Ŀ¼ŵ.
   
2.4 Ŀ¼ϵͳ

   Ŀ¼ŵǵһصװ, ڿΪĿ¼ "/".
   
   춸Ŀ¼еĵ, ԻһЩ. ڿ rc 
   ִ, Щ /etc/rc.d  /etc/rc?.d,  /etc/init 
   .
   
   ϵͳ, Ŀ¼ϵͳǲܱжص, Ϊеĳʽʹ
   ͬѶ. ҲΪʲʼŵ˵Ҫ, ΪֻʱĸĿ
   ¼ϵͳǲͬ.
   
2.5 Linux 

   Ϊ˽ڿʼŵĶ, ǿĹ.
   
    1. ı, ͨ LILO  LOADLIN ɵ. Կ
       Loading... ѶϢ, ʾ.
    2. ʼŵ, ͨҲ LILO  LOADLIN ɵ. ٴε
        Loading... ѶϢ, ʾʼŵ.
    3. ıʼ, иĵĲᱻ趨; ͬʱʼŵ
       ΪĿ¼.
    4. ִڳʼŵϵ /linuxrc ʽ.
    5. ĲָĵϵͳΪĿ¼.
    6. ִ /etc/init ʹ趨Ŀ.
       
   ֻһ򻯵˵, 㹻ͺĵʼŵ;.
   
3. νƻظĿ¼豸

   潫νƻ豸
   
3.1 

   ҪһƻظĿ¼豸Ҫ.
   
     * һ Linux ϵͳ
     * ܹһ󵵰 DOS ָ
       
   ҪǱܴȡһװÿ Linux ϵͳ. Ϊƻ豸ֻ
    Linux ½. Ҳ˵㲻ܴ. Ҫϵͳ
   .
   
   ƻ豸֮, ⽫һܴĵ. ʹһ 80 MB ĵ, 
   Ҳܽһ X ն˻; ϣ, Ҳ. 
   뱻Ƶ DOS ָ, ·һǱ.
   
   Ҫ:
   
     * LOADLIN 1.6
     * κһ֧Ԯƻ豸 mount ʽ
     * ֧Ԯѡĺ
       
   ڵ Linux , Ӧöܷ.
   
3.2  Linux 

    2.0.31 ĺʹƻװ, 汾ĺӦҲ. 
   ٱҪµĹ.
   
   뽫ĵй
     * ŵ֧Ԯ (CONFIG_BLK_DEV_RAM).
     * ʼ (initrd) ֧Ԯ (CONFIG_BLK_DEV_INITRD).
     * ƻװ֧Ԯ (CONFIG_BLK_DEV_LOOP).
     * fat ϵͳ֧Ԯ (CONFIG_FAT_FS).
     * msdos ϵͳ֧Ԯ (CONFIG_MSDOS_FS).
       
   ǰʹüŵװʼŵװ. ƻص
   ϵͳ֧Ԯ,  DOS ָ֧Ԯ.
   
   Ҳʹģ֧Ԯ򵥵ѡ. ϣʹģ黯֧ԮӦ
   Ҳǿ, ȻûԹ. ʹģ黯֧Ԯ, ȷеѡ
   ֱӱںڶǱģ.
   
   ݺİ汾Ĳͬ, ҪʹһЩ޲. һЩ򵥵޲
   ĿԽƻװΪĿ¼ϵͳʹ.
     * 2.0.0 ֮ǰĺ: ûѶ.
     * 2.0.0  2.0.34 ֮ĺİ汾: ʹи 2.0.x ĺ
       .
     * 2.0.35  2.0.x ֮ĺĲҪ޲.
     * 2.1.x ĺıȷʵ汾ʹи 2.0.x  2.2.x 
       ޲.
     * 2.2.0  2.2.10 ֮ĺİ汾: ʹи 2.2.x ĺ
       .
     * 2.3.x ĺ: ʹи 2.2.x ĺ޲.
       
    2.0.x ĺ, 뽫 "loop", 0x0700 һмӵ /init/main.c ԭ
   ʼжΪ.
   
static void parse_root_dev(char * line)
{
        int base = 0;
        static struct dev_name_struct {
                const char *name;
                const int num;
        } devices[] = {
                { "nfs",     0x00ff },
                { "loop",    0x0700 },
                { "hda",     0x0300 },

...

                { "sonycd",  0x1800 },
                { NULL, 0 }
        };

...

}

    2.2.x ĺ, 뽫 "loop", 0x0700 ǰһ()ӵ
   /init/main.c ԭʼжΪ
   
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 }
};

   ̬, 뱻 zImage  (make zImage). õĵ
   ᱻ arch/i386/boot/zImage.
   
3.3 ʼŵװ

   ʼŵ򵥵ķʽǽƻװù. ʹ
   root Ȩ. ʾ, Щָ root ļĿ¼
   (/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
[ĵ]
cd ..
umount /root/initrd
gzip -c -9 initrd.img > initrdgz.img

   Щָ.
    1. һʼʹõĹص (һĿ¼).
    2. һָСĿյ, ˴ҽһ 1024kB ĵ, 
       ҪõĴС. (Сһ)
    3. ʽ ext2 ϵͳ.
    4. ƻصķʽصص.
    5. лĿ¼ƻ豸Ĺص.
    6. ĵ (ϸڽ).
    7. 뿪ƻصصĿ¼.
    8. ƻ豸ж.
    9. һѹİ汾Թʹ.
       
   ʼŵ
   
   еĵ춳ʼŵ, 򽫲ʹκָ
   .
   
     * /linuxrc  DOS ϵͳָ. (ʾ)
     * /lib/* ʽҪĶ̬뺯ʽ.
     * /etc/* ̬Ŀȡ, Ȼ̬ʽҪ, Ա⾯Ѷ
       Ϣ.
     * /bin/* ʹ (˴ʹ ash, Ϊ bash С). 
       mount  losetup ʽ춹 DOS ŵ趨ƻװ.
     * /dev/* װÿƵ, Ҫ /dev/zero Թ ld-linux.so ʹ
       , /dev/hda* Թ DOS ŵ, Լ /dev/loop* Թƻװ.
     * /mnt һյĹص, Թ DOS ŵ.
       
   õʼŵ֮, ռԼ 800 kB.
   
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 0
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-linu
x.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 0

./mnt:
total 0

   ȽϸӵĲǽ dev Ŀ¼װÿƵ.  /dev е
   װÿƵΪ,  mknod ʽ.
   
   /linuxrc ָ
   
   ʼŵе /linuxrc ָɹƻװǰ׼
   .
   
   ġ /dev/hda1 Ϊ DOS ָ, ڳɹ DOS ָ,
   /linux/linuxdsk.img 趨Ϊ /dev/loop0 ; /linux/linuxswp.img 趨
   Ϊ /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 0

else

   echo INITRD: Mount failed
   exit 1

fi

   ǰ /dev/loop0 װýΪĿ¼,  /dev/loop1 򽫱Ϊ
   ûʹ.
   
   ϣ root ʹҲд DOS ֿ, ĳʹ mount
   -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000,quiet. Ὣж
   DOS ָĴȡӦ root, ʵ趨Ȩ.
   
3.4 Ŀ¼װ

   ʹõĸĿ¼װý linuxdsk.img . 뽨ʼ
   ŵͬķ, ͬ춱ϴ, Ҫװ
   ĳʽ.
   
   򵥵İ취ǽе Linux ϵͳƵϵͳ. ȻҲ
   װһµ Linux ϵͳ.
   
   ѾЩ, ֻҪһЩСı.
   
   /etc/fstab 뽫Ŀ¼ŵûӦʾŵеƻ
   豸.
   
/dev/loop0     /      ext2   defaults 1 1
/dev/loop1     swap   swap   defaults 1 1

   ⽫ȷĻʹȷĸĿ¼װ. Ҳͬķûŵ. 
   ҲƳĿ¼ŵûĶӦ.
   
   ϣ Linux ܹȡ DOS ָ, ЩС
   ޸.
   
    /initrd Ŀ¼, ƻظĿ¼ϵͳ, ʼŵ
   ĵط.
   
   һ /DOS ָ /initrd/mnt, Ҳ DOS ָصĵط.
   
    rc м mount -f -t msdos /dev/hda1 /initrd/mnt ָ, Խ
   һ "ٵ" ,  df ȳʽŻ֪. 
   /linuxrc òͬ趨, Է趨.
   
   춺֮ǰᱻ, 㲻ҪڸĿ¼װзϵͳ. 
   ʹ˺ĵģ, Ȼ뽫ЩģڸĿ¼װ.
   
3.5 ûװ

   ʹõûװý linuxswap.img. ûװ൱׽. 
   ֮ͬǰһյ, Ȼִ mkswap linuxswap.img ʽ
   û.
   
   ûռĴСݸ˵ʹöͬ, ҽ齫Ϊ 8MB, Сʵ
   .
   
3.6  MSDOS Ŀ¼

   Ҫʹõĵ뱻Ƶ DOS ָ.
   
   뱻 C:\LINUX Ŀ¼µĵ
   
     * LINUXDSK.IMG ΪĿ¼װõӰ.
     * LINUXSWP.IMG ûװ.
       
3.7 

   ׼ DOS ͬ.
   
    DOS ʹ format a: /s Խ.
   
   , 뽨һ AUTOEXEC.BAT , ʾ. Ҹ Linux
   ϵͳѹʼŵ, Լ LOADLIN ִе.
   
     * AUTOEXEC.BAT - DOS µĿԶִε.
     * LOADLIN.EXE - LOADLIN ִе.
     * ZIMAGE - Linux ϵͳ.
     * INITRDGZ.IMG - ѹʼŵ.
       
   AUTOEXEC.BAT Ҫ.
   
\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro

   ָҪõϵͳʼŵԼĿ¼ŵλ, 
   Ŀ¼Ψķʽ.
   
4. ϵͳ

   ҪĿ¼װ뽫ǰĿ PC , 
   .
   
   㽫ῴеĳ
    1. DOS 
    2. AUTOEXEC.BAT ִ
    3. LOADLIN ִ
    4. Linux ıƵ
    5. ʼŵƵ
    6. Linux Ŀʼִ
    7. ʼŵе /linuxrc 屻ִ
    8. DOS ָ, ҸĿ¼װûװñ趨
    9. ƻװɿ
       
   , ȡʹ Linux ϵͳ.
   
4.1 ܷʽ

   ؿʧ, ҽμ.
   
   DOS ױ, Ӧûʾ MS-DOS Starting .... ûʾ,
   ǲɿ, Բ̨.
   
    AUTOEXEC.BAT ִеʱ, бִеָԤʾөĻ. ڴ
   Ӧֻһ,  LOADLIN ͷ.
   
    LOADLIN ִʱ, Ӧж׿ĵ鷢. Ὣ
   . Ὣʼŵ.  Loading...
   ѶϢȷ.
   
   ĽԼѹ, ҵĵʱ, ʾ crc . Ŀʼִ
   ʱ, ʾһѳʼѶϢ. ʼŵҲڴ˽׶
   ʾ.
   
    /linuxrc ʼִʱ, пɹϵѶϢ, Լ븨
   ѶϢ. , ڽƻװõɸĿ¼װʱʧܵĻ, 
   õ "ûиĿ¼װ" ѶϢ, ҺĻִ.
   
   ڸĿ¼װеᱻ. пܵõĿ¼
   سɿɶдľ,  LOADLIN ָе 'ro' Խ. 
   ŪĸǸĿ¼װʱ, һЩ, 
   /etc/fstab еĴ.
   
   , ʣµǳʽ㲻 DOS ָںδ. Ҳ
   ΪҪִһ""Ĺָ, ⽫ʹ״ȡ DOS ָ.
   
4.2 οļ

   ҽһظĿ¼ϵͳʱ, Ҳοļ:
   
     * Linux ԭʼ, ر init/main.c
     * Linux ˵ļ, ر Documentation/initrd.txt Լ
       Documentation/ramdisk.txt.
     * LILO ˵ļ.
     * LOADLIN ˵ļ.
       
5. ƻظĿ¼װõĿ;

    DOS ָ Linux ķȷ֮, ǽ;.
   
5.1  Linux װڽ DOS ָӲ

   Ȼ DOS ŵеһ Linux ϵͳ, Ҳ
   ȫʹ DOS ŵϵͳ.
   
   һ趨õĿѡ AUTOEXEC.BAT  LOADLIN, ʹ
   ٶȽϿ, ȴ.
   
5.2  LILO 

   ʹ LOADLIN ֻһ Linux ĵķʽ. ʹ LILO 
   ҲҪʹ DOS.
   
   ״ DOS ʽ ext2fs ʽ. ϸڶǳ
   , 뽫ϵͳʼŵ춸.
   
   ѡʹ LOADLIN ԭ LILO Ҫϸӵָ. ҿ DOS 
   ʹõҲ״.
   
5.3  Linux װ VFAT / NTFS ϵͳ

   Թ Linux װ NTFS ֮, ûҲκ. ڱ׼
   2.0.x , NTFS ֧Ԯ, 
   [4]http://www.informatik.hu-berlin.de/~loewis/ntfs/ ҵ޲. 
   2.2.x ĺ, NTFS ѱ֧Ԯ.
   
   ʹ VFAT  NTFS ʱ뱾ġ֮ͬʼŵʱ, 
   д /linuxrc ָԹصϵͳʱ,  vfat  ntfs Ϊ
   msdos.
   
   ֪ûɲ VFAT ָ.
   (ע:  VFAT ,  100 MB ZIP  Linux)
   
5.4 װ Linux ¸ʽ

   װ Linux ׼ʱ, ¸ʽӲ. ñĵķ
   ҲԽƻص, İװ, ϵͳװƻװö
   һָ.
   
   Ϊװ UMSDOS һѡ, ⽫Чʵʹôŵռ,
   Ϊ ext2fs Сõλ 1kB,  DOS  32kB. ͬʱҲ
    VFAT  NTFS ϶.
   
5.5 Ӳɿ豸 Linux

   Ҳ豸 Linux ϵͳ.
   
     * Ƭ
     * Zip ŵƬ
     * ƽвŵװ
       
   װÿʹ, NFS Ŀ¼ϵͳѾ֧Ԯ, Աĵ
   ӦҲ.

References

   1. mailto:amb@gedanken.demon.co.uk
   2. mailto:shyue@sonoma.com.tw
   3. http://www.fsf.org/
   4. http://www.informatik.hu-berlin.de/~loewis/ntfs/
