webdevqa.jp.net

Linux:umountを実行するときに、どのプロセスが「デバイスビジー」を引き起こしていますか?

Linux:umountを実行するときに、どのプロセスが「デバイスビジー」を引き起こしていますか?

69
flybywire

lsof コマンド(開いているファイルを一覧表示する)を見ると、どのプロセスが何を開いているのかがわかります。時には注意を要することもありますが、多くの場合、Sudo lsof | grep (your device name here)があなたのためにできるような単純なものです。

97
MarkusQ

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

42
alvatar

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

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

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

23
Ben

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

18
Jay

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

15
Malvineous
lsof +f -- /mountpoint

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

9
mas

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

7
Anonymous

それがまさに「fuser -m/mount/point」が存在する理由です。

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

5
Carter Galle

lsofとfuserも私に何もくれませんでした。

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

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

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

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

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

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

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

2
captcha

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

Sudo swapoff -a

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

swapon -s

または:

cat /proc/swaps

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

Sudo systemctl stop dphys-swapfile

または:

Sudo systemctl stop var-swap.swap

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

1
Simon Gould

ファイルを開く

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

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>/

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

losetup -la

匿名iノード(Linux)

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

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

これらは最もわかりにくいタイプのポケモンであり、lsofTYPE列にa_inodeとして表示されます( lsof manページ には記載されていません) 。

lsof +f -- /dev/<device>には表示されないため、以下を行う必要があります。

lsof | grep a_inode

匿名iノードを保持しているプロセスの強制終了については、 現在のinotifyウォッチ(パス名、PID)を一覧表示 を参照してください。

1
Tom Hale

アンマウントしようとしているファイルシステムにマウントされているファイルシステムは、target is busy使用中のファイルに加えてエラー。 (たとえば、mount -o bind /dev /mnt/yourmount/devそこにchrootを使用するため)

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

mount | grep '/mnt/yourmount'

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

lsof | grep '/mnt/yourmount'

0
Slobodan Pejic