Umount에서 사용중인 장치


41

디렉토리를 마운트 해제하는 데 종종 문제가 발생합니다.

umount / mnt / dir
umount : / mnt / dir : 장치가 사용 중입니다

장치가 사용중인 이유는 여러 가지가 있습니다. 때때로 열린 잠금이있는 프로세스가 실행 중이거나 위에 다른 디렉토리가 마운트되어있을 수 있습니다 /mnt/dir.

내 질문:

디렉토리를 마운트 해제 할 수없는 이유를 확인하는 단계는 무엇입니까?

여러 가지 이유가 있다는 것을 알고 있지만 특정 솔루션을 설명해도 괜찮습니다.

[편집하다]

[X] 마운트 된 볼륨에서 프로세스 실행
[X] 마운트 해제하려는 볼륨 위에 다른 볼륨이 마운트되었습니다.
[_] NFS 마운트 해제하려는 볼륨을 잠급니다.


답변:


75

확인하는 방법 fuser -vm /mnt/dir은 루트로 실행해야합니다. 마운트 지점에 액세스중인 프로세스를 알려줍니다.

다른 방법은 lsof /mnt/dir마운트에서 열린 각 파일을 표시하는 것입니다. 다시 루트로 실행하는 것이 가장 좋습니다.

이들 중 하나를 루트가 아닌 것으로 실행할 수 있지만 출력은 프로세스로 제한됩니다. 다른 사용자의 파일은 파일 시스템 마운트 해제를 방해하더라도 자동으로 표시되지 않습니다.

예:

Watt:~# fuser -vm /mnt/Zia/src
                     USER        PID ACCESS COMMAND
/mnt/Zia/src:        root     kernel mount /mnt/Zia/src
                     anthony   24909 ..c.. bash
                     anthony   25041 F.c.. gvim

"액세스"필드는 액세스 방법을 알려줍니다. 이 경우 커널은 마운트로 사용하고 있습니다 (duh, 그러나 이것으로 만 마운트 해제는 정상입니다). bash현재 작업 디렉토리로 설정하고 ( cd언 마운트하기 전에 다른 디렉토리로 가져와야 함) gvim은 현재 디렉토리를 가지고 있으며 파일이 열려 있습니다 (그 gvim을 닫아야합니다).

Watt:~# lsof /mnt/Zia/src
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    24909 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony    6u   REG   0,26    16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)

이 출력에서 ​​bash 및 gvim의 현재 디렉토리를 유형으로 볼 수 있습니다 DIR. gvim이 쓰기 위해 연 파일을 볼 수도 있습니다.

문제를 해결하는 방법 :

fuser있다 -k: 신호 (기본 보내드립니다 옵션 SIGKILL(가) 마운트 사용하여 각 프로세스를). 이것은 마운트가 사용 중지되는 것을 막는 다소 강력한 방법입니다. (물론 조심하십시오 SIGKILL!)

umount-l게으른 마운트 해제를 수행 할 수있는 옵션을 선택합니다. 마운트는 파일 시스템 네임 스페이스에서 제거되므로 ( /mnt/Zia/src이 예에서는 더 이상 표시되지 않음 ) 마운트 상태를 유지하므로 액세스하는 프로그램이 계속 그렇게 할 수 있습니다. 마지막으로 액세스 한 프로그램이 종료되면 마운트 해제가 실제로 발생합니다.

마운트 해제 실패의 최종 수정 가능한 원인이 하나 있으며 이는 NFS 서버가 다운되는 것입니다. 여기서는 사용할 수 umount -f있지만 그렇게하면 데이터가 손실 될 위험이 있습니다. (클라이언트가 서버에서 아직 확인하지 않은 쓰기를 캐시했을 수 있으며 해당 쓰기는 버려집니다. 그러나 이미 쓰기가 성공했다고 앱에 알려졌습니다.)


4
참고 fuser -k이다 매우 루트로 그 일을 할 것 같은 위험하고 당신이하지 않으면 매우 당신이 ... 부주의 명령과 함께 진정으로 아름다운 피해를 할 수 떨어져있는 프로세스가 살해 될 것입니다
Shadur

1
@Shadur는 -k옵션 없이 이미 실행 했으므로 어떤 프로세스를 종료할지 알 수 있습니다. 그러나 경고를 추가하겠습니다.
derobert

1
fuser -vm"커널 마운트"를 보여주었습니다. systemctl stop opt.mountmanual 대신 해야 했습니다 umount.
lkraav

2
어떤 이유로 umount -f는 작동하지 않지만 umount -l을 실행하면 완벽하게 작동합니다.
Firze

umount -f및 NFS 에 대한 참고에 감사합니다 . 내 문제는 내 dev 시스템이 IP를 변경 한 NFS와 관련이 있었고 공유를 제거 할 수 없었습니다.
Eric

19

다음을 사용해야합니다.

sudo umount -l <path>

7
⁺¹, 나는 어리석은 사람이 그것을 어떻게 피할 수 있는지 전혀 모른다. 는 -l정확히 경우에도 사용할 수있는 옵션이 -f작동하지 않습니다.
Hi-Angel

