デバイスのアンマウントを妨げているプロセスを調べるにはどうすればよいですか?


59

時々 、私はアンマウントしたいUSBデバイスをしてumount /run/media/theDrive、私は取得drive is busyエラー。

どのプロセスまたはプログラムがデバイスにアクセスしているかを調べるにはどうすればよいですか?


1
同じ質問のためのより多くのupvotes /こっちに答える:stackoverflow.com/questions/624154/...
トレバー・ボイド・スミス

回答:


58

を使用lsof | grep /media/whateverして、マウントを使用しているものを見つけます。

また、umount -lクリーンアップ中に新しいプロセスがドライブを使用しないように(レイジーアンマウント)を検討してください。


24
fuser -mv /path/to/mountpointmointpointを使用してプロセスを見つけるためのより読みやすい代替手段になる可能性があります。
リッカルドムリ

@RiccardoMurriの lsof | grep方がうまく機能します。fuser -mv関連のないプロセスを80個以上ダンプしているようです。マウントバインドディレクトリを使用しています。
リッキーボイス

1
umount -l危険です。代わりにmount -o bind モード000空のディレクトリを最上部に置き、を介してクリーンアップしlsof +f -- /dev/deviceます。
トム・ヘイル

35

ほとんどの場合、使用するのに最適なコマンドは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、マウント解除できません。
  • マウントデバイス:マウントされたブロックデバイスまたはループマウントされた通常ファイルの場合、またはLinuxバインドマウントのソースである/foo場合/foo/barは、マウント解除できません。
  • NFSエクスポート:lsofは、カーネルNFSサーバーによってツリーがエクスポートされたことを検出しません。

ピンチで使用できるもう1つのコマンドはfuserです。これは、デバイス上で開いているファイルがあるプロセスのPIDのみをリストします。

fuser -m /media/usb0

8

lsofピーターが言ったように使用することができます。または、それらすべてを削除してアンマウントしたいだけであれば、おそらく次のようなことができます。

fuser -Mk /mnt/path
umount /mnt/path

1
これを行う場合は-M、安全のための使用を検討してください。
トム・ヘイル

@TomHaleどのコマンド-Mを適用する必要があるかを明確にしたい場合があります。
HSchmale

1
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.
トム・ヘイル

6

ファイルを開く

ファイルを開いているプロセスは、通常の原因です。それらを表示します。

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ノード(Linux)

匿名iノードは次の方法で作成できます。

  • 一時ファイル(openwith O_TMPFILE
  • inotifyウォッチ
  • [eventfd]
  • [イベントポール]
  • [timerfd]

これらは最もとらえどころのないタイプのポケモンであり、lsofTYPE列にとして表示されますa_inodelsofマニュアルページには記載されてい ません)。

には表示されない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ウォッチャーが保留を解除するまで変数を引き上げたままにするためです。


もう1つはループバックマウントです。ファイルシステムをマウントし、ループバックマウントを使用してそのファイルシステムにファイルをマウントすると、最初のファイルシステムをアンマウントできませんが、何も表示されませんlsof
スティーブンキット

乾杯。Mountpointsセクションに追加されました。
トム・ヘイル

5

GNOMEを使用している場合、Nautilusを使用してアンマウントすると、どのプロセスがまだドライブを使用しているか、および使用しているファイルを示すメッセージが表示されます。

代替テキスト


1

(少なくとも)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プロセスの実行を完了するまで、マウントを解除できません。


-2

これはよくある落とし穴です。別のユーザー(rootまたは他のユーザー)にsuし、マウントされたデバイスのディレクトリに移動してから、そのユーザーとしてログアウトします。そのディレクトリに残ったことを忘れた場合、盲目になるまで試してみてください。lsof現在のディレクトリがそのデバイスを使用しているシェルを表示します。ディレクトリを変更するには、そのユーザーとして再びsuを実行します。


2
この答えは不完全または不正確です。それも不明であるため、私はどちらがいいかわかりません。
16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.