pivot_root - ルートファイルシステムの変更
pivot_root new_root put_old
pivot_root は現在プロセスのルートファイルシステムをディレクトリ put_old に移動して、 new_root を新たなルートファイルシステムとします。 pivot_root(8) は単に pivot_root(2) を呼び出すだけなので、詳しくは後者の man ページを参照してください。
なお pivot_root の実装方法により、 呼び出した側のルートとカレントワーキングディレクトリは、 変わる場合もあり変わらない場合もある点に注意してください。 どのようになったとしても、 以下の pivot_root の呼び出し手順をとれば、 うまく動作します。 ここで pivot_root と chroot はカレント PATH にあるものとします。
cd new_root pivot_root . put_old exec chroot . command
chroot は古いルート、新たなルートの両方において利用可能でなければなりません。 pivot_root は暗黙のうちに、 シェルのルートディレクトリを変更することもあり、 変更しないこともあるためです。
なお exec chroot は実行ファイルを変更します。 これは古いルートディレクトリが後にアンマウントされる際に必要となります。 また標準入力、標準出力、標準エラー出力は、いずれも古いルートファイルシステム上のデバイスを指したままとなり、 ファイルシステムがビジーのままとなる場合があります。 これは chroot を実行する際に簡単に変更されます (以下参照。 なお pivot_root がシェルのルートを変更するしないのいずれであっても動作するように、先頭にはスラッシュがないことに注意してください。
-h, --help
ヘルプテキストを表示して終了する。
-V, --version
バージョンを表示して、 終了する。
対話シェルからルートファイルシステムを /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
新しいルートファイルシステムを 10.0.0.1:/my_root から NFS によりマウントして、 init を実行します。
ifconfig lo 127.0.0.1 up # portmap 向け # Ethernet などの設定 portmap # lockd 向け (マウントにより暗に起動) mount -o ro 10.0.0.1:/my_root /mnt killall portmap # portmap はそれまでのルートをビジーのままに cd /mnt pivot_root . old_root exec chroot . sh -c 'umount /old_root; exec /sbin/init' \ <dev/console >dev/console 2>&1
chroot(1), pivot_root(2), mount(8), switch_root(8), umount(8)
バグ報告は、 以下に示す issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.
pivot_root コマンドは util-linux パッケージの一部であり、 以下からダウンロードでます。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.