Linux環境でファイルシステムをアンマウントしようとした際、「target is busy」というエラーに遭遇することがあります。このエラーは、対象のファイルシステムにアクセスしているプロセスが存在する場合に発生します。
この記事では、エラーの原因と解決方法を詳しく解説します。強制アンマウントの可能性も含め、最適な手順を確認しましょう。
強制アンマウントは可能?
答え:通常のファイルシステムではできません。
一部のファイルシステム(例えば、NFS領域)では -f
オプションを使って強制アンマウントが可能です。しかし、通常のハードディスクに使用されるファイルシステム(例:XFSやEXT4など)では、このオプションは無効です。
では、どうすれば良いのでしょうか?答えはシンプルです。対象ファイルシステムへのアクセスを取り除くことが必要です。
エラーを解決する手順
以下の手順に従うことで、安全にアンマウントを完了することができます。
1. 「target is busy」エラーの確
まず、アンマウントを試みてエラーが発生することを確認します。
# umount <マウントポイント>
実行例:
# umount /mnt/mountpoint
umount: /mnt/mountpoint: target is busy.
(In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
このエラーメッセージが表示された場合、対象ファイルシステムにアクセスしているプロセスが存在しています。
2. アクセスしているプロセスの特定
lsof
コマンドを使って、対象ファイルシステムにアクセスしているプロセスを特定します。
# lsof <マウントポイント>
実行例:
# lsof /mnt/mountpoint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tomcat 7555 root cwd DIR 253,1 4096 2 /mnt/mountpoint
この例では、tomcat
プロセス(PID: 7555)が対象のファイルシステムを使用しています。
3. プロセスの停止
特定したプロセスを停止します。停止には以下の方法があります:
- 安全な停止方法を利用する
例:systemctl stop <サービス名>
を使用。 - 強制停止(kill コマンド)を使用する
強制停止が必要な場合、以下のように実行します:
# kill <PID
実行例:
# kill 7555
4. プロセスが停止したことを確認
再度 lsof
コマンドを実行し、対象のファイルシステムにアクセスするプロセスがなくなったことを確認します。
# lsof <マウントポイント>
何も表示されなければOKです。
5. 再度アンマウントを実行
プロセスが停止したら、再度アンマウントを試みます。
# umount <マウントポイント>
これで、エラーなくアンマウントが完了します。