Sshfsを使用してリモートファイルシステムをマウントしました(バージョン2.8.4)
sshfs -o allow_root [email protected]: ./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))
このエラーの原因となるものと、それを修正する方法に関するアイデアはありますか?
アンマウントしようとしているファイルシステムのファイルを使用しているプログラムがあります。これは、読み取りまたは書き込みのために開かれたファイル、現在のディレクトリ、またはいくつかのあいまいなケースである可能性があります。ファイルシステム上のディレクトリがマウントポイントである可能性もあります。
調査するには、lsof +f -- example
。プロセスがファイルシステムを使用していることを通知します。ファイルを閉じるか、強制終了するか、アンマウント操作を延期するかについては、ご自身で判断してください。
遅延アンマウントが必要だと思います。
Sudo umount -l example
私はこの問題を抱えていて、マウントされたファイルシステムから読み取るプロセスをkill -9
できませんでした。 kill -9
は、fusermount -zu /mount/point
またはumount -l /mount/point
(正常に機能)の後でも機能しませんでした。機能したのはpkill -9 sshfs
だけでした。
Ubuntuを実行している場合、man fusermount
は-z
オプションについて通知します。これは「レイジーアンマウント」として文書化されています。これは関連しているようですが、確認が必要です。これは、この別のマンページ fusermount(man.he.net) によって提供されます。これは、「レイジーアンマウント(リソースはまだビジーです。」使用する必要がありますwith-u
、-z
オプションのみでは、エラーが発生します。私は-z
オプションを試しましたが、それがトリックを実行することを確認できますが、これは正確にトリックのように見えます。正確に何をするのですか?ディレクトリがビジー状態でなくなり次第、自動的にマウント解除しますか?私にはわかりません、文書化されていないので、安全ではありません。
したがって、もう1つのオプション、より詳細ですがより安全です。ループ内で必要な回数だけ成功するまでアンマウントを試みます。
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
オプションを使用する方が便利ですが、manページにはドキュメントが記載されておらず、正確に何が行われているのか疑問があるかもしれません。
ターミナルウィンドウでsshfs共有上のディレクトリを開いていると、sshfsで「デバイスがビジー」になることがよくあります。端末を終了するか、ディレクトリをローカル共有に変更してからfusermount -uを実行すると、問題が解決します。
OS Xで試してください:
diskutil unmount force /mount/point
すでに確認済みの場合、「通常の」アンマウントを試みる前に、ファイルシステムを使用しているプロセスはありません。
fuser -vm /mount/point
および/またはlsof /mount/point
それらを見つけるには、/mount/point
を使用しないようにします。試してみる
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つのチェックが失敗すると、接続が解除され、マウントが解除されます。