ivot_root(2)로 인해 시스템 충돌이 발생함

ivot_root(2)로 인해 시스템 충돌이 발생함

프로세스의 루트를 /tmp/mount_dir에 마운트된 새 파일 시스템으로 변경하려고 하며 그 안에 /tmp/mount_dir/inner_mount_dir에 다른 디렉토리를 생성했으며 매뉴얼 페이지 ivot_root(2)에 따르면 glibc가 없습니다. 이 시스템 호출 래퍼를 위해 직접 만들었습니다.

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

  return(syscall(SYS_pivot_root, new_root, put_old));

}

매뉴얼 페이지에 지정된 두 개의 중첩 디렉터리를 생성한 후 이 코드에서 이를 호출합니다.

fprintf(stderr,"-->Changing the process's root...");
if(pivot_root(mount_dir, inner_mount_dir)){
  fprintf(stderr,"Failed..%m\n");
  return -1;
}else{
  fprintf(stderr,"Success\n");
}

시스템 호출이 성공적으로 반환되지만 문제는 시스템이 충돌 상태에 들어가고 먼저 그놈 대시의 모든 아이콘이 사라지고 시스템과 전혀 상호 작용할 수 없다는 것입니다(시스템이 정지되고 창을 먼저 변경할 수만 있고 그 다음에는 창만 변경할 수 있습니다). 모든 것이 종료됨) 화면이 검은색 빈 화면으로 바뀌고 시스템이 종료되는 것처럼 왼쪽 상단에 "-"가 표시되지만 강제 종료할 때까지 해당 상태로 정지됩니다.

답변1

Hub_root()는 네임스페이스에서 작동합니다.

프로세스(및 해당 하위 프로세스)에만 영향을 미치려면 먼저 새 마운트 네임스페이스를 입력하세요. 그리고 mount --make-rslave /.

Linux 네임스페이스를 사용하여 chroot를 수행하는 방법은 무엇입니까?

관련 정보