
                      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
     _________________________________________________________________
   
   opϥ Linux ¶^]ƨӫإ Linux ɮרt, ϱo
   Linux iHw˦b DOS ΰϤ, èϥ Linux ɮרt. Pɤ]Qצ
   اޥLγ~.
     _________________________________________________________________
   
1. ²

     * 1.1 vn(qĶ)
     * 1.2 t(qĶ)
       
2. ¶^]ƻPOϺЪz

     * 2.1 ¶^]
     * 2.2 OϺг]
     * 2.3 _lOϺ
     * 2.4 ڥؿɮרt
     * 2.5 Linux }{
       
3. pإ¶^ڥؿ]

     * 3.1 ݨD
     * 3.2 إ Linux ֤
     * 3.3 إߪlưOϺи˸m
     * 3.4 إ߮ڥؿ˸m
     * 3.5 إ߸m˸m
     * 3.6 إ MSDOS ؿ
     * 3.7 إ߶}n
       
4. Ұʨt

     * 4.1 ioͪDPѨM覡
     * 4.2 ѦҤ
       
5. L¶^ڥؿ˸miγ~

     * 5.1 N Linux w˦bȦ DOS ΰϪwФW
     * 5.2 Q LILO Ұ
     * 5.3 N Linux w˦b VFAT / NTFS ɮרtΤW
     * 5.4 w Linux Ӥݭs榡
     * 5.5 qi}]ƤWҰ Linux
     _________________________________________________________________
   
1. ²

1.1 vn(qĶ)

   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 t(qĶ)

   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. ¶^]ƻPOϺЪz

   ڱNХΦbN¶^ɮרtγ]ڥؿtΩһݭn򥻪.
   
2.1 ¶^]

   ¶^] O Linux @ص], ΪkLxsC].
   
   Ҧp /dev/hda1, /dev/hda2, /dev/sda1 ΨLϺ, Ҧpnо /dev/fd0 
   , ݩxs]. oǳ]ƳiHΨxsɮשάOؿc. ]iH
   ڨϥλݨDӳQ榡ƦUؤPɮרt(Ҧp ext2fs, msdos, ntfs ),
   åBQؿ.
   
   ¶^ɮרtΨ̦s@xsbOɮרtΤɮ, ñNoɮ׷@O@
   өP]ƨӾާ@. oӵ]ƦpPeҦCu]Ƥ@, iHQ榡
   Ʃαؿ. ¶^ɮרtΪ]ɳq`O /dev/loop0 άO
   /dev/loop1 , oǳ]ƦAQVҨ̦sɮ, poɮ׫KQ
   ]ƦӳQ.
   
2.2 OϺг]

   b Linux ٦@إiHQɮרtξާ@], ]NOOϺг]
   .
   
   boӪp, oӳ]ƶȫVO, äѦҨLw]. o
   ǰO鵴|QmwФ, |dsϺЧ֨.
   
   OϺХiHbNɶgѼgJOϺг] /dev/ram0 
   /dev/ram1 , ӳQ. OϺЦP˥iHQ榡Ʃαؿ,
   N¶^]Ƥ@.
   
   OϺгq`QΩѳnбҰʨtΪɾ, Ҧp Linux w˺ϺЩάOϴ
   Ϻ. }һݭn{q`Qsb@ӺϺЬMɤ, ӳoӬMɳq`Q
   YsbnФ. tή֤߱NiH{oɮ, åBb}{ǤQѶ}
   mOϺФ, AQ}һݪɮרt.
   
2.3 _lOϺ

   bڭ̯N¶^]ƷڥؿtΤe, _lOϺЬO@ӫD`n
   .
   
   ]OϺлݭnƻs@ɮרtΪMɨO餤, ҥHoӬMɥ
   OiHQs. OϺЪu@nNuꪺڥؿtα
   e, boӰOϺФ /linuxrc |Q. ӦpG /dev/initrd sbBi
   Ϊ, OϺЫh|Qb /initrdU.
   
   @ӥ`}{ǦӨ, oO@Ӭ۷SS, ]_lOϺ
   ~. ӥBbDn}{Ƕ}le, iHgѰ_lOϺЪѼƨ
   ܧڥؿϺ.
   
