PIVOT_ROOT(2)

이름
pivot_root - 루트파일시스템 바꾸기.

사용법
#include <linux/unistd.h>

_syscall2(int,pivot_root,const char *,new_root,const char *,put_old)

int pivot_root(const char *new_root, const char *put_old);

설명
pivot_root는 디렉토리 put_old로 현재 프로세스의 루트 파일시스템을 옮기고, 현재 프로세스의 새로운 파일시스템 new_root를 만든다. 의 전형적인 사용은 시스템이 임시 루트 파일시스템을 마운트할 때인 시스템 부팅동안이다. 그리고나서 실제 루트 파일 시스템을 마운트하고, 결국 모든 관련된 프로세스들과 쓰레드의 현재 루트안에 후자로 바꾼다. pivot_root는 현재 루트와 모든 프로세스나 쓰레드의 현재 작업중인 디렉토리(cwd)를 변화시키나 그렇지 않을 수도 있다. pivot_root의 caller는 루트나 cwd의 프로세스를 확인해야만 한다. 확인의 쉬운 방법은 pivot_root 이 실행되기 전에 new_root로 루트, cwd를 바꾸는 것이다. 이것은 또한 현재 프로세스에 적용한다는 것을 주지한다:pivot_root는 cwd에 영향을 받을 수도 있고 그렇지 않을 수도 있다. 그러므로 그것은 pivot_root후에 즉시 chdir("/") 호출을 명령한다. 다음의 제한은 new_root와 put_old를 적용한다:

-   디렉토리여만 한다.

-   new_root 와 put_old는 현재 루트와 같은 파일 시스템이 아니어야한다.

-   put_old는 new_root 아래이어야만 한다.

-   어떠한 다른 파일 시스템도 put_old에 마운트되지 않았을 런지 모른댜.

추가 사용예제를 위해 pivot_root(8)를 본다.

주의
new_root는 마운트 포인트가 되지않아야 한다.

반환값
성공시, 0이 반환된다. 실패시,-1이 반환되고 errno는 적절히 설정된다.

에러
pivot_root는 stat(2)에 의해 반환된 에러의 대부분을 반환할런지 모른다. 추가적으로, 아 래의 사항이 반환될런지도 모른다:

EBUSY
    new_root 나put_old는 현재 루트파일시스템에 있거나 파일 시스템이 이미 put_old에 마운트 되었다.

EINVAL
    put_old가 new_root밑에 없다.

ENOTDIR
    new_root 나 put_old가 디렉토리가 아니다.

EPERM
    현재 프로세스가 관리자 기능이 없다.

버그
pivot_root는 시스템의 모든 다른 프로세스들의 루트와 cwd를 바꾸지 않아야만 했다.

호환
pivot_root는 리눅스에서만 쓰이므로 이식될 수 없다.

역사
pivot_root는 리눅스 2.3.41에서 소개 되었다.

관련 항목
chdir(2), chroot(2), initrd(4), pivot_root(8), stat(2)

역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 26