어떤 프로세스가 장치 마운트 해제를 방해하는지 어떻게 알 수 있습니까?


답변:


57

사용 lsof | grep /media/whatever마운트를 사용하는 것을 알 수 있습니다.

또한 umount -l정리 중에 새 프로세스가 드라이브를 사용하지 못하도록 (lazy umount)도 고려 하십시오.


24
fuser -mv /path/to/mountpointmointpoint를 사용하여 프로세스를 찾기위한 더 읽기 쉬운 대안이 될 수 있습니다.
Riccardo Murri

@RiccardoMurri lsof | grep가 나를 위해 더 잘 작동합니다. fuser -mv관련없는 프로세스의 80+ 이상을 덤프하는 것 같습니다. 마운트 바인드 디렉토리를 사용하고 있습니다.
Ricky Boyce

1
umount -l위험 합니다. 대신 비어 mount -o bind 있는 모드 000디렉토리를 통해를 통해 정리하십시오 lsof +f -- /dev/device.
Tom Hale

35

대부분의 경우, 사용하는 가장 명령이다 함으로써 두가지 ( " L I S t OF의 세틸").

lsof +f -- /media/usb0

여기서 /media/usb0마운트 해제 할 USB 드라이브 또는 기타 파일 시스템의 마운트 지점입니다. +f --lsof에게 후속 인수를 마운트 포인트로 처리하도록 지시합니다. 항상 그런 것은 아니지만 일반적으로 자체적으로 관리되므로 lsof /media/usb0작동합니다. 열린 파일 (연결되지 않은 파일도 포함), 메모리 매핑 된 파일, 현재 디렉토리 및 더 모호한 용도를 찾습니다. 다른 사용자의 프로세스에 대한 정보를 얻으려면 명령을 루트로 실행해야합니다. 루트로 실행해야하는 유니스가 있다고 생각 lsof합니다.

lsof가 찾지 못하는 용도가 있습니다. 이동식 미디어에서는 일반적이지 않습니다. 그들은 다음을 포함합니다 :

  • 마운트 포인트 : 마운트 포인트 인 /foo경우 마운트 해제 할 수 없습니다 /foo/bar.
  • 마운트 장치 : 당신은 마운트 해제 할 수없는 /foo경우 /foo/bar마운트 블록 장치 또는 루프에 장착 된 일반 파일, 또는 그것이 리눅스 바인딩의 소스 인 경우 마운트합니다.
  • NFS 내보내기 : lsof는 커널 NFS 서버가 트리를 내 보낸 것을 감지하지 못합니다.

핀치에서 사용할 수있는 또 다른 명령은 장치에서 열린 파일이있는 프로세스의 PID 만 나열하는 퓨저입니다.

fuser -m /media/usb0

8

lsofPeter가 말한 것처럼 사용할 수 있거나 모든 것을 죽이고 마운트 해제하려는 경우 다음과 같은 작업을 수행 할 수 있습니다.

fuser -Mk /mnt/path
umount /mnt/path

1
이 작업을 수행하려면 -M안전 을 위해 사용하십시오 .
Tom Hale

@TomHale 어떤 명령 -M을 적용해야하는지 명확히하고 싶을 수 있습니다 .
HSchmale

1
fuser: -M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Tom Hale

6

파일 열기

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

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>/

루프백 마운트의 경우 ( Stephen Kitt 덕분에 ) 다음의 출력도 확인하십시오.

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)을 참조하십시오 .

inotify 시계 (Linux)

이 코멘트는 이유를 설명 inotify 하지 말아야 마운트 해제를 방지하지만, 이 메모가 있는이 상황에 대해 설명 됩니다 :

마운트 해제로 인해 vx_softcnt_flush()통화 가 중단 될 수 있습니다 . inotify 시계가 i_count변수를 증가 v_os_hold value시키고 inotify 감시자가 보류를 해제 할 때까지가 상승 상태를 유지 하기 때문에 정지가 발생합니다 .


또 하나의 루프백 마운트가 있습니다. 파일 시스템을 마운트 한 다음 루프백 마운트를 사용하여 해당 파일 시스템에 파일을 마운트하면 첫 번째 파일 시스템을 마운트 해제 할 수 없지만에 아무것도 표시되지 않습니다 lsof.
Stephen Kitt

건배. Mountpoints섹션에 추가되었습니다 .
Tom Hale

5

그놈을 사용하는 경우 노틸러스를 통해 마운트 해제하면 아직 프로세스를 사용중인 프로세스와 사용중인 파일을 나타내는 메시지가 표시됩니다.

대체 텍스트


1

(적어도) OpenBSD의 경우 :

$ fstat /mnt/mountpoint

예를 들어 ( 그렇지 않으면 우리 자신의 프로세스 만 볼 때 루트로 doas실행 하는 데 사용 fstat) :

$ doas fstat /usr/ports
USER     CMD          PID   FD MOUNT        INUM MODE         R/W    SZ|DV NAME
_pbuild  make       15172   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/
_pbuild  make       40034   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/

이 경우 /usr/ports사용자 _pbuild가 두 make프로세스 실행을 완료 할 때까지 마운트 해제 할 수 없습니다 .


-2

이것은 일반적인 함정입니다. 다른 사용자 (루트 또는 다른 사용자)에게 su를하고 마운트 된 장치의 디렉토리로 변경 한 다음 해당 사용자로 로그 아웃하십시오. 해당 디렉토리에 남아 있음을 잊었을 때 맹인이 될 때까지 시도하고 찾을 수 있습니다. lsof현재 디렉토리에서 해당 장치를 사용중인 쉘을 표시합니다. 디렉토리를 변경하기 위해 해당 사용자로 다시 su를 원할 수 있습니다.


2
이 답변은 불완전하거나 정확하지 않습니다. 확실하지 않기 때문에 확실하지 않습니다.
hildred
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.