pivot_root

Autres langues

Langue: ja

Version: 2007-06-01 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

̾Á°

pivot_root - root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òÊѹ¹¤¹¤ë

½ñ¼°

int pivot_root(const char *new_root, const char *put_old);

ÀâÌÀ

pivot_root() ¤Ï¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Î root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò put_old ¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°¤·¡¢ new_root ¤ò¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Î¿·¤·¤¤ root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¤¹¤ë¡£

pivot_root() ¤Îŵ·¿Åª¤ÊÍøÍÑË¡¤Ï¡¢¥·¥¹¥Æ¥à¤Îµ¯Æ°Ãæ¤Ë¥·¥¹¥Æ¥à¤¬°ì»þŪ¤Ê root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à (Î㤨¤Ð initrd) ¤ò¥Þ¥¦¥ó¥È¤·¡¢¤³¤ì¤Ë³¤¤¤ÆËÜÅö¤Î root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¥Þ¥¦¥ó¥È¤·¡¢ ¸å¼Ô¤òɬÍפÊÁ´¤Æ¤Î¥×¥í¥»¥¹¡¦¥¹¥ì¥Ã¥É¤Î ¥«¥ì¥ó¥È root ¤ËÊѹ¹¤¹¤ë¤è¤¦¤Ê¾ì¹ç¤Ç¤¢¤ë¡£

¸Å¤¤ root ¥Ç¥£¥ì¥¯¥È¥ê¤ò»È¤Ã¤Æ¤¤¤¿Á´¤Æ¤Î¥×¥í¥»¥¹¤ä¥¹¥ì¥Ã¥É¤Î ¥«¥ì¥ó¥È root ¤È¥«¥ì¥ó¥È¥ï¡¼¥­¥ó¥°¥Ç¥£¥ì¥¯¥È¥ê (cwd) ¤ò¡¢ pivot_root() ¤¬Êѹ¹¤¹¤ë¤«¤É¤¦¤«¤Ï¤ï¤«¤é¤Ê¤¤¡£ pivot_root() ¤Î¸Æ¤Ó¤À¤·¥×¥í¥»¥¹¤Ï¡¢¸Å¤¤ root / cwd ¤ò»È¤Ã¤Æ¤¤¤¿¥×¥í¥»¥¹¤¬¡¢ ¤¤¤º¤ì¤Î¾ì¹ç¤Ç¤âÀµ¤·¤¯Æ°ºî¤¹¤ë¤³¤È¤òÊݾڤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤³¤ì¤ò´Êñ¤Ë¹Ô¤¦¤Ë¤Ï¡¢¤½¤ì¤é¤Î¥×¥í¥»¥¹¤Î root ¤È cwd ¤ò pivot_root() ¤ò¸Æ¤Ó½Ð¤¹Á°¤Ë new_root ¤ËÊѹ¹¤·¤Æ¤ª¤¯¤³¤È¤Ç¤¢¤ë¡£

¾åµ­¤ÎÃÊÍî¤Ï¡¢¾­Íè pivot_root() ¤¬Êѹ¹¤µ¤ì¤ë¤«¤âÃΤì¤Ê¤¤¤³¤È¤ò´Õ¤ß¤Æ¡¢¤ï¤¶¤ÈÛ£Ëæ¤Ë½ñ¤¤¤Æ¤¢¤ë¡£ ËÜ¥Ú¡¼¥¸¤òµ­½Ò¤·¤Æ¤¤¤ë»þÅÀ¤Ç¤Ï¡¢ pivot_root() ¤Ï¸Å¤¤ root ¥Ç¥£¥ì¥¯¥È¥ê¤òÍѤ¤¤Æ¤¤¤ëÁ´¤Æ¤Î¥×¥í¥»¥¹¡¦¥¹¥ì¥Ã¥É¤Î root ¤È cwd ¤ò new_root ¤ËÊѹ¹¤¹¤ë¡£¤³¤ì¤Ï¥«¡¼¥Í¥ë¤Î¥¹¥ì¥Ã¥É¤¬¸Å¤¤ root ¥Ç¥£¥ì¥¯¥È¥ê¤ò busy ¾õÂ֤ˤ·¤Ê¤¤¤¿¤á¤ËɬÍפǤ¢¤ë¡£¤³¤ì¤é¤Î¥¹¥ì¥Ã¥É¤¬ ¸Å¤¤¥Ç¥£¥ì¥¯¥È¥ê¤ò root / cwd ¤È¤·¤Æ¤¤¤ë¤È¡¢¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë °ìÀÚ¥¢¥¯¥»¥¹¤·¤Ê¤¤¾ì¹ç¤Ç¤â¸Å¤¤ root ¤¬ busy ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¢¤ë¡£ ¾­Íè¤Ï¡¢¥«¡¼¥Í¥ë¥¹¥ì¥Ã¥É¤¬¤¢¤é¤æ¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹¤ò ÌÀ¼¨Åª¤ËÊü´þ¤¹¤ë¥á¥«¥Ë¥º¥à¤¬¤Ç¤­¡¢¤³¤Î¤Ç¤·¤ã¤Ð¤ê¤Êµ¡Ç½¤Ï pivot_root() ¤«¤éºï½ü¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£

