在 Unix/Linux 使用档案系统/储存装置 (storage device) 完毕后,您需要卸载 (unmount - 挂载 mount 的相反动作) 档案系统,否则您不能移除该抽取式储存装置 (removable storage device) 或中断系统。因为这样会有机会损坏档案系统或掉失部份资料。
卸载的工作一般是使用命令 umount 进行。 有些媒体 (media) 包括光盘、软碟、JAZ 碟、ZIP 碟和 ipod 等可能需要使用命令 eject 才可以令计算机同时卸载和退出媒体。
现代的 X Window 桌面环境包括 GNOME 和 KDE 等使用 HAL 和 D-Bus 等,令挂载、存取、卸载和退出等工作都可以很轻易地在桌面上进行。然而在欠缺 X Window 的文字模式、服务器环境或旧 X Window 系统中,就往往需要使用命令 umount 和 eject。
目录[隐藏] |
要卸载档案系统,可以使用命令「umount 储存装置
」或「umount 挂载点
」[1](“u” 后确实没有 “n”,并非白字),例如:
umount /dev/sdc1
如果输入 umount 命令后停顿下来,一般表示系统正在把仍在缓冲区 (buffer) 中的资料写入储存装置。此时切忌移除该储存装置,否则将有机会损坏档案系统或掉失部份资料。待提示符 # 或 $' 再出现时才表示卸载完毕:
$ umount /dev/sdc1$
如果中间没有什么错误讯息出现,一般都表示卸载成功。您可以使用 df 或 mount 等命令列出已挂载的档案系统以确定有关档案系统已成功卸载。
有些媒体 (media) 包括光盘、软碟、JAZ 碟、ZIP 碟和 ipod 等可能需要由软件控制才可能从计算机中退出媒体,这时就需要使用 eject 了。eject[2] 的使用方法是「eject 名称
」,例如:
eject /media/disk
参数 “名称” 可以是装置档案 (/dev/cdrom 或 /dev/sdb1 等) 或装置的挂置点 (/media/disk 或 /mnt 等)。亦可以是以上两者略上 /dev/、/media/ 或 /mnt/ 等父目录名称。执行 eject 时,如果发现 “名称” 的第个字符是 “/” 或 “.”,会直接退出所指装置。否则会在前加上 /dev/、/media/、/mnt/、/dev/cdroms、/dev/rdsk、/dev/dsk 或 ./,直接找到所指装置。所以您可以直接使用 cdrom、sdb1 和 disk 等退出装置:
eject scd0
大部人在卸载或退出储存装置时都曾遇见以下讯息而被拒绝卸载或退出:
umount: /media/cdrom0: device is busy
这表示有些程序仍在开启储存装置中某些档案作读或写,如果这时移除装置,有机会会损坏档案系统、掉失资料和损害该程序,所以系统会拒绝卸载或退出。此时,您需找出仍在使用储存装置的程序并要求它们关闭相关档案 (一般的方法是直接结束相关程序),才可以正常卸载或退出媒体。其中一个方法就是可以使用「fuser -m 挂载点
」[3]列出正在使用装置挂载点目录以下档案的程序:
$ fuser -m /media/cdrom0/media/cdrom0 6015c 6132
表示程序识别码 (PID) 为 6015 和 6132 的程序是在使用 /media/cdrom0 或以下的档案。PID 后的英文字母表示档案/目录如何被使用:
在 fuser 命令加上选项 -v
可以显示较详细的资讯:
$ fuser -vm /media/cdrom0 USER PID ACCESS COMMAND/media/cdrom0: johndoe 6015 ..c.. bash johndoe 6132 f.... rhythmbox
亦使用命令「ps auxw | grep PID
」获知个别程序的详细资讯:
$ ps auxw | grep 6132johndoe 6132 0.4 3.0 220017 57104 ? S+ 18:27 0:00 rhythmbox
以上画面显示音乐播放程序 Rhythmbox 使用了光盘,您只需要关掉 Rhythmbox 或播放清单,就可以卸载或退出光盘。
除 fuser 外,亦使用命令 「lsof 挂载点
」[4]列出正在使用装置挂载点目录以下档案的程序:
$ lsof /media/cdrom0COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEbash 7531 johndoe cwd DIR 11,0 4096 1856 /media/cdrom0lsof 7698 johndoe cwd DIR 11,0 4096 1856 /media/cdrom0lsof 7699 johndoe cwd DIR 11,0 4096 1858 /media/cdrom0
以上画面表示有一个 bash 和两个 lsof 程序正在使用 /media/cdrom0,您需要令它们全部关闭 /media/cdrom0 才可以退出光盘。当然,直接结束相关程序是最简单或一般情况下唯一的方法。
此时您可能会发觉有些很讽刺的事情发生。超过一半的情况,您所使用的命令模式或终端机就是正在使用装置和阻止您退出卸载的程序,如上面画面就是这个程序,bash 程序就是正在使用的命令模式,而两个 lsof 程序就是刚为查询而输入的命令,它们合部都使用 /media/cdrom0 作为当前工作目录 (current working directory),令系统拒绝卸载。解决方法就是改变工作目录至 /media/cdrom0 及以下以外的目录就可以了:
$ cd$ pwd/home/johndoe$ eject cdrom0$
很多情况下,我们需要终止有关程序才可以令它不再使用有关装置而让我们卸载或退出装置。这当然不是一个好方法,有关程序如未储存盘案,可能会遗失一些资料。但这却是最简单快捷的方法。建议初学者在无计可施时才好出此懒人的下策:
$ umount /media/sdb1umount: /media/sdb1: device is busyumount: /media/sdb1: device is busy$ lsof /media/sdb1COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEbash 67429 johndoe cwd DIR 11,0 4096 4257 /media/sdb1/documents$ kill 67429$ lsof /media/sdb1COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEbash 67429 johndoe cwd DIR 11,0 4096 4257 /media/sdb1/documents$ kill -9 67429$ lsof /media/sdb1$ umount /media/sdb1$ umount /media/sdb1
联系客服