it-swarm-ko.tech

umount : 장치가 사용 중입니다. 왜?

umount /path를 실행하면 다음과 같은 결과가 나타납니다.

umount: /path: device is busy.

파일 시스템이 엄청 나서 lsof +D /path는 현실적인 옵션이 아닙니다.

lsof /path, lsof +f -- /pathfuser /path는 모두 아무 것도 반환하지 않습니다. fuser -v /path는 다음을 제공합니다.

                  USER        PID ACCESS COMMAND
/path:            root     kernel mount /path

이것은 사용하지 않는 마운트 된 파일 시스템에 모두 정상입니다.

umount -lumount -f는 제 상황에 충분하지 않습니다.

커널이 왜이 파일 시스템이 사용 중이라고 생각하는지 어떻게 알 수 있습니까?

186
Ole Tange

내 문제의 원인은 nfs-kernel-server가 디렉토리를 내보내는 것 같습니다. nfs-kernel-server는 보통 열려있는 파일 뒤에있을 것이므로 lsoffuser에 나열되지 않습니다.

nfs-kernel-server를 중지하면 디렉토리를 umount 할 수있었습니다.

지금까지 모든 솔루션의 예제가있는 페이지를 만들었습니다 : http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html

149
Ole Tange

위의 BruceCrancomment 에 추가하기 위해,이 문제가 나타난 이유는 stale 루프백 마운트. 이미 fuser -vm <mountpoint>/lsof +D <mountpoint>, mountcat /proc/mounts의 출력을 확인했으며 일부 오래된 nfs-kernel-server가 실행 중인지 확인했습니다. 할당량은 umount -f <mountpoint>를 시도했지만 실패했지만 924 일의 가동 시간을 포기하고 최종적으로 losetup의 출력을 확인하고 두 가지 오래된 구성되었지만 마운트되지 않은 루프백을 찾기 위해 나 자신을 사임했습니다.

parsley:/mnt# cat /proc/mounts 
rootfs / rootfs rw 0 0
none /sys sysfs rw,nosuid,nodev,noexec 0 0
none /proc proc rw,nosuid,nodev,noexec 0 0
udev /dev tmpfs rw,size=10240k,mode=755 0 0
/dev/mapper/stuff-root / ext3 rw,errors=remount-ro,data=ordered 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=755 0 0
usbfs /proc/bus/usb usbfs rw,nosuid,nodev,noexec 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,gid=5,mode=620 0 0
fusectl /sys/fs/Fuse/connections fusectl rw 0 0
/dev/dm-2 /mnt/big ext3 rw,errors=remount-ro,data=ordered,jqfmt=vfsv0,usrjquota=aquota.user 0 0

그때

parsley:/mnt# fuser -vm /mnt/big/
parsley:/mnt# lsof +D big
parsley:/mnt# umount -f /mnt/big/
umount2: Device or resource busy
umount: /mnt/big: device is busy
umount2: Device or resource busy
umount: /mnt/big: device is busy

parsley:/mnt# losetup -a    
/dev/loop0: [fd02]:59 (/mnt/big/dot-dropbox.ext2)
/dev/loop1: [fd02]:59 (/mnt/big/dot-dropbox.ext2)

parsley:/mnt# losetup -d /dev/loop0
parsley:/mnt# losetup -d /dev/loop1
parsley:/mnt# losetup -a
parsley:/mnt# umount big/
parsley:/mnt#

- 젠투 포럼 게시물 은 또한 스왑 파일을 잠재적 인 범인으로 나열합니다. 요즘에는 파일로 바꾸는 것이 매우 드물지만 cat /proc/swaps의 출력을 확인하는 것은 아프지 않습니다. 할당량이 마운트 해제를 막을 수 있는지 잘 모르겠습니다. 빨대에 꽉 쥐고있었습니다.

42
ZakW

Lsof를 사용하여 파일 시스템을 크롤링하는 대신 열린 파일의 전체 목록을 사용하여 grep하십시오. 정확성은 떨어지지 만이 반품이 더 빨라야한다는 것을 알았습니다. 작업이 완료되어야합니다.

lsof | grep '/path'
24
Caleb

나에게 문제가되는 프로세스는 chroot에서 실행되는 데몬이었습니다. chroot에 있었기 때문에 lsoffuser에서 찾지 못했습니다.