2.4 ڥؿɮרt

   ڥؿϺЬOĤ@ӳQ˸m, ҥHb}|ڥؿ "/".
   
   ѩڥؿ]tFҦɮ, ҥH|@ǽ. b}L{ rc ROZ|
   Q, oǩROZiO /etc/rc.d  /etc/rc?.d, ݵ /etc/init {Ǫ
   ]p.
   
   btαҰʫ, ڥؿɮרtάOiQ, ]Ҧ{ϥά
   PT. o]NO_lOϺЬOpn, ]uoɪڥ
   tάOP.
   
2.5 Linux }{

   FFѦb}L{_lOϺЪʧ@, UCO}L{.
   
    1. ֤߳QJO, q`O LILO  LOADLIN . AiHݨ
       Loading... T, ܥbJ֤.
    2. _lOϺгQJ, q`]O LILO  LOADLIN . A|A
       ݨ Loading... T, ܥbJlOϺ.
    3. ֤߳Ql, Ҧ֤ߪѼƳ|Q]w; PɪlOϺгQ
       ڥؿ.
    4. blOϺФW /linuxrc {.
    5. ֤߰ѼƩҫwɮרtγQڥؿ.
    6.  /etc/init HϥΪ̩ҳ]w}{.
       
   ouO@²ƪ, ֤ߪҰʻPlOϺЪγ~.
   
3. pإ¶^ڥؿ]

   UNЦpإ¶^]
   
3.1 ݨD

   nإߤ@¶^ڥؿ]ƥnUCƶ.
   
     * @ӥiHB@ Linux t
     * ƻs@Ӥjɮר DOS ΰϤ
       
   ̭nOs@Ӧw˦niB@ Linux t. oO]¶^]ƥu
   b Linux Uإ. ]NOAiqLͦ. ӥBAnboӨtΤW
   sĶ֤.
   
   ¶^]ƫإߤ, oNO@ӫܤjɮ. ڨϥΤF@ 80 MB ɮ, p
   ڤ~إߤ@ X ׺ݾ; pGAƱవh, oi]. o
   ץQƻs DOS ΰϤ, ҥHάO@nЬO.
   
   Aһݭnn]A:
   
     * LOADLIN 1.6HW
     * @Ӥ䴩¶^]ƪ mount {
     * 䴩һݿﶵ֤
       
   {b Linux Ө, ӳŦXHWݨD.
   
3.2 إ Linux ֤

   ڬO 2.0.31 ֤ߨӨϥ¶^˸m, L֤Ӥ]iH. L
   ̦ܤ֥nHU\.
   
   AN֤ߪC\Ұ
     * OϺФ䴩 (CONFIG_BLK_DEV_RAM).
     * lưO (initrd) 䴩 (CONFIG_BLK_DEV_INITRD).
     * ¶^˸m䴩 (CONFIG_BLK_DEV_LOOP).
     * fat ɮרtΤ䴩 (CONFIG_FAT_FS).
     * msdos ɮרtΤ䴩 (CONFIG_MSDOS_FS).
       
   eGӬOΨӨϥΰOϺи˸mPlưOϺи˸m. ĤTӬO¶^
   רtΪ䴩, ̫GӫhOΨӱ DOS ΰϩҥ䴩.
   
   sĶ֤ߥBϥμҲդ䴩O²檺. pGAƱϥμҲդƤ䴩
   ]OiH, MڨSչL. pGAϥμҲդƤ䴩, ATwWCﶵO
   sĶb֤ߤӤOsĶҲ.
   
   ̾ڮ֤ߪP, AiݭnϥΤ@ǭ׸. UO@²檺׸ɥΨ
   ֤ߥiHN¶^˸m@ڥؿɮרtΨϥ.
     * 2.0.0 e֤: ڨST.
     * 2.0.0  2.0.34 ֤ߪ: AϥΤUC 2.0.x ֤߭
       .
     * 2.0.35  2.0.x ֤ߤݭn׸.
     * 2.1.x ֤ߥ̾ڱzTꪩӨϥΤUC 2.0.x  2.2.x 
       ֤߭׸.
     * 2.2.0  2.2.10 ֤ߪ: AϥΤUC 2.2.x ֤߭
       .
     * 2.3.x ֤: AϥΤUC 2.2.x ֤߭׸.
       
    2.0.x ֤, N "loop", 0x0700 o@[ /init/main.c 
   lXӦUˤl.
   
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 ֤, N "loop", 0x0700 PeU@(@T)[
   /init/main.c lXӦUˤl
   
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 }
};

   ֤߲պA]n, LQsĶ zImage  (make zImage). sĶnɮ
   |Qb arch/i386/boot/zImage.
   
