Linux : umount를 수행 할 때 어떤 프로세스가 "장치 사용 중"을 유발합니까?
NFS
! 원하는 드라이브에서 모든 NFS 내보내기 또는 마운트 지점을 중지해야합니다 umount
. NFS는 lsof
또는 fuser
... 에 표시되지 않으므로 매우 까다 롭습니다!
Linux : umount를 수행 할 때 어떤 프로세스가 "장치 사용 중"을 유발합니까?
NFS
! 원하는 드라이브에서 모든 NFS 내보내기 또는 마운트 지점을 중지해야합니다 umount
. NFS는 lsof
또는 fuser
... 에 표시되지 않으므로 매우 까다 롭습니다!
답변:
상기 봐 lsof를의 명령 (목록 열려있는 파일) -이 프로세스가 무엇인지가 열려 유지하는 당신에게 말할 수 있습니다. 때로는 까다 롭지 만 종종 sudo lsof | grep (your device name here)
당신을 위해 할 수있는 간단한 일입니다.
lsof /mountpoint
대신lsof /mountpoint/
lsof +f /dev/device
mountpoint 대신 사용 하는 것이 유리합니다 . 해당 목록에도 표시되지 않을 수있는 익명의 inode가있는 커널 프로세스에 대해서도 동일합니다.
만일을 대비해 ... 때때로 터미널에서 umount를 호출하고 현재 디렉토리가 마운트 된 파일 시스템에 속합니다.
fuser
내가 믿는 이와 같은 현재 작업 디렉토리를 잡습니다.
fuser 명령을 사용해야합니다 .
예 : fuser /dev/cdrom
를 사용하여 프로세스의 pid (s)를 반환합니다 /dev/cdrom
.
마운트 해제를 시도하는 경우 -k
스위치를 사용하여 이러한 프로세스를 종료 할 수 있습니다 (참조 man fuser
).
fuser
는 때때로 lsof
그렇지 않은 것과 반대 되는 것을 보여줄 것입니다 . 그래서 당신은 하나 또는 다른 것을 할 수 없습니다!
"losetup -a"를 사용하여 파일 시스템의 파일에 매핑 된 개방 루프 장치를 확인합니다. lsof 또는 fuser로 표시되지 않습니다.
umount -l /data
나중에 마운트 해제 - FS 사라 - 실제로 일을 /dev/loop0
하고 /dev/loop1
잠시 동안 교수형. 하지만 지금은 괜찮은 것 같습니다. 그것이 알고 있었다 사람들을 돕기 때문에이 대답은 매우 중요 lsof
하고 fuser
연령대에 ...
/dev/loop0 /dev/loop1
루프 장치를 생성했습니다 . 내가 그들을 제거 할 수있는 유일한 방법 dmsetup ls
은 의심스러운 docker devicemapper 장치 docker-253 : 0-4291588-pool을 사용하여 장치를 나열하는 것 입니다. dmsetup remove docker-253:0-4291588-pool
깨끗하게 없애있어
또한 확인하십시오 /etc/exports
. NFS를 통해 마운트 지점 내 경로를 내보내는 경우 마운트 해제를 시도 할 때이 오류가 발생하고 fuser
또는에 아무것도 표시되지 않습니다 lsof
.
lsof +f -- /mountpoint
(/ mountpoint에 마운트 된 마운트의 파일을 사용하는 프로세스를 나열합니다. 특히 마운트 된 USB 스틱 또는 CD / DVD를 사용중인 프로세스를 찾는 데 유용합니다.
fuser
또는 표준에 나열되지 않았습니다 lsof
.
/dev/<device>
보다는 /mountpoint
같은 /mountpoint
애프터 사라집니다 umount -l
.
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)을 가리키는 이름을 필터링합니다.
find /var -lname *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 는 다음을 통해 생성 할 수 있습니다.
open
사용 O_TMPFILE
)이들은 가장 애매한 유형의 포켓몬이며 lsof
의 TYPE
열에 다음과 같이 표시됩니다 a_inode
( lsof
man 페이지에 문서화되지 않음).
에 표시되지 lsof +f -- /dev/<device>
않으므로 다음을 수행해야합니다.
lsof | grep a_inode
익명 inode를 보유한 프로세스를 종료하려면 현재 inotify 감시 목록 (경로 이름, PID)을 참조하십시오 .
열려있는 파일이있는 모든 서비스 및 프로세스를 중지 한 후에도 장치를 마운트 해제하거나 다시 마운트 할 수없는 경우 장치를 계속 사용하는 스왑 파일 또는 스왑 파티션이있을 수 있습니다. 이것은로 표시되지 않습니다 fuser
나 lsof
. 다음으로 스와핑 끄기 :
sudo swapoff -a
미리 확인하고 다음을 사용하여 스왑 파티션 또는 스왑 파일의 요약을 표시 할 수 있습니다.
swapon -s
또는:
cat /proc/swaps
명령을 사용하는 대신 sudo swapoff -a
서비스 또는 systemd 장치 를 중지하여 스왑을 비활성화 할 수도 있습니다 . 예를 들면 :
sudo systemctl stop dphys-swapfile
또는:
sudo systemctl stop var-swap.swap
필자의 경우에는 쓰기 위해 파일이 열려있는 서비스와 프로세스를 중지하는 것 외에도 스왑을 끄는 것이 필요했기 때문에 fsck
재부팅하지 않고 루트 파티션 에서 실행하기 위해 루트 파티션을 읽기 전용으로 다시 마운트 할 수있었습니다 . 이것은 Raspbian Jessie를 실행하는 Raspberry Pi에서 필요했습니다.
마운트 해제하려는 파일 시스템에 마운트 된 파일 시스템 target is busy
은 사용중인 파일 외에도 오류를 유발할 수 있습니다 . (예를 들어 거기 mount -o bind /dev /mnt/yourmount/dev
에서 사용하기 위해 chroot
.)
파일 시스템에 마운트 된 파일 시스템을 찾으려면 다음을 실행하십시오.
mount | grep '/mnt/yourmount'
사용중인 파일을 찾으려면 여기에서 다른 사용자가 이미 제안한 조언을 참조하십시오.
lsof | grep '/mnt/yourmount'