File: pivot_root.2

package info (click to toggle)
manpages-ja 0.5.0.0.20120606-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,964 kB
  • sloc: perl: 161; makefile: 116
file content (97 lines) | stat: -rw-r--r-- 6,429 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
.\" Copyright (C) 2000 by Werner Almesberger
.\" May be distributed under GPL
.\"
.\" Written 2000-02-23 by Werner Almesberger
.\" Modified 2004-06-17 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH PIVOT_ROOT 2 2007\-06\-01 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
.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.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。