Manpages

名 前

pivot_root − root フ ァ イ ル シ ス テ ム を 変 更 す る

書 式

pivot_root new_root put_old

説 明

pivot_root は カ レ ン ト プ ロ セ ス の root フ ァ イ ル シ ス テ ム を put_old デ ィ レ ク ト リ に 移 動 し 、 new_root を 新 し い root フ ァ イ ル シ ス テ ム に す る 。 pivot_root(8)pivot_root(2) を 呼 び 出 し て い る だ け な の で 、 詳 細 は 後 者 の man ペ ー ジ に あ た っ て 欲 し い 。 呼 び 出 し プ ロ セ ス の root と カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ (cwd) は pivot_root の 実 装 に 依 存 し て 変 わ っ た り 変 わ ら な か っ た り す る 。 以 下 は ど ち ら の 場 合 に も 動 作 す る pivot_root の 起 動 方 法 だ が 、 pivot_rootchroot の 両 方 が 現 在 の PATH に 入 っ て い る 必 要 が あ る 。

cd new_root
pivot_root . put_old
exec chroot . command

chroot は 古 い root と 新 し い root の 両 方 で 使 え な け れ ば な ら な い 。 な ぜ な ら pivot_root が シ ェ ル の root デ ィ レ ク ト リ を 暗 黙 の う ち に 変 更 す る か ど う か は わ か ら な い か ら で あ る 。

exec chroot は 動 作 し て い る 実 行 フ ァ イ ル を 変 更 す る 。 こ れ は 後 で 古 い root デ ィ レ ク ト リ が ア ン マ ウ ン ト さ れ る た め に 必 要 な の で あ る 。 ま た 標 準 入 力 ・ 標 準 出 力 ・ 標 準 エ ラ ー 出 力 が 古 い root フ ァ イ ル シ ス テ ム の デ バ イ ス を 指 し て い て 、 root フ ァ イ ル シ ス テ ム を busy 状 態 に す る か も し れ な い 。 こ れ ら は chroot を 実 行 す る と き に 簡 単 に 変 更 で き る (以 下 を 参 照 。 先 頭 の ス ラ ッ シ ュ が な い の で (相 対 パ ス で 指 定 し て い る の で )、 pivot_root が シ ェ ル の root を 変 更 す る 場 合 で も し な い 場 合 で も 動 作 す る こ と に 注 目 。 )

対 話 シ ェ ル か ら root フ ァ イ ル シ ス テ ム を /dev/hda1 に 変 更 す る :

mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root 新 し い root フ ァ イ ル シ ス テ ム を 10.0.0.1:/my_root か ら NFS で マ ウ ン ト し 、 init を 起 動 す る :

ifconfig lo 127.0.0.1 up # for portmap
# configure Ethernet or such
portmap # for lockd (implicitly started by mount)
mount -o ro 10.0.0.1:/my_root /mnt
killall portmap # portmap keeps old root busy
cd /mnt
pivot_root . old_root
exec chroot . sh -c ’umount /old_root; exec /sbin/init’ \
<dev/console >dev/console 2>&1

関 連 項 目

chroot(1), mount(8), pivot_root(2), umount(8)