¤³¤ì¤Ï¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Ë¤Ä¤¤¤Æ¤âÅö¤Æ¤Ï¤Þ¤ë¤³¤È¤ËÃí°Õ¡£ pivot_root() ¤¬¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Î cwd ¤Ë±Æ¶Á¤¹¤ë¤«¤É¤¦¤«¤Ï¤ï¤«¤é¤Ê¤¤¡£ ¤·¤¿¤¬¤Ã¤Æ pivot_root() ¤Îľ¸å¤Ë chdir(/) ¤ò¸Æ¤Ó½Ð¤¹¤È¤è¤¤¡£

new_root ¤ª¤è¤Ó put_old ¤Ë¤Ï°Ê²¼¤ÎÀ©¸Â¤¬¤¢¤ë:

-
¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-
new_root ¤È put_old ¤Ï¸½ºß¤Î root ¤ÈƱ¤¸¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-
put_old ¤Ï new_root °Ê²¼¤Ë¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤¹¤Ê¤ï¤Á put_old ¤òº¹¤¹Ê¸»úÎó¤Ë 1 ¸Ä°Ê¾å¤Î ../ ¤òÉÕ¤±¤ë¤³¤È¤Ë¤è¤Ã¤Æ new_root ¤ÈƱ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤¬ÆÀ¤é¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-
¾¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬ put_old ¤Ë¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£

ÍøÍÑÎã¤Ë¤Ä¤¤¤Æ¤Ï pivot_root(8) ¤ò»²¾È¤Î¤³¤È¡£

¸½ºß¤Î root ¤¬¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¤Ç¤Ï¤Ê¤¤ (chroot(2) ¤ä pivot_root() ¤Î¸å¤Ê¤É¡£°Ê²¼¤â»²¾È) ¾ì¹ç¡¢ ¸Å¤¤ root ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¯¡¢ ¤½¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¤¬ put_old ¤Ë¥Þ¥¦¥ó¥È¤µ¤ì¤ë¡£

new_root ¤Ï¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¤Ç¤Ê¤¯¤Æ¤â¤è¤¤¡£ ¤³¤Î¾ì¹ç /proc/mounts ¤Ï¡¢ new_root ¤ò root (/) ¤È¤¹¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¤òɽ¼¨¤¹¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤¹¤ë¤È 0 ¤òÊÖ¤¹¡£¥¨¥é¡¼¤¬µ¯¤ë¤È -1 ¤òÊÖ¤·¡¢ errno ¤¬Å¬ÀÚ¤ÊÃͤËÀßÄꤵ¤ì¤ë¡£

¥¨¥é¡¼

pivot_root() ¤Ï stat(2) ¤ÎÊÖ¤¹¤¢¤é¤æ¤ë¥¨¥é¡¼¤ò (errno ¤Ë) ÊÖ¤¹²ÄǽÀ­¤¬¤¢¤ë¡£¤µ¤é¤Ë°Ê²¼¤òÊÖ¤¹¤³¤È¤¬¤¢¤ë:
EBUSY
new_root ¤Þ¤¿¤Ï put_old ¤¬¡¢¸½ºß¤Î root ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ë¤«¡¢´û¤Ë put_old ¤Ë¤Ê¤ó¤é¤«¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤ë¡£
EINVAL
put_old ¤¬ new_root ¤Î²¼Áؤˤʤ¤¡£
ENOTDIR
new_root ¤Þ¤¿¤Ï put_old ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ê¤¤¡£
EPERM
¥«¥ì¥ó¥È¥×¥í¥»¥¹¤¬ CAP_SYS_ADMIN ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£

¥Ð¡¼¥¸¥ç¥ó

pivot_root() ¤Ï Linux 2.3.41 ¤ÇƳÆþ¤µ¤ì¤¿¡£

½àµò

pivot_root() ¤Ï Linux ¤Ë¸ÇÍ­¤Î¤â¤Î¤Ê¤Î¤Ç¡¢°Ü¿¢À­¤Ï¤Ê¤¤¡£

¥Ð¥°

pivot_root() ¤Ï¥·¥¹¥Æ¥à¤Î¾¤Î¥×¥í¥»¥¹Á´¤Æ¤Î root ¤È cwd ¤È¤òÊѹ¹¤·¤Ê¤¯¤Æ¤â¤è¤¤¤Ï¤º¤Ç¤¢¤ë¡£

pivot_root() ¤Î»È¤¤Êý¤¬¤â¤¦¤Á¤ç¤Ã¤ÈÛ£Ëæ¤Ë¤Ê¤ë¤È¡¢ ¤¢¤Ã¤È¤¤¤¦´Ö¤Ë¤ï¤±¤Î¤ï¤«¤é¤Ê¤¤¾õÂ֤ˤʤäƤ·¤Þ¤¦¤À¤í¤¦

Ãí°Õ

glibc ¤Ï¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÂФ¹¤ë¥é¥Ã¥Ñ¡¼´Ø¿ô¤òÄ󶡤·¤Æ¤¤¤Ê¤¤¡£ syscall(2) ¤ò»È¤Ã¤Æ¸Æ¤Ó½Ð¤¹¤³¤È¡£

´ØÏ¢¹àÌÜ

chdir(2), chroot(2), stat(2), initrd(4), pivot_root(8)