提示“无法卸载卷(分区)”的解决方法:
背景:
在Linux下,有时会遇到(莫名奇妙的)无法正常卸载文件系统的问题,比如U盘。相对Windows下的束手无策或者使用第三方软件,Linux下使用一个命令即可解决问题。下面介绍怎样安全卸载文件系统,假设出现了下面的异常(黑体表示要输入的指令,下同):
sudo umount /media/disk
umount: /media/disk: device is busy
方法1:使用fuser
可以使用fuser命令寻找挂载在/media/disk的文件系统所关联的进程:
/sbin/fuser -m /media/disk
/media/music: 2650c 2720c
返回值表示有两个进程在访问此挂载点,PID分别为2650、2720,并且访问方式都是将此目录当作进程的当前工作目录。
此时,可以查看第一个进程是什么(在此只是示例,gnome-session才不会访问那么奇怪的地方呢^_^):
ps -e |grep 2650
2650 ? 00:00:01 gnome-session
可以使用pkill gnome-session或者kill 2650来结束此进程,另外一个进程也可以如法炮制。
到此,就可以再次尝试使用umount命令卸载/media/disk了!
fuser还提供了一个便捷的参数,使用下面命令可以立即杀死文件系统关联的所有进程:
/sbin/fuser -k /media/disk
方法2:使用lsof
fuser返回的PID虽然在末尾有个状态指示符,但对于了解进程到底正在做什么远远不够。这时可以使用lsof命令,返回在指定文件系统上有打开文件的进程的详细信息:
/usr/sbin/lsof /DATA
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gnome-ses 2650 youran cwd DIR 8,5 4096 26771457 /DATA/youran
python 2803 youran cwd DIR 8,5 4096 26771457 /DATA/youran
escd 2810 youran 3w REG 8,5 1254 557183 /DATA/youran/.redhat/esc/esc.log
pam-panel 2811 youran cwd DIR 8,5 4096 26771457 /DATA/youran
evolution 2822 youran 23u REG 8,5 12288 2885286 /DATA/youran/.evolution/addressbook/local/system/addressbook.db
evolution 2822 youran 24r REG 8,5 118 2885287 /DATA/youran/.evolution/addressbook/local/system/addressbook.db.summary
scim-pane 2859 youran mem REG 8,5 10044356 2885529 /DATA/youran/.fonts/simhei.ttf
上面显示了当前在访问/DATA文件系统的进程信息。输出因太多,被截短。这时,可以方便地使用grep命令找出是什么进程在阻碍文件系统的卸载,并且能看到它现在在干什么。例如:
/usr/sbin/lsof /DATA |grep /DATA/youran/.evolution/
evolution 2822 youran 23u REG 8,5 12288 2885286 /DATA/youran/.evolution/addressbook/local/system/addressbook.db
evolution 2822 youran 24r REG 8,5 118 2885287 /DATA/youran/.evolution/addressbook/local/system/addressbook.db.summary
上面的输出显示当前正在访问/DATA/youran/.evolution子目录的进程,以及打开的文件。同样可以使用pkill或者kill结束这些进程。
方法3:umount -l
新版本的umount提供了-l参数,以“懒惰”的方式立即卸载文件系统,然后试图清除进程对文件系统的引用:
umount -l /media/disk
可以一试。
联系客服