테스트하고 싶어요pivot_root
이 명령은 현재 프로세스의 루트 파일 시스템을 이 디렉터리로 이동 하고 새 루트 파일 시스템을 put_old
만듭니다 .new_root
하지만 항상 다음과 같은 오류가 발생합니다.
pivot_root: failed to change root from .' toold-root/': Invalid argument
Fedora를 기본 루트로 사용하고 있으며 홈 폴더에 Archlinux가 있습니다.
[root@localhost arch-root]# ls
bin boot dev etc home lib lib64 mnt old-root
opt proc root run sbin srv sys tmp usr var
[root@localhost arch-root]# pivot_root . old-root/
pivot_root: failed to change root from .' toold-root/': Invalid argument
또한 Linux 함수를 호출해 보았지만 pivot_root("/chroot_test", "/chroot_test/old-root")
동일한 오류가 발생했습니다.
이것에 대한 생각이 있나요?
업데이트 #1
Docker에서도 테스트를 시도했습니다 pivot_root
. 이 아치 루트를 Docker 컨테이너에 설치했습니다. 하지만 다음과 같은 오류가 발생합니다.Operation not permitted
root@00d871ce892b:/# cd test_root/
root@00d871ce892b:/test_root# ls
bin boot dev etc home lib lib64 mnt old-root opt proc root run sbin srv sys test_pivot_root test_pivot_root.c tmp usr var
root@00d871ce892b:/test_root# pivot_root . tmp/
pivot_root: Operation not permitted
답변1
arch-root
마운트 및 마운트 해제가 가능한 별도의 파일 시스템에 있다는 것이 정말 확실합니까 ?
pivot_root
최신 버전 switch_root
에서는 커널에 마운트된 파일 시스템에 대한 정보를 처리하여 작동합니다.
새 루트 파일 시스템은 파일 시스템의 "루트"여야 하며 "."를 전달할 수 없습니다. "."이 마운트된 파일 시스템의 루트가 아닌 한 새 루트로 사용됩니다.
현재 설정에서 시도 하고 싶다면 pivot_root
(arch-root가 루트가 아닌 하위 디렉터리라고 가정) 가장 쉬운 방법은 tmpfs
전환할 파일 시스템을 만들고 거기에 필요한 콘텐츠를 복사하는 것입니다.
다음과 같은 내용을 통해 시작할 수 있습니다. (적절하게 500M 조정 du -sh arch-root
)
mkdir /ramroot 마운트 -n -t tmpfs -o 크기=500M no/ramroot cd arch-root # (루트 파일 시스템 내용 포함) 찾다. -깊이 -xdev -print | cpio -pd --quiet/ramroot CD /램루트 mkdir 이전 루트 디렉토리 피벗 루트. 오래된 뿌리 chroot를 실행합니다. 상자/판지
답변2
~에서매뉴얼 페이지, 이것이 귀하의 문제라고 생각합니다.
The following restrictions apply to new_root and put_old:
- They must be directories.
- new_root and put_old must not be on the same file system as the current
root.
- put_old must be underneath new_root, that is, adding a nonzero number of
/.. to the string pointed to by put_old must yield the same directory as
new_root.
- No other file system may be mounted on put_old.
위의 내용에 따르면 어떤 파일 시스템 put_old
도 .new_root
current_root
인용하다
답변3
질문 작성자는 다음 솔루션을 제공합니다.
해결책
내가 찾았어해결책:
docker
다음으로 실행--privileged=true
따라서 docker 컨테이너에서ivot_root를 테스트할 수 있습니다.