在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 命令。