여러 chroot가 umount /chrootedpath /dev/pts된 후: 대상이 사용 중입니다.

여러 chroot가 umount /chrootedpath /dev/pts된 후: 대상이 사용 중입니다.

나는 여러 개의 chroot 환경을 각각 별도의 폴더에서 병렬로 실행해 왔으며(스크립트가 chroot종료될 때 때로는 동일한 폴더에서 다른 환경을 실행함) 잠시 동안은 괜찮아 보였습니다. 하지만 지금은 "기본" 시스템이 거의 없습니다 /dev(앱을 시작할 수 없거나 새 창을 열 수 없음 등).

나는 항상 다음과 같이 설치했습니다.

sudo mount -t proc proc $work_path/fin_sq/proc
sudo mount -t sysfs sys $work_path/fin_sq/sys
sudo mount -t devtmpfs devtmpfs $work_path/fin_sq/dev
sudo mount -t devpts devpts $work_path/fin_sq/dev/pts

종료 후 제거 chroot:

umount "${work_path}"/fin_sq/dev/pts
umount "${work_path}"/fin_sq/dev
umount "${work_path}"/fin_sq/proc
umount "${work_path}"/fin_sq/sys

때로는 통과합니다 ctrl-c. 이전 실행의 남은 부분이 존재하는 폴더에서 스크립트가 실행되는 경우 이전 작업을 제거하고 삭제하도록 스크립트가 코딩됩니다.

오늘, 나는 적어도 하나의 터미널 창에서 루트가 실패한 시스템의 모든 폴더를 삭제하는 스크립트를 target is busy가지고 있는 것을 보았습니다. 앞으로는 제거 중 하나가 실패하면 추가 제거/제거를 취소하는 것이 좋을 것 같습니다.chrootumount

그러나 이것이 어떻게 이어질 수 있다고 생각하십니까? 조사하는 방법? 시스템을 작동 상태로 만드는 방법은 무엇입니까? Linux를 더 깊이 배우기 위해 당분간 시스템을 재부팅하지 않을 것입니다. 티아

추신: 전체 스크립트는 관심 있는 분들을 위한 참고용입니다.스크립트는 chroot를 통해 다른 스크립트를 실행합니다., 검색 결과 /dev/pts코드에서 두 줄(마운트/마운트 해제)이 발견되었습니다.

"Natural"은 lsof빈 출력을 표시하므로 추가해도 --force아무런 차이가 없는 것 같습니다. 시도 결과 mount -t devpts devpts /dev는 "devtmpfs가 one_of_chrooted_paths/dev에 설치되었습니다"입니다.

나는 읽었다umount: 대상이 사용 중입니다., 그런데 문제는 -o rbind그것 없이 설치했다는 것입니다. 이번에도 chrooted 2개를 사용하고 있었는데 3~4개로 늘렸더니 뭔가 깨졌네요...

답변1

노트:이 답변은 제가 이 문제를 해결한 방법입니다. 문제가 어떻게 발생하는지에 대한 기술적인 세부 정보가 포함된 답변을 환영합니다.

나는 각각 과 상태를 가진 ps aux여러 프로세스 가 있다는 것을 발견했습니다 .sudo chroot .../work5/TSs

번역: Ph.D.

또한 lsof다른 하위 폴더를 실행할 때 발견한 여러 다른 프로세스가 chroot여전히 해당 폴더에 설치되어 있습니다 findmnt(앞에서 확인한 것처럼 "${work_path}" /fin_sq/dev/pts가 아님). 이것이 중단된 후 (쉽지는 않지만) 또 다른 관련 질문을 게시했습니다.linux: kill -9 프로세스는 두 번째 시도에서만 성공합니다.), 문제가 있는 마운트 지점을 마운트 해제할 수 있었습니다.

손상되었지만 /dev특히 /dev/null손상되지 않은 후 special characterGoogle에서 내 답변을 검색하여 문제를 해결했습니다.https://superuser.com/a/1767579/607929:

# mknod -m 666 /dev/null c 1 3 
# mknod -m 666 /dev/ptmx c 5 2

모든 것이 작동하는 것 같지만 INO 문제가 정확히 어떻게 시작되었는지에 대한 세부 정보를 찾는 것이 더 어렵습니다. chroot다음 단계를 실행하기 전에 마지막으로 스크립트를 실행했을 때의 터미널 출력을 지운 것 같습니다 . Ctrl-c거의 확실하게 근본 원인입니다. 이전에는 문제 없이 여러 번 고장났지만 최근에는 이러한 "혼란"을 일으킨 이유가 무엇인지 궁금합니다.

관련 정보