ivot_root를 사용/테스트하는 방법은 무엇입니까?

ivot_root를 사용/테스트하는 방법은 무엇입니까?

테스트하고 싶어요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_rootcurrent_root

인용하다

답변3

질문 작성자는 다음 솔루션을 제공합니다.

해결책

내가 찾았어해결책:

docker다음으로 실행--privileged=true

따라서 docker 컨테이너에서ivot_root를 테스트할 수 있습니다.

관련 정보