解决linux下umount显示device is busy的问题

  • 最近服务器磁盘的一个作为数据备份的分区经常出现问题, 写入的数据经常不完整。在该分区执行rm删除操作的时候提示rm:无法删除 文件 只读文件系统; 分析原因估计是磁盘算坏的缘故, 现在正在备份数据, 备份完数据以后准备修复磁盘试试。不过首先需要把磁盘分区umount了

但是在卸载挂载分区的时候出现另一个问题: 执行umount的时候提示: device is busy 错误, 无法umount卸载磁盘分区; 分析原因应该是被其它程序占用了. 经过Google以后发现了一个非常有用的命令:
fuser : 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息.

  • 使用 fuser -m -v /dev/sda1 命令可以查看当前分区被那个用户那个进程占用了

-m 参数显示所有使用指定文件系统的进程,后面可以跟挂载点,或是dev设备,-v 参数给出详细的输出,可以看出,原来是 proftp 这个程序还在霸占着磁盘分区,fuser 还给出了程序的进程号,知道了进程号,你就可以随便怎么处置这个程序

  • 使用 fuser -m -k /dev/sda1 命令可以把占用着当前磁盘分区的程序杀死

难道没有文明点儿的办法卸载磁盘分区么, 答案是有的。如果不是很着急卸载umount磁盘分区的时候可以使用以下命令:
umount -l /dev/sda1

选项 –l 并不是马上umount,而是在该目录空闲后再umount

标签: linux