NFS server down机或重启导致的NFS系统错误
今天由于公司的NFS server重启,从而导致挂载了NFS文件目录的server里出现了大量的hung住的进程,因为当希望将出错的挂载点umount时候, 出现了一些问题。 目前问题已经解决,在这里做下总结。
问题:当NFS Server重新启动后,重新对相应的挂载点从新进行挂载(也就是 umount/mount)
当执行umount /mnt/ 命令的时候,系统提示:
Umount: /mnt/: device is busy
Umount:/mnt/: device is busy
原因: 因为NFS Server重启或者挂机,导致当前server中的nfs挂载点挂载了一个die的地址, 从而导致kernel bug,导致使用了这些挂载点的进程被hung住。由于这些被hung住的进程还在使用这些出错的挂载点, 进而导致umount不能成功,并且给出了上述的错误提示。通过ps aux 你可以查看到这些进程,这些进程的state 为D(non-interruptable sleep),表示他们正在等待IO操作的结束。此外,因为mount默认模式是hard option并且nointr option,所以这些进程会一直等待,并且随后的umount操作由于不能interrupt,从而引起device is busy error.
参考解决步骤:
你需要手动kill(9)所以state 为D的进程(ps aux | grep D)。然后你需要kill(9) rpciod 进程。当这些操作完成以后,所以的sleeping进程被杀死,这时候,你就可以成功执行umount操作了.
其他可能有帮助的命令:
lsof 命令来检查哪些进程使用了nfs的挂载点上的目录和文件。这样可以更加有针对性的选择kill哪些进程。