問題
umount コマンドを使用して Windows 共有マウント ポイントをアンマウントできません。この Windows 共有は最近どのプロセスでも使用されていません。
umount コマンドを実行すると、次のエラーが表示されます。
# umount: /mycloud: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
解決策
「umount:device is busy」というエラーは、マウント ポイントが何らかの理由でサーバーによって停止されていることを意味します。開いているファイル記述子を見つけるために、lsof コマンドが実行されます。
# lsof /mycloud/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 39176 oracle cwd DIR 0,25 0 54427649 /mycloud/primdb/rman rsync 39176 oracle 1r REG 0,25 6678585344 54428135 /mycloud/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.WxJoHy (deleted) rsync 39176 oracle 3u REG 0,25 5449449472 54428147 /mycloud/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.uqhidN
kill コマンドを使用しても、この PID を強制終了できませんでした。
# kill -9 39176
# lsof /mycloud/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 39176 oracle cwd DIR 0,25 0 54427649 /mycloud/primdb/rman rsync 39176 oracle 1r REG 0,25 6678585344 54428135 /mycloud/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.WxJoHy (deleted) rsync 39176 oracle 3u REG 0,25 5449449472 54428147 /mycloud/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.uqhidN
チェックすると、このマウント ポイントに書き込む rsync プロセスは、しばらく前に発生した IO ブロックのために、まだ D 状態にあります。
# ps aux |grep rsync root 30103 0.0 0.0 103304 804 pts/0 S+ 10:24 0:00 grep rsync oracle 39176 0.0 0.0 110956 96 ? D Sep10 17:48 rsync -av --delete /eva/primdb/rman/ /mycloud/primdb/rman/
このプロセスは中断できないスリープ状態にあるため、このプロセスを強制終了できませんでした。これが、サーバーから Windows 共有をアンマウントできない理由です。
D 状態 プロセスは、親のないプロセス リスト内の孤立したエントリのようなものであるため、kill コマンドを使用して強制終了できませんでした。そのため、そのような D 状態のプロセスを強制終了するためにサーバーを再起動することをお勧めします。
本番サーバーの場合のように、現時点で再起動できない場合は、IO が再び使用可能になるまで待機して、プロセスが起動して完了するようにします。ただし、サーバーにこのような D 状態のプロセスが増えると、サーバーの負荷が徐々に上昇する可能性があるため、1 か月以上待つことはお勧めしません。