Ãʱâ 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= (¿¹, 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= ¿¹) LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 init=/linuxrc rw LILO ÀÇ °æ¿ì, /etc/lilo.conf ¾È¿¡ Àüü ¼½¼Ç À̳ª ȤÀº ÇØ´çÇÏ´Â ¼½¼Ç¿¡ INITRD= ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù. ±×¸®°í 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 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. ½Ã½ºÅÛÀº Ç÷ÎÇdzª ´Ù¸¥ ¸Åü¿¡¼­ ÃÖ¼ÒÈ­µÈ Ä¿³Î·Î ºÎÆÃÇÑ´Ù(¿¹, 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 °¡ µµÀԵDZâ Àü¿¡ »ç¿ëµÇ¾ú´Ù. ÇöÀçÀÇ Ä¿³ÎÀº ¿©ÀüÈ÷ ±×°ÍÀ» Áö¿øÇÏÁö¸¸ ±×°ÍÀÇ Áö¼ÓÀûÀÎ »ç¿ë°¡´É¼º¿¡ ´ëÇؼ­ ÀÇÁ¸Çؼ­´Â _¾È_µÈ´Ù. ±×°ÍÀº "ÁøÂ¥" ·çÆ® ÀåÄ¡ (Áï, Ä¿³Î À̹ÌÁö ¾È¿¡ 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" [2] newlib package (experimental), with initrd example [3] Brouwer, Andries; "util-linux: Miscellaneous utilities for Linux"