sshfs 장치가 사용 중입니다


30

sshfs (버전 2.8.4)를 사용하여 원격 파일 시스템을 마운트했습니다.

sshfs -o allow_root joeuser@example.com: ./example

그러나 마운트 해제가 실패합니다

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

이 오류의 원인 및 해결 방법에 대한 아이디어가 있습니까?

답변:


14

일부 프로그램이 마운트 해제하려는 파일 시스템에서 파일을 사용하고 있습니다. 읽기 또는 쓰기를 위해 열린 파일, 현재 디렉토리 또는 몇 가지 더 모호한 경우 일 수 있습니다. 파일 시스템의 디렉토리가 마운트 지점 일 수도 있습니다.

조사하려면을 실행하십시오 lsof +f -- example. 프로세스가 파일 시스템을 사용하는 것을 알려줍니다. 파일을 닫을 것인지, 죽일 것인지, 마운트 해제 작업을 연기 할 것인지에 대해 스스로 판단하십시오.


이상하게도 lsof는 gvfsd-archive 프로세스를 보여주지 않았는데, 이는 파일 관리자 GUI에서 아카이브 파일을 열거 나 닫지 않은 채 남았습니다. 또한 확인하십시오 ps aux | grep gvfsd-archive.
alexei

lstat가 실행할 수없고 정보가 불완전하며 범인을 나열하지 않았다는 경고를 제공했습니다. 필자의 경우 마운트 된 디렉토리 안에 작업 디렉토리가있는 터미널을 열었습니다.
Jānis Elmeris

36

게으른 마운트 해제를 원한다고 생각합니다.

sudo umount -l example

1
귀하의 제안이 잘못되었다고 생각합니다. 매뉴얼 페이지 게으른 umount에 따르면 Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymore. 따라서 원래 문제는 해결되지 않습니다. @Gilles와 동의 lsof하면 여기에서 도움이 될 것입니다.

2
실제로 이것은 나를 위해 일했습니다. lsof가 열려있는 파일을 찾지 못했지만 umount -l효과가있었습니다.
gerrit

1
이 솔루션은 저에게도 효과적이었습니다!
Dan

1
sshfs와 동일한 문제가 발생하여 나에게도 효과가있었습니다.
Orun

4

방금이 문제가 있었고 kill -9마운트 된 파일 시스템에서 프로세스를 읽을 수 없었 습니다. 또는 kill -9후에도 작동하지 않았습니다 . 작동 한 유일한 것은이었습니다 .fusermount -zu /mount/pointumount -l /mount/pointpkill -9 sshfs


1
fusermount -zu /mount/point나를 위해 일했다. 감사!
ostrokach

3

Ubuntu를 실행 하면“lazy unmount”로 문서화 man fusermount-z옵션 에 대해 알려줍니다 . 관련이있는 것 같지만 확인이 필요합니다.이 다른 매뉴얼 페이지 : fusermount (man.he.net) . "lazy unmount (자원이 여전히 바쁘더라도 작동합니다)". 하나는 그것을 사용해야 -u-z오류가 발생합니다, 혼자 옵션을 선택합니다. -z옵션을 사용해 보았지만 트릭을 수행한다는 것을 확인할 수는 있지만 너무 정확하게 트릭처럼 보입니다. 정확히 무엇을합니까? 디렉토리가 더 이상 사용 중이 아닌 즉시 자동으로 마운트 해제 하시겠습니까? 나는 문서화되지 않았으므로 안전하지 않습니다.

여기에 좀 더 장황하지만 더 안전한 또 다른 옵션이 있습니다. 필요할 때마다 루프에서 성공할 때까지 마운트 해제를 시도합니다.

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

최소한의 진행 피드백이 있으므로 진행 상황을 알고 있으며 중단되었다고 믿지 않습니다.

이 옵션은 쉘 스크립트에서 허용됩니다. 명령 줄 상호 작용의 경우 -z옵션을 사용하는 것이 더 편리하지만 매뉴얼 페이지에 문서가 포함되어 있지 않으며 정확히 무엇을하는지 의심 될 수 있습니다.


2

터미널 창이 sshfs 공유의 디렉토리에 열려있을 때 sshfs와 함께 "장치 사용 중"이 자주 나타납니다. 터미널을 종료하거나 디렉토리를 로컬 공유로 변경 한 다음 fusermount -u를 실행하면 문제가 해결됩니다.


1

OS X에서는 다음을 시도하십시오.

diskutil unmount force /mount/point

1

이 경우 이미 확보 시도하기 전에 어떤 프로세스가 계속 파일 시스템을 사용하지 않습니다 "일반"언 마운트 :

  • fuser -vm /mount/point 그리고 / 또는
  • lsof /mount/point 그들을 찾기 위해
  • /mount/point더 이상 사용하지 않도록 quit / kill / do_something_with_them ,

시험:

  • pkill -KILL sshfs 그리고
  • fusermount -u /mount/point.

네트워크 연결이 끊어졌을 때 응답하지 않았으며 응답하지 않는 sshfs 마운트 지점을 마운트 해제 할 수 없었습니다.

또한 네트워크 연결이 끊어졌을 때 sshfs가 자동으로 마운트 해제되어 sshfs를 사용하여 I / O 오류를 응용 프로그램에 알리면 무한히 멈추지 않도록 다음과 같이 마운트하십시오.

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

데이터가 교환되지 않으면 ssh클라이언트는 서버로부터 응답을받을 수 있는지 15 초마다 확인합니다. 3 개의 점검이 실패하면 연결이 끊어지고 마운트 해제됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.