名前

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_rootchroot はカレント 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/>.