/dev 바인드 마운트를 마운트 해제할 수 없습니다.

/dev 바인드 마운트를 마운트 해제할 수 없습니다.

내 라이브 디스크를 파티션당 하나의 rsync /dev/sdb로 두 번째 디스크에 복사(시도)하는 스크립트를 만들었습니다 ./dev/sda전체 스크립트).

마지막 단계는 에 grub을 설치하는 것입니다 /dev/sda. 내가 사용하는 방법은 다음과 같습니다.

  1. /dev/sda 루트 파티션을 마운트합니다./mnt/root1
  2. /mnt/root1에 마운트 {/dev,/sys/,/proc} 바인딩:
# mount -o bind /sys  /mnt/root1/sys
# mount -o bind /proc /mnt/root1/proc
# mount -o bind /dev  /mnt/root1/dev
  1. chrooted를 실행 update-grub하고 grub-install다음을 실행합니다 /dev/sda.
chroot /mnt/root1 update-grub
chroot /mnt/root1 grub-install /dev/sda
  1. 3개의 번들 설치 제거:
# umount /mnt/root1/sys
# umount /mnt/root1/proc
# umount /mnt/root1/dev

그러나 /mnt/root1/devumount가 실패합니다.

# umount  /mnt/root1/dev 
umount: /mnt/root1/dev: target is busy.

노트:mount 명령은 다음을 제공 /dev합니다 /mnt/root1/dev.

udev on /dev type devtmpfs (rw,nosuid,relatime,size=8131896k,nr_inodes=2032974,mode=755,inode64)
udev on /mnt/root1/dev type devtmpfs (rw,nosuid,relatime,size=8131896k,nr_inodes=2032974,mode=755,inode64)

내 질문은: 바인드 설치가 어떻게 그렇게 바쁠 수 있습니까? 해결책이 있나요?

편집하다:/mnt/root1/dev 를 사용하여 마운트 해제할 수 있었지만(맨 페이지를 이해하면 실제로 마운트되었다는 사실을 숨김) umount --lazy나에게는 적합하지 않은 것 같습니다.

관련 질문:https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device

답변1

다양한 고려 사항부터 시작하세요.

비슷한 것을 달성할 때 다음을 설치하는 것을 선호합니다.

  • --유형 프로세스/proc /mnt/root1/proc 이는 proc이 특수 파일 시스템이고 항상 자동으로 인식될지 확신할 수 없기 때문입니다. 그런데 그 목적과 특성으로 인해 /proc에 바인딩할 필요가 없습니다(그렇지 않아야 합니까?).

  • /sys 및 /dev의 경우 다음을 선호합니다.

ㅏ:--rbind/sys /mnt/root1/sys (mount --rbind /dev /mnt/root1/dev)
왜냐하면 재귀적으로 마운트해야 하기 때문입니다(/sys 및 /dev의 하위 디렉토리도 걱정해야 합니다)

두번째:--make-rslave/mnt/root1/sys (mount --make-rslave /mnt/root1/dev)
귀하의 질문에 대해서는 이것이 핵심입니다.

하나 때문에슬레이브 마운트호스트로부터 전파를 수신하지만 그 반대는 아닙니다.제거하고이벤트는 해당쪽으로만 전파됩니다.

이 핵심 사항을 확인한 후에는 다음을 수행할 수 있어야 합니다.umount -R /mnt/root1/dev.

답변2

번들 설치가 왜 그렇게 바쁜가요?

/devchroot 내에서 마운트를 참조하는 데 바쁜 백그라운드 프로세스가 여전히 실행 중일 수 있습니다 . 으로 확인하세요 lsof.

해결책이 있나요?

해당 참조를 보유한 프로세스를 종료합니다 /dev.


나는 똑같은 문제 시나리오에 직면했습니다. chroot에서 dnf 명령을 실행하기 위해 라이브 CD로 부팅하고 하드 드라이브에서 루트 fs 파티션을 마운트했습니다. 완료되면 chroot를 종료하고 모든 바인드 마운트(/dev /proc /sys /run)를 마운트 해제했지만 dev 바인드 마운트가 마운트 해제를 거부했습니다.

(root) localhost-live: /media>dmesg | grep devtmpfs
[    0.592936] devtmpfs: initialized
(root) localhost-live: /media>mount | grep devtmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
devtmpfs on /media/luks_sda4/dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
(root) localhost-live: /media>umount /media/luks_sda4/dev
umount: /media/luks_sda4/dev: target is busy.
(root) localhost-live: /media>umount --force /media/luks_sda4/dev
umount: /media/luks_sda4/dev: target is busy.
(root) localhost-live: /media>fuser /media/luks_sda4/dev
/media/luks_sda4/dev:    25rc
(root) localhost-live: /media>ps aux | sed -n '1p; / 25 /p'
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          25  0.0  0.0      0     0 ?        S    05:44   0:00 [kdevtmpfs]
root        7984  0.0  0.0 222560  2304 pts/1    S+   07:58   0:00 sed -n 1p; / 25 /p
(root) localhost-live: /media>

해결책을 찾다가 발견한이 블로그 게시물lsof디렉터리에서 실행할 것을 권장 하고 문제가 어디에 있는지에 대한 매우 명확한 힌트를 제공합니다.

(root) localhost-live: /media>lsof luks_sda4
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh-agent 4007 root  cwd    DIR  253,2     4096    2 luks_sda4
ssh-agent 4007 root  rtd    DIR  253,2     4096    2 luks_sda4
(root) localhost-live: /media>

나는 가지고있다열쇠고리chroot를 설치하고 시작할 때 SSH 키의 비밀번호(일반)를 묻는 메시지가 표시됩니다. 분명히 ssh-agent 인스턴스의 일부로 백그라운드에서 시작되지만 chroot를 종료해도 종료되지는 않습니다.

이러한 지식을 바탕으로 개발 번들 설치를 제거하는 것은 간단합니다.

(root) localhost-live: /media>kill -HUP 4007
(root) localhost-live: /media>lsof luks_sda4
(root) localhost-live: /media>umount /media/luks_sda4/dev 
(root) localhost-live: /media>mount | grep devtmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
(root) localhost-live: /media>

관련 정보