![/dev 바인드 마운트를 마운트 해제할 수 없습니다.](https://linux55.com/image/203273/%2Fdev%20%EB%B0%94%EC%9D%B8%EB%93%9C%20%EB%A7%88%EC%9A%B4%ED%8A%B8%EB%A5%BC%20%EB%A7%88%EC%9A%B4%ED%8A%B8%20%ED%95%B4%EC%A0%9C%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 라이브 디스크를 파티션당 하나의 rsync /dev/sdb
로 두 번째 디스크에 복사(시도)하는 스크립트를 만들었습니다 ./dev/sda
전체 스크립트).
마지막 단계는 에 grub을 설치하는 것입니다 /dev/sda
. 내가 사용하는 방법은 다음과 같습니다.
- /dev/sda 루트 파티션을 마운트합니다.
/mnt/root1
- /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
- chrooted를 실행
update-grub
하고grub-install
다음을 실행합니다/dev/sda
.
chroot /mnt/root1 update-grub
chroot /mnt/root1 grub-install /dev/sda
- 3개의 번들 설치 제거:
# umount /mnt/root1/sys
# umount /mnt/root1/proc
# umount /mnt/root1/dev
그러나 /mnt/root1/dev
umount가 실패합니다.
# 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
번들 설치가 왜 그렇게 바쁜가요?
/dev
chroot 내에서 마운트를 참조하는 데 바쁜 백그라운드 프로세스가 여전히 실행 중일 수 있습니다 . 으로 확인하세요 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>