问题

无法使用 umount 命令卸载 Windows 共享装载点。
最近没有任何进程使用此 Windows 共享。
执行umount命令时,看到如下错误;

umount: /data01: device is busy.
  (In some cases useful info about processes that use
  the device is found by lsof(8) or fuser(1))
CentOS/RHEL:卸载 Windows 共享失败
更多: zhilu jiaocheng

解决方案

错误 'umount: device is busy ' 表示挂载点由于某种原因被服务器挂起。
执行 lsof 命令以查找一些打开的文件描述符。

# lsof /data01/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 39176 oracle cwd DIR 0,25 0 54427649 /data01/primdb/rman
rsync 39176 oracle 1r REG 0,25 6678585344 54428135 /data01/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.WxJoHy (deleted)
rsync 39176 oracle 3u REG 0,25 5449449472 54428147 /data01/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.uqhidN

即使使用 kill 命令也无法终止此 PID。

# kill -9 39176
# lsof /data01/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 39176 oracle cwd DIR 0,25 0 54427649 /data01/primdb/rman
rsync 39176 oracle 1r REG 0,25 6678585344 54428135 /data01/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.WxJoHy (deleted)
rsync 39176 oracle 3u REG 0,25 5449449472 54428147 /data01/primdb/rman/.RMDBPRD_LVL0_20170910_s145161_p1.uqhidN

由于前段时间发生的 IO 块,写入此挂载点的 rsync 进程仍处于 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/ /data01/primdb/rman/

由于此进程处于不间断睡眠状态,因此无法杀死此进程。
这就是无法从服务器卸载 Windows 共享的原因。

无法使用 kill 命令终止 D 状态进程,因为它们就像进程列表中没有父进程的孤立条目。
因此建议重新启动服务器以终止任何此类 D 状态进程。

如果在生产服务器的情况下目前无法重新启动,则等待 IO 再次可用,以便该过程将被唤醒并完成。
但是,不建议等待超过一个月,因为如果服务器中存在更多此类 D 状态进程,服务器负载可能会逐渐攀升。

日期:2020-09-17 00:12:22 来源:oir作者:oir