Linux:アンマウント時に「デバイスビジー」を引き起こしているプロセスはどれですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/624154

質問

Linux:アンマウントを実行するときに「デバイスビジー」を引き起こしているプロセスはどれですか?

役に立ちましたか?

解決

lsof コマンド(開いているファイルを一覧表示する)を見てください。どのプロセスが何を開いているかを保持しています。時には注意が必要ですが、多くの場合、 sudo lsof | grep(ここでのデバイス名)はあなたのためにそれを行うことができます。

他のヒント

念のため...端末からumountを呼び出しているときに、現在のディレクトリがマウントされたファイルシステムに属している場合があります。

fuser コマンドを使用する必要があります。

たとえば fuser / dev / cdrom は、 / dev / cdrom を使用してプロセスのpidを返します。

アンマウントしようとしている場合、 -k スイッチを使用してこれらのプロセスを強制終了できます( man fuser を参照)。

「losetup -a」を使用して、ファイルシステム上のファイルにマッピングされたオープンループデバイスを確認します。 lsofまたはfuserのいずれでも表示されません。

/ etc / exports も確認してください。 NFS経由でマウントポイント内のパスをエクスポートしている場合、アンマウントしようとするとこのエラーが発生し、 fuser または lsof には何も表示されません。

lsof +f -- /mountpoint

(asは/ mountpointにマウントされたマウント上のファイルを使用するプロセスをリストします。マウントされたUSBスティックまたはCD / DVDを使用しているプロセスを見つけるのに特に役立ちます。

lsofとfuserは、特定のファイルを開いたままにするプロセスを見つける2つの方法です。 umountを成功させるだけであれば、その-fおよび-lオプションを調査する必要があります。

だからこそ" fuser -m / mount / point"存在します。

ところで、「fuser」とは思わない。または「lsof」カーネルモジュールがリソースを保持していることを示しますが、通常はその問題はありません。

lsofとfuserからも何も得られませんでした。

すべての可能なディレクトリの名前を.oldに変更し、変更を行うたびにシステムを再起動するプロセスの後、責任のある特定のディレクトリ(postfixに関連する)を見つけました。

SDCARDベースのルートファイルシステム(Sheeva Plug)でのディスク書き込みを最小限に抑えるために、/ var / spool / postfixから/ disk2 / pers / mail / postfix / varspoolへのシンボリックリンクを作成したことがあることが判明しました。

このシンボリックリンクを使用すると、postfixサービスとdovecotサービスを停止した後でも(ps auxとnetstat -tuanpの両方に関連するものは何も表示されませんでした)、/ disk2 / persをアンマウントできませんでした。

シンボリックリンクを削除し、/ disk2 / pers /の新しいディレクトリを直接指すようにpostfixおよびdovecotの設定ファイルを更新すると、サービスを正常に停止してディレクトリをアンマウントできました。

次回は、次の出力をさらに詳しく見ていきます。

ls -lR /var | grep ^l | grep disk2

上記のコマンドは、ディレクトリツリー(ここでは/ varで始まる)内のすべてのシンボリックリンクを再帰的にリストし、特定のターゲットマウントポイント(ここではdisk2)を指す名前を除外します。

ファイルを開く

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

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>)、残りのプロセスをすべて強制終了しても安全です:

fuser -vmMk <mountpoint>

マウントポイント

原因はカーネル自体である可能性があります。しようとしているファイルシステムに別のファイルシステムがマウントされています umount 悲しみを引き起こすでしょう。確認する:

mount | grep <mountpoint>/

ループバック マウントの場合は、次の出力も確認してください。

losetup -la

匿名 i ノード (Linux)

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

  • 一時ファイル (openO_TMPFILE)
  • 通知する 時計
  • [イベントFD]
  • [イベント投票]
  • [タイマーFD]

これらは最もとらえどころのないタイプのポケモンであり、 lsofさんの TYPE 列として a_inode (これは文書化されていません lsof マニュアルページ).

彼らは登場しません lsof +f -- /dev/<device>, したがって、次のことを行う必要があります。

lsof | grep a_inode

匿名 i ノードを保持するプロセスを強制終了する場合は、次を参照してください。 現在の inotify ウォッチ (パス名、PID) をリストします。.

ファイルを開いた状態ですべてのサービスとプロセスを停止した後でもデバイスをアンマウントまたは再マウントできない場合は、デバイスをビジーにしておくスワップファイルまたはスワップパーティションがある可能性があります。これは、 fuser または lsof では表示されません。スワップをオフにします:

sudo swapoff -a

事前に確認して、スワップパーティションまたはスワップファイルの概要を次のように表示できます。

swapon -s

または:

cat /proc/swaps

コマンド sudo swapoff -a を使用する代わりに、サービスまたは systemd ユニットを停止してスワップを無効にすることもできます。例:

sudo systemctl stop dphys-swapfile

または:

sudo systemctl stop var-swap.swap

私の場合、 fsck を実行するためにルートパーティションを読み取り専用として再マウントできるように、ファイルを書き込み用に開いているサービスとプロセスを停止することに加えて、スワップをオフにする必要がありました再起動せずにルートパーティションに。これは、Raspbian Jessieを実行するRaspberry Piで必要でした。

アンマウントしようとしているファイルシステムにマウントされたファイルシステムは、使用中のファイルに加えて、 target is busy エラーを引き起こす可能性があります。 (たとえば、 chroot を使用するために mount -o bind / dev / mnt / yourmount / dev を実行する場合)

ファイルシステムにマウントされているファイルシステムを見つけるには、次を実行します:

mount | grep '/ mnt / yourmount'

使用中のファイルを見つけるには、他の人がすでに提案しているアドバイスをここで:

lsof | grep '/ mnt / yourmount'

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top