@ Hi-Angel 이것은 OP가 요구하는 것이 아니기 때문에?
xhienne

@ xheinne 스택 교환은 단순히 스터드 봇과 같은 질문에 대답하는 것이 아니라이 답변이 도움이됩니다. 많은 사람들이 구글 검색에서 온다. 개인적으로 도움이되었습니다. op shoudl은 수락 버튼이있는 이유를 알았습니다.
user1735921

6

마운트 해제하려는 볼륨 위에 다른 볼륨이 마운트됩니다.

mount명령을 사용하면 인수 나 옵션 (제외 -v) 없이 호출 한 경우 마운트 된 모든 볼륨을 알 수 있습니다 . perl 비트를 추가하여 활성 마운트 포인트 목록을 가질 수 있습니다.

mount | perl -pe 's/.*on (\S+) type.*/\1/'

그런 다음 마운트를 해제하려는 시작점을 통해 grep하면이 파일 시스템에 마운트 된 파일 시스템이 있는지 알 수 있습니다.

mount | perl -pe 's/.*on (\S+) type.*/\1/' | grep '/mnt/dir/'

그런 다음 두 가지 솔루션이 있습니다. 파일 시스템을 마운트 해제하거나 mount --move olddir newdir(커널> 2.5.1)로 이동하십시오.


1
예, 고마워요 / etc / mtab 및 / proc / mounts도 가능합니다.

아 맞아, 나는 항상 그것들을 잊었다. "mount"를 입력하면 더 적은 문자가 필요하지만 (실행하기 위해 더 많은 리소스가 필요합니까?)
mveroone

1
랩톱의 특정 디렉토리에 "영구적으로"외부 USB 저장 장치가 마운트되어 있는데 실수로 케이블 연결이 끊어 질 수도 있습니다. 이 답변을 읽을 때까지 디렉토리에서 장치를 다시 마운트하는 것은 큰 고통이었습니다 ( "장치 사용 중"으로 인해). 이제 mount --move olddir newdir을 사용하는 것으로 알려져 있습니다. 감사.
Silvio Levy 2014

3

파일 열기

열린 파일이있는 프로세스가 일반적인 범인입니다. 그들을 표시하십시오 :

lsof +f -- <mountpoint or device>

사용하는 장점이있다 /dev/<device>보다는 /mountpoint마운트 지점이 후 사라집니다 : umount -l, 또는이 마운트 입혀진으로 숨겨져 될 수있다.

fuser사용할 수도 있지만 내 마음 lsof에는 더 유용한 출력이 있습니다. 그러나 fuser드라마의 원인이되는 프로세스를 중단하여 인생을 살아갈 수있는 경우에 유용합니다.

파일을 나열하십시오 <mountpoint>(위의 경고 참조).

fuser -vmM <mountpoint>

쓰기 위해 열린 파일이있는 프로세스 만 대화식으로 종료하십시오.

fuser -vmMkiw <mountpoint>

읽기 전용 ( mount -o remount,ro <mountpoint>)을 다시 마운트 한 후 나머지 모든 프로세스를 종료하는 것이 안전합니다 (r).

fuser -vmMk <mountpoint>

마운트 포인트

범인은 커널 자체가 될 수 있습니다. 파일 시스템에 마운트 된 다른 파일 시스템 umount이 슬픔을 일으킬 것입니다. 확인 :

mount | grep <mountpoint>/

루프백 마운트의 경우 다음 출력도 확인하십시오.

losetup -la

익명의 inode (Linux)

익명의 inode 는 다음과 같은 방법으로 만들 수 있습니다.

  • 임시 파일 ( openO_TMPFILE)
  • 시계를 inotify
  • [eventfd]
  • [이벤트 폴]
  • [timerfd]

다음은 포켓몬의 가장 어려운 유형과의 표시 lsofTYPE같은 열 a_inode합니다 (에 문서화되지 않은 lsof사람 페이지 ).

에 표시되지 lsof +f -- /dev/<device>않으므로 다음을 수행해야합니다.

lsof | grep a_inode

익명의 inode를 보유한 프로세스를 종료하려면 현재 inotify 시계 나열 (경로 이름, PID)을 참조하십시오 .


1

마운트 해제 할 디렉토리에 NFS가 액세스하는지 확인하는 방법에 대한 대답은 여전히 ​​그렇습니다.

내가 가진 것은 이것뿐입니다.

nfsd가 실행 중인지 확인하십시오.

pidof nfsd

클라이언트별로 마운트 된 디렉토리 표시 :

showmount -a

그리고 showmountw / 인수 쇼에만 클라이언트 호스트 오 그들은 오프라인 경우에도. 나는 이것이 NFS의 특별한 행동이라고 가정합니다.


1

나에게 문제는 ssh를 통해 두 번 이상 로그인했으며 로그인 중 하나에서 pwd가 마운트 지점 하위 폴더 안에있는 명령 프롬프트에 있다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.