回答:
を使用lsof | grep /media/whatever
して、マウントを使用しているものを見つけます。
また、umount -l
クリーンアップ中に新しいプロセスがドライブを使用しないように(レイジーアンマウント)を検討してください。
fuser -mv /path/to/mountpoint
mointpointを使用してプロセスを見つけるためのより読みやすい代替手段になる可能性があります。
lsof | grep
方がうまく機能します。fuser -mv
関連のないプロセスを80個以上ダンプしているようです。マウントバインドディレクトリを使用しています。
ほとんどの場合、使用するのに最適なコマンドはlsof(「l i s t o pen f iles」)です。
lsof +f -- /media/usb0
ここ/media/usb0
で、アンマウントするUSBドライブまたはその他のファイルシステムのマウントポイントです。+f --
後続の引数をマウントポイントとして扱うようlsofに指示します。常にではありませんが、通常はそれ自体で管理するため、これlsof /media/usb0
も機能します。これにより、開いているファイル(リンクされていないファイルも含む)、メモリマップファイル、現在のディレクトリ、その他のあいまいな使用が検出されます。他のユーザーのプロセスに関する情報を取得するには、rootとしてコマンドを実行する必要があります(そして、rootとして実行する必要のある大学があると思いますlsof
)。
lsofが見つけられない用途があります。これらは、リムーバブルメディアでは一般的ではありません。彼らが含まれます:
/foo
場合/foo/bar
、マウント解除できません。/foo
場合/foo/bar
は、マウント解除できません。ピンチで使用できるもう1つのコマンドはfuserです。これは、デバイス上で開いているファイルがあるプロセスのPIDのみをリストします。
fuser -m /media/usb0
lsof
ピーターが言ったように使用することができます。または、それらすべてを削除してアンマウントしたいだけであれば、おそらく次のようなことができます。
fuser -Mk /mnt/path
umount /mnt/path
-M
、安全のための使用を検討してください。
-M
を適用する必要があるかを明確にしたい場合があります。
fuser
: -M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
ファイルを開いているプロセスは、通常の原因です。それらを表示します。
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>/
ループバックマウントの場合(Stephen Kittに感謝)、次の出力も確認してください。
losetup -la
匿名iノードは次の方法で作成できます。
open
with O_TMPFILE
)これらは最もとらえどころのないタイプのポケモンであり、lsof
のTYPE
列にとして表示されますa_inode
(lsof
マニュアルページには記載されてい ません)。
には表示されないlsof +f -- /dev/<device>
ため、次のことを行う必要があります。
lsof | grep a_inode
匿名iノードを保持しているプロセスの強制終了については、「現在のinotifyウォッチのリスト(パス名、PID)」を参照してください。
inotify
ウォッチ(Linux)このコメントは、アンマウントを防ぐinotify
べきではない理由を説明していますが、このメモでは、アンマウントを防止する状況について説明します。
アンマウントは
vx_softcnt_flush()
呼び出しでハングする可能性があります。ハングが発生するのは、inotifyウォッチがi_count
変数をインクリメントしv_os_hold value
、inotifyウォッチャーが保留を解除するまで変数を引き上げたままにするためです。
lsof
。
Mountpoints
セクションに追加されました。
(少なくとも)OpenBSDの場合:
$ fstat /mnt/mountpoint
たとえば、他の方法では自分のプロセスだけが見えるようにルートとしてdoas
実行するために使用しfstat
ます):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
この場合、/usr/ports
ユーザー_pbuild
がこれらの2つのmake
プロセスの実行を完了するまで、マウントを解除できません。