Press "Enter" to skip to content

解决Red Hat系统umount: device is busy的问题

在Red Hat/CentOS系统中,要解除某个设备的挂载,经常会弹出 device is busy 的提示,这是因为系统中还有程序或用户在访问着设备上的文件,如果冒然强制卸载,可能会导致数据丢失和设备损坏,“Device is busy” 是一种保护措施。

[root@localhost ~]# df -h               //查看现有挂载情况
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       19G  2.4G   15G  14% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 252M     0  252M   0% /dev/shm
/dev/hdc              2.9G  2.9G     0 100% /mnt/cdrom
[root@localhost ~]# umount /mnt/cdrom    //解除挂载
umount: /mnt/cdrom: device is busy       //提示设备忙
umount: /mnt/cdrom: device is busy

解决办法:

[root@localhost ~]# fuser -mv /mnt/cdrom

                     USER        PID ACCESS COMMAND
/mnt/cdrom:          zhang3     5110 ..c.. bash

fuser (find user processes) 程序可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,这里我们看到,原来是一个叫zhang3的用户还在这个目录里,这里还给出了进程号。知道了进程号,我们就可以调用kill命令来杀死该进程了。
-m 参数表示该文件系统对应的设备
-v 参数输出详细信息(Verbose)

如果你懒得看哪些程序正在使用这个设备,可以直接调用fuser -km /mnt/cdrom杀死所有正在访问该目录的进程,然后再umount就OK了。

[root@localhost ~]# fuser -km /mnt/cdrom      //显示正在使用当前目录的进程,并直接kill
/mnt/cdrom:           4370c
[root@localhost ~]# umount /mnt/cdrom          //解除挂载成功
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       19G  2.4G   15G  14% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 252M     0  252M   0% /dev/shm

除了fuser,也可以使用lsof程序来查看正在使用该文件系统的的进程

localhost ~]# lsof /mnt/cdrom
COMMAND  PID   USER   FD   TYPE DEVICE   SIZE NODE NAME
bash    5110 zhang3  cwd    DIR   22,0 413696 2560 /mnt/cdrom/Server

lsof (list open files) 命令列出特定的文件系统、目录或设备上所有打开的文件以及与它们相关联的进程。在大多数 UNIX 和类 UNIX 系统上都可以使用 lsof 命令。

Leave a Reply

Your email address will not be published. Required fields are marked *