3.3 إߪlưOϺи˸m

   إߪlưOϺг²檺覡ON¶^˸m. Aϥ
   root vӰo. إߵ{ǦpUҥ, oǫOOb root aؿ
   (/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

   oǫO@ΦpUҭz.
    1. إߤ@ӵlưOϥΪI (@Ӫťؿ).
    2. إߤ@ӫwjpɮ, Bګإߤ@ 1024kB ɮ, A̾
       AҭnmɮתqӨMwoɮתjp. (ɮפjpO̫@ӰѼ)
    3. Noɮ׮榡Ʀ ext2 ɮרt.
    4. NoɮץH¶^覡˱IW.
    5. ؿ¶^]ƪI.
    6. إߥɮ (Ӹ`Nb᭱Q).
    7. }¶^ɮשұؿ.
    8. N¶^]ƨ.
    9. إߤ@YHѫϥ.
       
   lưOϺЪe
   
   Aܤ֦UCɮשmlưOϺФ, _hNϥΥ
   O.
   
     * /linuxrc  DOS ɮרtΪOZ. (pUҥ)
     * /lib/* {һݭnʺAsP禡w.
     * /etc/* ʺAsһݪ֨, MRAs{ݭn, iHקKĵiT
       .
     * /bin/* ϥΪ̩ROĶ (Bڨϥ ash, ] bash p). 
       mount P losetup {OΩ󱾸 DOS ϺлP]w¶^˸m.
     * /dev/* ˸m, Aܤֻݭn /dev/zero H ld-linux.so 
       , /dev/hda* H DOS Ϻ, H /dev/loop* H¶^˸m.
     * /mnt @ӪŪI, H DOS Ϻб.
       
   UOکҥΪ_lưOϺФe, һݪŶ 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

   BJOإ dev ؿU˸m. AiH /dev U{
   ˸mɬd, åH mknod {ӫإߥL.
   
   /linuxrc O
   
   _lưOкϺФ /linuxrc OZOΨӧ¶^˸mһݪem
   .
   
   UdҬOH /dev/hda1  DOS ΰ, æb\ DOS ΰϫ,
   N/linux/linuxdsk.img ]w /dev/loop0 ;ñN /linux/linuxswp.img ]w
    /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

   e /dev/loop0 ˸mNQڥؿ, ᭱ /dev/loop1 hNQ@O
   mϨϥ.
   
   pGAƱ root H~ϥΪ̤]gJ DOS , A令ϥ mount
   -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000,quiet. o|NҦ
   DOS ΰϪs root, åBA]wv.
   
3.4 إ߮ڥؿ˸m

   AҨϥΪڥؿ˸mNO linuxdsk.img oɮ. AiHλPإ߰_lO
   ϺЬۦPkإ߳oɮ, ҤPBȦb󥲶j, HeǧAnw
   {.
   
   ²檺kON{ Linux tνƻsoɮרtΤ. MA]iHs
   wˤ@Ms Linux t.
   
   ]AwgLoǨ, Aun@@Ǥp.
   
   /etc/fstab ɮץNڥؿϺлPmϹAbҥܰOϺФ¶^
   ].
   
/dev/loop0     /      ext2   defaults 1 1
/dev/loop1     swap   swap   defaults 1 1

   oNTO֤߷|ϥΥTڥؿ˸m. ]iHάۦPk[JmϺ. A
   ]LڥؿϺлPmϪ.
   
   pGAƱb Linux ҰʫŪ DOS ΰ, A@UoB~p
   ק.
   
   إߥs /initrd ؿ, oOA¶^ڥؿtα, lOϺб
   a.
   
   إߤ@ӲŸs /DOS V /initrd/mnt, ]NO DOS ΰϳQa.
   
   b rc ɤ[J mount -f -t msdos /dev/hda1 /initrd/mnt O, H
   ߤ@ "" , pҦp df {~|Doӱ. pGAb
   /linuxrc ΤP]w, ЦۦץHŦX]w.
   
   ѩ֤ߦbeK|QJ, ҥHAݭnbڥؿ˸mmtή֤. p
   GAϥΤF֤ߪҲ, AMNoǼҲթbڥؿ˸m.
   
3.5 إ߸m˸m

   AҨϥΪm˸mNO linuxswap.img. oӸm˸m۷eإ. p
   Pekإߤ@Ӫɮ, M mkswap linuxswap.img Ӯ榡Ƴo
   m.
   
   mŶjp̾ڭӤHϥΦӤP, ګĳN]j 8MB, p
   Oq.
   
3.6 إ MSDOS ؿ

   AҭnϥΪɮץQh DOS ΰϤ.
   
   Qb C:\LINUX ؿUɮץ]A
   
     * LINUXDSK.IMG @ڥؿ˸mv.
     * LINUXSWP.IMG m˸m.
       
3.7 إ߶}n

   }nЪs@Pз DOS }nЬۦP.
   
   b DOS Uϥ format a: /s Hإ߶}n.
   
   boinФW, Aإߤ@ AUTOEXEC.BAT , pUҥ. åBƻs Linux
   tή֤߻PYL_lOϺɮ, H LOADLIN .
   
     * AUTOEXEC.BAT - DOS U}۰ʰ妸.
     * LOADLIN.EXE - LOADLIN .
     * ZIMAGE - Linux tή֤.
     * INITRDGZ.IMG - YL_lOϺ.
       
   AUTOEXEC.BAT ȻݭnUo.
   
\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro

   o|wnΪtή֤߻P_lưOϺɥHήڥؿϺЪm, ñN
   ؿHŪ覡.
   
4. Ұʨt

   nγoӮڥؿ˸mҰʥNeҰ}nЩ PC , åѳoӳn
   }.
   
   AN|ݨUC{
    1. DOS Ұ
    2. AUTOEXEC.BAT 
    3. LOADLIN 
    4. Linux ֤߳QƻsO餤
    5. _lOϺгQƻsO餤
    6. Linux ֤߶}l
    7. b_lOϺФ /linuxrc ROZQ
    8. DOS ΰϳQ, Bڥؿ˸mPm˸mQ]w
    9. ¶^˸m}{
       
   }, AiHX}nШèϥγo Linux t.
   
4.1 ioͪDPѨM覡

   }{ǥib\hdW, ڱNյ۸L̻PӦpˬd.
   
   DOS ҰʫܮeO, Lӷ| MS-DOS Starting .... pGS,
   hoӳnХiOi}, ιqOѳoxnо}.
   
    AUTOEXEC.BAT Q檺ɭ, ҦQ檺Ow]|ܦbùW. b
   Bӥu@, åH LOADLIN }Y.
   
    LOADLIN , ӦG˫ܮeݪƱo. OL|N֤߸J
   O餤. ۷|N_lOϺиJO. oGӳiH Loading...
   TT{.
   
   ֤߱NۤvY, ӥB֤ɮ׷la, N crc ~. ֤߶}l
   , |ܤ@lƵ{ǻPˬdT. lOϺЪJ]|bq
   .
   
    /linuxrc }l, |iѶE_T, AiHۤv[JU
   Tˬd. boӵ{Ǥ, pGbN¶^˸mڥؿ˸mɥѪ, A
   N|o "Sڥؿ˸m" T, B֤߷|.
   
   Uөwqbڥؿ˸m`}{Ƿ|QҰ. AioڥؿQ
   iŪgĵi, b LOADLIN O 'ro' iHѨMoӰD. }{
   ǧˤMӬOڥؿ˸m, |ͤ@ǰD, oӰDhbӦ
   /etc/fstab ~.
   
   }{ǧ, ѤUDO{dM DOS ΰϳQbB. o]
   On@""O, oNϧAes DOS ΰ.
   
4.2 ѦҤ

   bګإ߲Ĥ@ӤJ^ڥؿɮרtή, ڰѦҤFUC:
   
     * Linux ֤߭lX, SOO init/main.c
     * Linux ֤߻, SOO Documentation/initrd.txt H
       Documentation/ramdisk.txt.
     * LILO .
     * LOADLIN .
       
5. L¶^ڥؿ˸miγ~

    DOS ΰϱҰ Linux kTߤ, ڭ̱NiHΦbUγ~W.
   
5.1 N Linux w˦bȦ DOS ΰϪwФW

   JMiHQγnлPsb DOS ϺФ@ɮרӱҰ Linux t, ]iH
   ϥ DOS ϺШӱҰʨt.
   
   @ӳ]wn}iHΨӱq AUTOEXEC.BAT Ұ LOADLIN, o϶}
   t׸, o|PL.
   
