pivot_root()
현재 프로세스의 루트 파일 시스템을 _put_old_ 디렉터리로 이동하고 _new_root_를 현재 프로세스의 새 루트 파일 시스템으로 만듭니다.
int pivot_root(const char *new_root, const char *put_old);
이 글을 읽으면서 다음과 같은 질문이 생겼습니다.
- _put_old_는 무엇에 사용되나요? 커널이 내부 목적으로만 사용합니까, 아니면 어떤 용도로 사용할 수 있습니까?
- 현재 파일 시스템을 _put_old_ 디렉토리로 이동해야 하는 이유는 무엇입니까?
- _put_old_ 디렉토리가 _new_root_ 디렉토리 아래에 있어야 하는 이유는 무엇입니까?
공식 문서는 시스템 호출을 활용하려는 경우 수행하려는 작업을 명확하게 설명 pivot_root
하지만 문서가 이러한 규칙을 적용하는 이유와 뒤에서 수행하는 작업을 명확하게 설명하지 않는 것 같습니다.
이 사실을 아는 친절한 사람이 이 문제를 해결하는 데 도움을 줄 수 있습니까?
답변1
pivot_root
시스템 시작 시 사용됩니다. RAM의 초기 Linux 시스템과 최종 루트 파일 시스템 간의 전환을 용이하게 하기 위해 도입되었습니다.
Linux가 부팅되면 커널과 초기 루트 파일 시스템이 부트 로더에 의해 메모리에 로드됩니다. 부트로더(ROM에 저장됨)는 Linux 시스템을 RAM에 로드한 다음 커널을 실행하는 작은 프로그램입니다.
부팅 순서가 끝나면 RAM 파일 시스템이 초기 루트 파일 시스템으로 마운트됩니다. 이를 수행하는 initrd
데는 두 가지 옵션이 있습니다 initramfs
. 두 방법 모두 초기 루트 파일 시스템에서 커널을 부팅합니다.
커널은 최종 루트 파일 시스템을 생성하기 위해 여러 작업을 수행해야 합니다. 이를 위해 사용되는 다양한 기술이 있지만(Linux 배포판에 따라) 기본적으로 커널은 최종 루트 파일 시스템에 액세스하는 데 필요한 하드웨어 드라이버를 로드합니다.
예를 들어 루트 파일 시스템이 NFS에 있는 경우 커널은 먼저 네트워크를 설정하고 NFS 공유에 액세스하기 위한 정보를 얻은 다음 NFS 공유를 마운트해야 합니다.
새 루트에 액세스할 수 있게 되면 새 루트가 임시 마운트 지점에 마운트되고 제자리로 회전됩니다 pivot_root
. 최종 정리 작업을 완료하려면 스크립트에 잠시 동안 원래 루트 디렉터리가 필요할 수 있습니다. 정리가 완료되면 초기 루트 시스템이 마운트 해제되어 메모리를 확보합니다.
자세한 내용은 다음을 참조하세요.초기 Linux 램디스크.