.\" Copyright (C) 2000 by Werner Almesberger .\" .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE) .\" May be distributed under GPL .\" %%%LICENSE_END .\" .\" Written 2000-02-23 by Werner Almesberger .\" Modified 2004-06-17 Michael Kerrisk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2000 NAKANO Takeo all rights reserved. .\" Translated Wed Jun 14 2000 by NAKANO Takeo .\" .TH PIVOT_ROOT 2 2012\-07\-13 Linux "Linux Programmer's Manual" .SH 名前 pivot_root \- root ファイルシステムを変更する .SH 書式 \fBint pivot_root(const char *\fP\fInew_root\fP\fB, const char *\fP\fIput_old\fP\fB);\fP \fI注\fP: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。 .SH 説明 .\" .\" The .\" .B CAP_SYS_ADMIN .\" capability is required. \fBpivot_root\fP() は呼び出し元のプロセスの root ファイルシステムを \fIput_old\fP ディレクトリに移動し、 \fInew_root\fP を呼び出し元のプロセスの新しい root ファイルシステムにする。 \fBpivot_root\fP() の典型的な利用法は、システムの起動中にシステムが一時的な root ファイルシステム (例えば \fBinitrd\fP) をマウントし、これに続いて本当の root ファイルシステムをマウントし、 後者を必要な全てのプロセス・スレッドの カレント root に変更するような場合である。 古い root ディレクトリを使っていた全てのプロセスやスレッドの カレント root とカレントワーキングディレクトリを、 \fBpivot_root\fP() が変更するかどうかはわからない。 \fBpivot_root\fP() の呼びだしプロセスは、古い root やカレントワーキングディレクトリを使っていた プロセスが、いずれの場合でも正しく動作することを保証しなければならない。 これを簡単に行うには、それらのプロセスの root と カレントワーキングディレクトリを \fBpivot_root\fP() を呼び出す前に \fInew_root\fP に変更しておくことである。 上記の段落は、将来 \fBpivot_root\fP() が変更されるかも知れないことを鑑みて、わざと曖昧に書いてある。 本ページを記述している時点では、 \fBpivot_root\fP() は古い root ディレクトリを用いている全てのプロセス・スレッドの root と カレントワーキングディレクトリを \fInew_root\fP に変更する。これはカーネルのスレッドが古い root ディレクトリを busy 状態にしないために必要である。これらのスレッドが 古いディレクトリを root やカレントワーキングディレクトリとしていると、 ファイルシステムに一切アクセスしない場合でも 古い root が busy になってしまうからである。 将来は、カーネルスレッドがあらゆるファイルシステムへのアクセスを 明示的に放棄するメカニズムができ、このでしゃばりな機能は \fBpivot_root\fP() から削除されるかもしれない。 これは呼び出し元のプロセスについても当てはまることに注意。 \fBpivot_root\fP() がカレントプロセスのカレントワーキングディレクトリに影響するかどうかは 分からない。したがって \fBpivot_root\fP() の直後に \fBchdir("/")\fP を呼び出すとよい。 \fInew_root\fP および \fIput_old\fP には以下の制限がある: .IP \- 3 ディレクトリでなければならない。 .IP \- 3 \fInew_root\fP と \fIput_old\fP は現在の root と同じファイルシステムにあってはならない。 .IP \- 3 \fIput_old\fP は \fInew_root\fP 以下になければならない。すなわち \fIput_old\fP を差す文字列に 1 個以上の \fI../\fP を付けることによって \fInew_root\fP と同じディレクトリが得られなければならない。 .IP \- 3 他のファイルシステムが \fIput_old\fP にマウントされていてはならない。 .PP 利用例については \fBpivot_root\fP(8) を参照のこと。 現在の root がマウントポイントではない (\fBchroot\fP(2) や \fBpivot_root\fP() の後など。以下も参照) 場合、 古い root ディレクトリではなく、 そのファイルシステムのマウントポイントが \fIput_old\fP にマウントされる。 \fInew_root\fP はマウントポイントでなくてもよい。 この場合 \fI/proc/mounts\fP は、 \fInew_root\fP を root (\fI/\fP) とするファイルシステムのマウントポイントを表示する。 .SH 返り値 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。 .SH エラー \fBpivot_root\fP() は \fBstat\fP(2) の返すあらゆるエラーを (\fIerrno\fP に) 返す可能性がある。さらに以下を返すことがある: .TP \fBEBUSY\fP \fInew_root\fP または \fIput_old\fP が、現在の root ファイルシステム上にあるか、既に \fIput_old\fP になんらかのファイルシステムがマウントされている。 .TP \fBEINVAL\fP \fIput_old\fP が \fInew_root\fP の下層にない。 .TP \fBENOTDIR\fP \fInew_root\fP または \fIput_old\fP がディレクトリでない。 .TP \fBEPERM\fP 呼び出し元のプロセスが \fBCAP_SYS_ADMIN\fP ケーパビリティを持っていない。 .SH バージョン \fBpivot_root\fP() は Linux 2.3.41 で導入された。 .SH 準拠 \fBpivot_root\fP() は Linux に固有のものなので、移植性はない。 .SH 注意 glibc はこのシステムコールに対するラッパー関数を提供していない。 \fBsyscall\fP(2) を使って呼び出すこと。 .SH バグ \fBpivot_root\fP() はシステムの他のプロセス全ての root と カレントワーキングディレクトリとを変更しなくてもよいはずである。 \fBpivot_root\fP() の使い方がもうちょっと曖昧になると、 あっという間にわけのわからない状態になってしまうだろう .SH 関連項目 \fBchdir\fP(2), \fBchroot\fP(2), \fBstat\fP(2), \fBinitrd\fP(4), \fBpivot_root\fP(8) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。