5.2 Q LILO Ұ

   ϥ LOADLIN uO䤤@رҰ Linux ֤ߪ. t~iHϥ LILO ӱ
   ʥBݭnϥ DOS.
   
   boӪpU DOS 榡nгQ ext2fs 榡n. LӸ`D`
   , Ntή֤߻PlOϺЩӳnФW.
   
   ڿܨϥ LOADLIN ]b LILO ݭnO. ӥBiHb DOS U
   ϥΪnФ]eBz.
   
5.3 N Linux w˦b VFAT / NTFS ɮרtΤW

   ڴgչLN Linux w˦b NTFS W, ӥBS]D. bзǪ
   2.0.x ֤ߤ, NTFS äQ䴩, AiHb
   [4]http://www.informatik.hu-berlin.de/~loewis/ntfs/ ׸. b
   2.2.x ֤ߤ, NTFS wQ䴩.
   
   ϥΦb VFAT  NTFS ɻPdҤPBȦbs@_lOϺЮ, s
   g /linuxrc OdHɮרtή, H vfat  ntfs ѼƦӫD
   msdos.
   
   ڧکҪSzѤΦb VFAT ΰϤW.
   (Ķ: ̬OΦb VFAT W, åH 100 MB ZIP Ұ Linux)
   
5.4 w Linux Ӥݭs榡

   `w Linux Mɳѳnо}, ís榡Ƶw. QΥ媺
   k]iHإ¶^ɮ, ~򥿱`w˵{, ñNtΦw˩¶^˸mӤ
   O@ӤΰϤ.
   
   oiH@w˦b UMSDOS ~t@ؿ, oN|󦳮ĲvϥκϺЪŶ,
   ]b ext2fs ̤ptmO 1kB, Ӧb DOS hO 32kB. Pɤ]iH
   b VFAT  NTFS WӤ|ͨLD.
   
5.5 qi}]ƤWҰ Linux

   oӤk]iHΦb`ΨӶ}]ƤWҰ Linux t.
   
     * Ф
     * Zip ϺФ
     * Ϻи˸m
       
   ٦\hL˸miHϥ, NFS ڥؿtΤwgQ֤ߩҤ䴩, ҥH媺
   kӤ]iH.

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/
