チェックする方法はでfuser -vm /mnt/dir
、これはルートとして実行する必要があります。どのプロセスがマウントポイントにアクセスしているかがわかります。
別の方法lsof /mnt/dir
として、マウント上で開いている各ファイルを表示します。再びルートとして実行するのが最適です。
これらのいずれかを非ルートとして実行できますが、出力はプロセスに限定されます。他のユーザーからのファイルは、ファイルシステムのアンマウントができなくても静かに表示されません。
例:
Watt:~# fuser -vm /mnt/Zia/src
USER PID ACCESS COMMAND
/mnt/Zia/src: root kernel mount /mnt/Zia/src
anthony 24909 ..c.. bash
anthony 25041 F.c.. gvim
「アクセス」フィールドは、そのアクセス方法を示します。この場合、カーネルはそれをマウントとして使用しています(しかし、これだけでアンマウントは可能です)。bash
これを現在の作業ディレクトリとして(cd
アンマウントする前に別のディレクトリに移動する必要があります)、gvimは現在のディレクトリとファイルを開いています(そのgvimを閉じる必要があります)。
Watt:~# lsof /mnt/Zia/src
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 24909 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony cwd DIR 0,26 12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim 25041 anthony 6u REG 0,26 16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)
この出力では、bashとgvim(タイプとしてDIR
)の両方の現在のディレクトリを確認できます。gvimが書き込み用に開いているファイルも確認できます。
問題を強制する方法:
fuser
マウントを使用して各プロセスに-k
シグナル(デフォルト:)を送信するオプションがありますSIGKILL
。これは、マウントがビジー状態にならないようにするかなり強力な方法です。(そしてもちろん、あなたは何に注意してくださいSIGKILL
!)
umount
-l
遅延アンマウントを実行するオプションがあります。マウントはファイルシステムの名前空間から削除されます(したがって/mnt/Zia/src
、この例では表示されなくなります)が、マウントされたままなので、それにアクセスするプログラムは引き続き実行できます。最後にアクセスするプログラムが終了すると、実際にアンマウントが行われます。
アンマウントに失敗する最後の修正可能な原因が1つあり、それはNFSサーバーのダウンです。ここではを使用できますが、使用するumount -f
とデータ損失のリスクがあります。(クライアントは、サーバーによってまだ確認されていない書き込みをキャッシュしている可能性があり、それらの書き込みは破棄されます。ただし、アプリは書き込みが成功したことを既に通知されています。)