it-swarm-ko.tech

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

때로는 umount /run/media/theDrivesb device를 마운트 해제하고 싶지만 drive is busy 오류가 발생합니다.

어떤 프로세스 또는 프로그램이 장치에 액세스하고 있는지 어떻게 알 수 있습니까?

70
Stefan

사용하다 lsof | grep /media/whatever를 사용하여 마운트를 사용중인 것을 찾으십시오.

또한 umount -l (lazy umount)-정리하는 동안 새 프로세스가 드라이브를 사용하지 못하게합니다.

70
Peter Eisentraut

대부분의 경우 가장 좋은 명령은 lsof (“ l i 입니다. s t o f iles”).

lsof +f -- /media/usb0

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

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

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

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

fuser -m /media/usb0

파일 열기

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

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

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

losetup -la

익명의 inode (Linux)

익명 inodes 는 다음과 같이 만들 수 있습니다 :

  • 임시 파일 (open with O_TMPFILE)
  • inotify 시계
  • [eventfd]
  • [이벤트 폴]
  • [timerfd]

가장 어려운 유형의 포켓몬이며 lsofTYPE 열에 a_inode ( lsof 맨 페이지에 설명되어 있지 않음)로 표시됩니다. ).

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

lsof | grep a_inode

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

inotify 시계 (Linux)

이 주석inotifyshould n't 마운트 해제를 방지하는 이유를 설명하지만 이 쪽 상황을 설명합니다 = will :

마운트 해제는 vx_softcnt_flush() 호출에서 중단 될 수 있습니다. inotify 시계가 i_count 변수를 증가시키고 inotify 감시자가 보류를 해제 할 때까지 v_os_hold value가 상승 된 상태로 유지되므로 정지가 발생합니다.

9
Tom Hale

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

fuser -Mk /mnt/path
umount /mnt/path
8
pioto

그놈을 사용하는 경우 노틸러스를 통해 마운트 해제하면 어떤 프로세스가 여전히 드라이브를 사용하고 있는지와 사용중인 파일을 나타내는 메시지가 표시됩니다.

alt text

5
tshepang

(적어도) 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가이 두 개의 make 프로세스 실행을 완료 할 때까지 _pbuild를 마운트 해제 할 수 없습니다.

1
Kusalananda