Chroot에 남아있는 것이 있다고 생각되면 Sudo ls -l /proc/*/root | grep chroot는 범인을 찾습니다 ( "chroot"를 chroot의 경로로 바꿉니다).

23
cibyr

파일 열기

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

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)

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

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

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

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

lsof | grep a_inode

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

11
Tom Hale

퓨저가 마운트를 열어 둔 PID에 대해보고하려면 -m을 사용해야합니다.

fuser -m /path
5
Patrick

루트 파일 시스템이 일반적으로 읽기 전용 인 독점 시스템이 있습니다. 때로는 파일을 복사해야 할 때 읽기-쓰기로 다시 마운트됩니다.

mount -oremount,rw /

그런 다음 다시 장착했습니다.

mount -oremount,ro /

그러나 이번에는 mount에서 mount: / is busy 오류가 계속 발생했습니다. 파일 시스템이 읽기/쓰기 일 때 실행 된 일부 명령에 의해 대치 인 파일에 열린 디스크립터를 보유하는 프로세스로 인해 발생했습니다. lsof -- / 출력의 중요한 행은 다음과 같습니다 (이름이 변경됨).

replicate  1719 admin DEL REG 8,5  204394 /opt/gns/lib/replicate/modules/md_es.so

출력에서 DEL에 주목하십시오. 삭제 된 파일을 보류 한 프로세스를 다시 시작하면 문제가 해결되었습니다.

5
pdp

lsoffuser도 나에게 아무것도주지 않았습니다.

가능한 모든 디렉토리의 이름을 .old로 바꾸고 시스템을 재부팅 할 때마다 변경 한 후 시스템을 다시 부팅 한 후 담당 한 특정 디렉토리 (postfix 관련)를 찾았습니다.

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

이 심볼릭 링크를 사용하면 postfixdovecot 서비스를 중지 한 후에도 ps auxnetstat -tuanp은 (와) 관련이 없습니다) unmount /disk2/pers을 (를) 할 수 없습니다.

Symlink를 제거하고 /disk2/pers/의 새 디렉토리를 직접 가리 키도록 postfixdovecot 구성 파일을 업데이트하면 서비스 및 unmount 디렉토리.

다음에 나는 다음의 결과를보다 자세히 살펴볼 것이다

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

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

4
captcha

나는이 문제가 있었고, 내가 알지 못하는 백그라운드에서 활성 스크린 세션이있는 것으로 판명되었습니다. 다른 활성 화면 세션에 연결했는데 쉘이 현재 마운트 된 디렉토리에 있지 않았습니다. 다른 셸 세션을 종료하면 문제가 해결되었습니다.

내 결의안을 공유 할 줄 ​​알았는데.

3
colemanm

마운트를 차단하고있는 마운트 아래에 bindoverlay 마운트가 몇 개 있습니다. 마운트 해제하려는 마운트 포인트에 대한 탭 완성을 확인하십시오. 특히 오버레이 마운트라고 생각하지만 바인드 일 수도 있습니다.

1
ThorSummoner

이것은 답변보다 해결 방법이지만 더 도움이 될 수 있도록 게시하고 있습니다.

필자의 경우/var 파티션을 더 크게 만들고 싶을 때 LVM을 수정하려고 했으므로 마운트 해제해야했습니다. 이 게시물에서 모든 의견을 작성하고 답변했습니다 (모두에게 감사드립니다. 특히 @ ole-tange에게 감사드립니다).

주문이 내 경우와 관련이있는 경우를 대비하여 0 런 레벨에 지정된 순서대로 대부분의 프로세스를 종료하려고 시도했지만 도움이되지 않았습니다. 그래서 내가 한 것은 사용자 정의 런레벨 (chkconfig의 출력을 새로운 chkconfig --level 명령으로 결합)을 생성하는 것이 었습니다 .1 (단일 사용자 모드)와 매우 유사하지만 네트워크 기능 (ssh 네트워크 및 xinet 사용)과 비슷합니다.

Redhat을 사용하면서 runlevel 4는 "unused/user defined"로 표시되어 있으므로이를 사용하여 init 4 제 경우에는 서버를 다시 부팅해야했기 때문에 문제가 없었지만 아마도 디스크를 조정하는 사람 일 것입니다.

1
Gabriel Xunqueira

오늘날 문제는 개방형 소켓 (특히 tmux)이었습니다.

mount /mnt/disk
export TMPDIR=/mnt/disk
tmux
<<detatch>>
umount /mnt/disk
umount: /mnt/disk: device is busy.
lsof | grep /mnt/disk
tmux      20885             root    6u     unix 0xffff880022346300        0t0    3215201 /mnt/disk/tmux-0/default
1
Ole Tange