Programing

Linux : umount를 수행 할 때 어떤 프로세스가 "장치 사용 중"을 유발합니까?

crosscheck 2020. 11. 3. 07:38
반응형

Linux : umount를 수행 할 때 어떤 프로세스가 "장치 사용 중"을 유발합니까?


Linux : umount를 수행 할 때 어떤 프로세스가 "장치 사용 중"을 유발합니까?


상기 봐 lsof를의 명령 (목록 열려있는 파일) -이 프로세스가 무엇인지가 열려 유지하는 당신에게 말할 수 있습니다. 때로는 까다 롭지 만 종종 sudo lsof | grep (your device name here)당신을 위해 할 수 있는 것처럼 간단한 것입니다.


만일을 대비해 ... 때때로 터미널에서 umount를 호출하고 현재 디렉토리가 마운트 된 파일 시스템에 속합니다.


fuser 명령을 사용해야합니다 .

예 : fuser /dev/cdrom를 사용하여 프로세스의 pid (s)를 반환합니다 /dev/cdrom.

마운트 해제를 시도하는 경우 -k스위치를 사용하여 이러한 프로세스를 종료 할 수 있습니다 (참조 man fuser).


"losetup -a"를 사용하여 파일 시스템의 파일에 매핑 된 개방 루프 장치를 확인합니다. lsof 또는 fuser로 표시되지 않습니다.


또한 확인하십시오 /etc/exports. NFS를 통해 마운트 지점 내 경로를 내보내는 경우 마운트 해제를 시도 할 때이 오류가 발생하고 fuser또는에 아무것도 표시되지 않습니다 lsof.


lsof +f -- /mountpoint

(/ mountpoint에 마운트 된 마운트의 파일을 사용하는 프로세스를 나열합니다. 특히 마운트 된 USB 스틱 또는 CD / DVD를 사용하는 프로세스를 찾는 데 유용합니다.


lsof와 fuser는 실제로 특정 파일을 열어 두는 프로세스를 찾는 두 가지 방법입니다. umount가 성공하도록하려면 -f 및 -l 옵션을 조사해야합니다.


이것이 바로 "fuser -m / mount / point"가 존재하는 이유입니다.

BTW, "fuser"또는 "lsof"가 커널 모듈이 리소스를 보유하는시기를 나타내지는 않는다고 생각합니다. 일반적으로 그 문제는 발생하지 않습니다.


lsof와 퓨저도 나에게 아무것도주지 않았다.

가능한 모든 디렉토리의 이름을 .old로 바꾸고 변경할 때마다 시스템을 재부팅하는 과정을 거친 후 책임이있는 특정 디렉토리 (접미사 관련)를 찾았습니다.

SDCARD 기반 루트 파일 시스템 (Sheeva Plug)에서 디스크 쓰기를 최소화하기 위해 / var / spool / postfix에서 / disk2 / pers / mail / postfix / varspool로 심볼릭 링크를 만든 적이 있습니다.

이 심볼릭 링크를 사용하면 postfix 및 dovecot 서비스를 중지 한 후에도 (ps aux 및 netstat -tuanp 모두 관련 항목을 표시하지 않음) / disk2 / pers를 마운트 해제 할 수 없습니다.

심볼릭 링크를 제거하고 / disk2 / pers /의 새 디렉토리를 직접 가리 키도록 postfix 및 dovecot 구성 파일을 업데이트했을 때 성공적으로 서비스를 중지하고 디렉토리를 마운트 해제 할 수있었습니다.

다음 번에는 다음의 결과를 더 자세히 살펴 보겠습니다.

ls -lR /var | grep ^l | grep disk2

위의 명령은 디렉토리 트리 (여기서는 / var에서 시작)에있는 모든 심볼릭 링크를 반복적으로 나열하고 특정 대상 마운트 지점 (여기서는 disk2)을 가리키는 이름을 필터링합니다.


파일 열기

열린 파일이있는 프로세스가 일반적인 범인입니다. 표시 :

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 는 다음을 통해 만들 수 있습니다.

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

이들은 가장 애매한 유형의 포켓몬이며 lsofTYPE열에 다음과 같이 표시됩니다 a_inode( lsofman 페이지에 문서화되지 않음).

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

lsof | grep a_inode

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


열려있는 파일이있는 모든 서비스 및 프로세스를 중지 한 후에도 장치를 마운트 해제하거나 다시 마운트 할 수없는 경우 장치를 계속 사용하는 스왑 파일 또는 스왑 파티션이있을 수 있습니다. 이것은로 표시되지 않습니다 fuserlsof. 다음으로 스와핑 끄기 :

sudo swapoff -a

미리 확인하고 다음을 사용하여 스왑 파티션 또는 스왑 파일의 요약을 표시 할 수 있습니다.

swapon -s

또는:

cat /proc/swaps

As an alternative to using the command sudo swapoff -a, you might also be able to disable the swap by stopping a service or systemd unit. For example:

sudo systemctl stop dphys-swapfile

or:

sudo systemctl stop var-swap.swap

In my case, turning off swap was necessary, in addition to stopping any services and processes with files open for writing, so that I could remount my root partition as read only in order to run fsck on my root partition without rebooting. This was necessary on a Raspberry Pi running Raspbian Jessie.


Filesystems mounted on the filesystem you're trying to unmount can cause the target is busy error in addition to any files that are in use. (For example when you mount -o bind /dev /mnt/yourmount/dev in order to use chroot there.)

To find which file systems are mounted on the filesystem run the following:

mount | grep '/mnt/yourmount'

To find which files are in use the advice already suggested by others here:

lsof | grep '/mnt/yourmount'

참고URL : https://stackoverflow.com/questions/624154/linux-which-process-is-causing-device-busy-when-doing-umount

반응형