  ʱ RAM ũ ϱ (initrd)

  Werner Almesberger werner.almesberger@epfl.ch & Hans Lermen ler
  men@fgan.de
  1996, 2000
   pooh@kldp.org
  2000 12 29

  ý ġ  Ŀ  ϰ ϴ initrd  Ұ
    ִ.
  ______________________________________________________________________

  

  1. Ұ
  2. ۵
  3. Ʈ  ɼ
  4. ġ
  5. Ʈ ġ ٲٱ
  6.  ó
  7.  Ʈ  Ŀ
  8. ڷ

  ______________________________________________________________________

  1.  Ұ

  initrd  Ʈ δ  RAM ũ о ̴ ɷ Ѵ.
   RAM ũ  Ŀ Ʈ Ͻý ƮǾ α׷
  װκ   ִ.  Ŀ, ο Ʈ  ý ٸ
  ġκ Ʈ   ִ.    Ʈ (initrd κ) 
  丮 Ű ᱹ 𸶿Ʈ   ִ.

  initrd  ũ ý   ܰ Ͼ  ϰ ϱ
   Ǿ.   ܰ Ŀ ϵǾ  ּ 
  ̹ Բ ö, ߰  initrd  о鿩
  ̴.

    initrd 뿡    Ѵ. Ʈ  
   ڼ Ǵ [1]  ãƺ  ִ.

  2.  ۵

  initrd  Ҷ, ý   õȴ:

  1. Ʈ δ Ŀΰ ʱ RAM ũ оδ.

  2. Ŀ initrd  "" RAM ũ ȯϰ, initrd  
      ޸𸮸 Ǯ´.

  3. initrd  Ʈ а-  Ʈȴ.

  4. /linuxrc  ȴ (̰  ȿ ϵ   ִ, 
     ũƮ Ͽ; װ uid 0  ǰ ⺻ init 
       ִ     ִ)

  5. linuxrc  "¥" Ʈ  ý ƮѴ

  6. linuxrc  pivot_root ý  Ͽ Ʈ  ý Ʈ
     丮 ƮѴ.

  7.  Ʈ  ( , /sbin/init  θ )  Ʈ 
     ýۿ ȴ

  8. initrd  ý ŵȴ

  Ʈ 丮 ϴ  װ 𸶿Ʈ ϴ  
   ϶.  initrd  ư μ  
  ܳ  ִ.  initrd Ʒ Ʈ  ý۵ ؼ
  ٰԿ ϶.

  3.  Ʈ  ɼ

  initrd   ο ɼ ߰Ѵ:

  initrd=<path> (, LOADLIN)

    ʱ RAM disk  оδ. LILO   , RAM
  ũ ̹ /etc/lilo.conf ȿ ؾ ϸ, INITRD  
  ̿Ѵ.

  noinitrd

  initrd ڷ ǳ RAM ũ ȯǾ "" Ʈ  ý
   Ʈ ʴ´. initrd ڷ /dev/initrd    ִ.
  initrd  ִ ڷᰡ  쿡     ְ, ݵ
   ý ̹ ʿ .   ɼ ַ 뿡 δ.

  : /dev/initrd  б ̰ ѹ   ִ. 
  μ װ ڸ,  ڷ Ǯ(freed) /dev/initrd 
  ̻   .

  root=/dev/ram0   (devfs  )

  root=/dev/rd/0   (devfs  )

  initrd  Ʈ Ʈǰ, RAM ũ  Ʈ Ʈ ä,
   Ʈ  ӵȴ.

  4.  ġ

  ù°, initrd  ý  丮 "" Ʈ  ýۿ
  Ǿ Ѵ.  

  # mkdir /initrd

  ̸ .  ڼ  pivot_root(2)   ãƺ
   ִ.
   Ʈ  ý Ʈ  ȴٸ (,  ġ
  ÷Ǹ ϰ ִٸ), Ʈ  ý   /initrd
  丮 ؾ Ѵ.

   initrd   쿡 Ʈ ʴ´ٸ, װ  
  ġ  쿣 ؼ  ϴ (̰ devfs 
   쿣 ۵  ):

  # mknod /dev/initrd b 1 250

  # chmod 400 /dev/initrd

  °, Ŀ RAM ũ  ʱ RAM ũ  ȰȭǾ
   Ǿ Ѵ. ,  initrd κ α׷ ϱ
    ҵ(,   İ  ý)   Ǿ
  Ŀ   Ѵ.

  °,  ũ ̹  Ѵ. ̰  ġ 
  ý , ⿡ ʿ ŭ   ,  ġ
   initrd   ߰ϸ ȴ. ֱ Ŀο, ּ 
   ġ  Ҵ.

  o  ÷ ũ ( ۵ ο )

  o   ũ (,  ޸𸮸 ҴѴ)

  o   ġ ( Ǹ )

   ġ ̿ϴ  ϵ ϰڴ.

  1.   ġ Ŀ ȿ Ǿ ȮѴ.

  2.  ũ   ý Ѵ.  ,

     # dd if=/dev/zero of=initrd bs=300k count=1

     # mke2fs -F -m0 initrd

     (  ߿ϴٸ, Ext2 ſ Minix FS  Ҽ ִ.)

  3.  ý ƮѴ.  ,

     # mount -t ext2 -o loop initrd /mnt

  4. ܼ ġ Ѵ(devfs Ѵٸ  ʿ ,
     ·    Ű ʴ´) :

     # mkdir /mnt/dev

     # mknod /mnt/dev/console c 5 1

  5. initdrd ȯ ϰ ϱ  ʿϵ Ѵ. 
     ߿  /linuxrc   . /linuxrc  ۹̼ x ()
      ؾ Կ ϶.
  6. initrd ȯ   ִ Ȯ ۵   ʰ 
      ̿Ͽ  ׽Ʈ   ִ.

     # chroot /mnt /linuxrc

      ̰ Ϲ ý ¸  ʴ initrd
     ȴ (, Ʈ ̽ 缳, Ʈ ̽
     , ̹   ٽ   ؼ. ׷
     ׷ chroot  initrd ȯ濡 pivot_root  ϴٴ Ϳ
     ָ϶.)

  7.  ý 𸶿ƮѴ.

     # umount /mnt

  8.  initrd   "initrd" ȿ ִ. ʿϴٸ Ҽ ִ.

     # gzip -9 initrd

     initrd  ϱ ؼ,  ÷ ϰ /linuxrc 
     /bin/sh  ɺ ũ ߰ϸ ȴ.  ſ,  initrd 
     ϱ ؼ,  newlib ȯ [2]    ִ.

  9. , Ŀ Ʈϰ initrd  оδ. κ 
      Ʈ δ initrd  Ѵ. Ʈ  
     Ŀ  ȣȯǹǷ,  Ʈ  Ķ͵
     ־߸ Ѵ:

      devfs  Ѵٸ,

     root=/dev/ram0 init=/linuxrc rw

      ʴ´ٸ(rw  initrd  ýۿ ⸦ Ҷ
     ʿϴ)

     root=/dev/rd/0 init=/linuxrc rw

     LOADLIN  쿡,  ̰͸ ϸ ȴ.

     LOADLIN < kernel > initrd= <disk_image>

     )  LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ
     root=/dev/ram0

     init=/linuxrc rw

     LILO  , /etc/lilo.conf ȿ ü  ̳ Ȥ شϴ
     ǿ INITRD=<path> ɼ ߰Ѵ. ׸ APPEND  ̿Ͽ
     ɼ Ѱش.   ,

     image = /bzImage

     initrd = /boot/initrd.gz

     append = "root=/dev/ram0 init=/linuxrc rw"

     ׸ /sbin/lilo  Ų.

     ٸ Ʈ δ شϴ  ϶.

         ְ initrd  ϴ    ִ.

  5.  Ʈ ġ ٲٱ

  linuxrc  ڽ  , Ʈ ġ Ͽ, "¥" Ʈ
  ġ  ý ν  Ų.

      Ѵ.

  o  ο Ʈ  ý Ʈϱ

  o  װ Ʈ  ý ٲٰ

  o   (initrd) Ʈ  ý  ＼ ϰ

  o  initrd  ý 𸶿Ʈϰ RAM ũ Ѵ.(de-
     allocate)

  ο Ʈ  ý Ʈ ϴ  :   Ʈ
  Ʒ 丮 Ʈ Ǹ ȴ.  :

  # mkdir /new-root

  # mount -o ro /dev/hda1 /new-root

  Ʈ  pivot_root ý  ̿Ͽ ̷.  ý 
  pivot_root ƿƼ ( pivot_root(8)   ; pivot_root 
  util-linux  2.10h ̻ ȴ [3])  ؼ  
  ִ. pivot_root   Ʈ ο Ʈ Ʒ 丮
  ϰ, ο Ʈ  ڸ ġŲ.  Ʈ 
  丮 pivot_root  ȣϱ  ؾ Ѵ.  :

  # cd /new-root

  # mkdir initrd

  # pivot_root . initrd

   linuxrc μ   Ʈ   𸣴µ, 
  δ  ,  ̺귯, ǥ Է//, ׸ װ
   Ʈ 丮̴.  ̷     ̿
  ŵȴ.

  # exec chroot . what-follows <dev/console >dev/console 2>&1

  what-follow  ο Ʈ Ʒ ִ α׷̴.  
  /sbin/init  ο Ʈ  ý devfs  Բ ̿ ̰
  ȿ /dev 丮   ʴٸ, devfs  /dev/console 
  ϱ  chroot  ҷ  Ʈ Ǿ Ѵ.

  : pivot_root   ڼ   ð  ٲ ִ.
  ȣȯ Ȯϰ ϱ ,  ҵ Ǿ Ѵ.

  o  pivot_root  ȣϱ , ȣϴ μ  丮
     ο Ʈ 丮 Ѿ Ѵ

  o  ù° ڷ .  ϰ,  Ʈ  __ θ
     ι° ڷ Ѵ

  o  chroot α׷  ο Ʈ  ؾ Ѵ

  o  ᱹ ο Ʈ chroot Ѵ

  o  exec ɿ dev/console   θ Ѵ

  , initrd  𸶿ƮǾ RAM ũ Ҵ ޸𸮰  
  ִ.

  # umount /initrd

  # blockdev --flushbufs /dev/ram0    # devfs   

  NFS Ʈ Ʈ initrd    , ڼ 
  pivot_root(8)   ϶.

  :  linuxrc  ׷κ exec Ǵ  α׷̵ 
   Ǹ,  change_root Ŀ ҷ(" Ʈ
   Ŀ" ׸ ).

  6.   ó

  initrd   ֿ  ý ġÿ  Ŀ 
  ϰ ϱ ؼ.     Ѵ.

  1. ý ÷ǳ ٸ ü ּȭ Ŀη Ѵ(, RAM
     ũ, initrd, a.out, Ext2 FS ) ׸ initrd  εѴ

  2. /linurc  (1) "¥" Ʈ FS (, ̽ , ̽
     ̹,  ý)  Ʈ ϴµ, (2)  ü(, CD-ROM,
     Ʈ,  )  ʿ   Ѵ. ̰
     ڿ ų, ڵ ϰų,  ģ  
     ȴ.

  3. linuxrc  ʿ Ŀ  εѴ

  4. linuxrc  Ʈ  ý ϰ Ų (̰
       Ҹ ý ʿ )

  5. linuxrc  pivot_root  ȣϿ Ʈ  ý ٲٰ chroot
      ̿ ġ  α׷ exec Ѵ

  6. Ʈ δ ġȴ

  7. Ʈ δ ý ϱ      initrd
      εϵ ȴ(, /initrd  ǰ, ߿
     𸶿Ʈǰ,  ̹ /dev/ram0  /dev/rd/0 
     Ϸ   ִ)

  8.  ý Ʈ ϰ ߰ ġ ۾ ȴ

  ⼭ initrd    () Ǯ "" Ŀ 
  ʰ Ŀ ٽ ϰų ũ ʰ  ý ۾ 
   ڷḦ ϱ ̴.

  ι° ó   ȿ ִ  ٸ ϵ
    ýۿ    ġ̴. ׷ 쿡,
  Ŀ ּ  (̻δ  ϳ)    
  ý Ư κ  ۰ ϴ  ̴̻.  ,
   initrd   ʿ     ִ. ,
   װͿ   /linuxrc  ϸ ٸ  ̴.

  ° ó    ũ̴. ֳϸ ýÿ Ʈ
  FS Ƽ ġ   ʿ䰡  ̴. ׷
  initrd  ε ý  ģȭ ȭâ  
  Ȯ ˻縦   ִ(Ȥ ڵ Ž  ·μ)

  , CD-ROM ڵ   CD  ġ  
   ִ.   Ʈ ÷Ǹ ϰ  ū RAM ũ CDκ
  initrd  ƮƮ ϰų, LOADLIN  δ ؼ 
  CD-ROM  ϰ, ÷ǰ ʿ  CD  RAM ũ
  о̴ ̴.

  7.   Ʈ  Ŀ

   Ŀ pivot_root  ԵǱ  Ǿ.  
  Ŀ  װ  װ  밡ɼ ؼ
  ؼ __ȴ.

  װ "¥" Ʈ ġ (, Ŀ ̹ ȿ rdev  ǰų Ʈ
  ࿡ root=...   )  linuxrc  Ҷ Ʈ 
  ý Ʈμ Ѵ. initrd  ý ׸ ,
  𸶿ƮǴ,  ̶ ο Ʈ  ýۿ /initrd
   丮    Ű.

   Ŀ ϱ , Ʈ  ɼ root, init, rw  
  ʿ . ( Ǿٸ, initrd ȯ ƴ  Ʈ 
  ýۿ  ĥ ̴.)

   /proc  Ʈȴٸ, "¥" Ʈ ġ linuxrc ȿ ο
  Ʈ FS ġ ȣ Ư  /proc/sys/kernel/real-root-dev
  ν ٲ  ִ.  

  # echo 0x301 >/proc/sys/kernel/real-root-dev

   Ŀ NFS  ̿   ý۰ ȣȯ 
  ϶.

    񳭹޴ Ŀ  "change_root"  Ҹ ݸ,
  Ӱ ޴ Ŀ "pivot_root"  Ҹ.

  8.  ڷ

  [1] Almesberger, Werner; "Booting Linux: The History and the Future"
  <ftp://icaftp.epfl.ch/pub/people/almesber/booting/bootinglinux-
  current.ps.g>

  [2] newlib package (experimental), with initrd example
  <ftp://icaftp.epfl.ch/pub/people/almesber/misc/newlib-linux/>

  [3] Brouwer, Andries; "util-linux: Miscellaneous utilities for Linux"
  <ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/>

