卸載 (unmount)/退出檔案系統

在 Unix/Linux 使用档案系统/储存装置 (storage device) 完毕后,您需要卸载 (unmount -挂载 mount 的相反动作) 档案系统,否则您不能移除该抽取式储存装置 (removable storage device) 或中断系统。因为这样会有机会损坏档案系统或掉失部份资料。

卸载 (umount)

要卸载档案系统,可以使用命令「umount 储存装置」或「umount 挂载点[1](“u” 后确实没有 “n”,并白字),例如:

umount /dev/sdc1

如果输入 umount 命令后停顿下来,一般表示系统正在把仍在缓冲区 (buffer) 中的资料写入储存装置。此时切忌移除该储存装置,否则将有机会损坏档案系统或掉失部份资料。待提示符 # 或 $' 再出现时才表示卸载完毕:

$ umount /dev/sdc1
$

如果中间没有什么错误讯息出现,一般都表示卸载成功。您可以使用 df 或 mount 等命令列出已挂载的档案系统以确定有关档案系统已成功卸载。

退出媒体 (eject media)

有些媒体 (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 
[ 编辑]

解决卸载失败问题 “device is busy”

大部人在卸载或退出储存装置时都曾遇见以下讯息而被拒绝卸载或退出:

umount: /media/cdrom0: device is busy

这表示有些程序仍在开启储存装置中某些档案作读或写,如果这时移除装置,有机会会损坏档案系统、掉失资料和损害该程序,所以系统会拒绝卸载或退出。此时,您需找出仍在使用储存装置的程序并要求它们关闭相关档案 (一般的方法是直接结束相关程序),才可以正常卸载或退出媒体。其中一个方法就是可以使用「fuser -m 挂载点[3]列出正在使用装置挂载点目录以下档案的程序:

$ fuser -m /media/cdrom0
/media/cdrom0        6015c  6132

表示程序识别码 (PID) 为 6015 和 6132 的程序是在使用 /media/cdrom0 或以下的档案。PID 后的英文字母表示档案/目录如何被使用:

  • c - 当前目录
  • e - 程序被执行的目录
  • f - 开启档案。fuser 的缺省显示模式会省去 f
  • F - 开启档案作写入。fuser 的缺省显示模式同样会省去 F
  • r - 根目录
  • m - 使用 mmap 开启了档案或分享程序库 (shared library)

在 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 6132
johndoe 6132 0.4 3.0   220017 57104 ?  S+ 18:27 0:00 rhythmbox

以上画面显示音乐播放程序 Rhythmbox 使用了光盘,您只需要关掉 Rhythmbox 或播放清单,就可以卸载或退出光盘。

除 fuser 外,亦使用命令 「lsof 挂载点[4]列出正在使用装置挂载点目录以下档案的程序:

$ lsof /media/cdrom0
COMMAND  PID    USER   FD   TYPE DEVICE SIZE NODE NAME
bash    7531 johndoe  cwd    DIR   11,0 4096 1856 /media/cdrom0
lsof    7698 johndoe  cwd    DIR   11,0 4096 1856 /media/cdrom0
lsof    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/sdb1
umount: /media/sdb1: device is busy
umount: /media/sdb1: device is busy
$ lsof /media/sdb1
COMMAND   PID    USER   FD   TYPE DEVICE SIZE NODE NAME
bash    67429 johndoe  cwd    DIR   11,0 4096 4257 /media/sdb1/documents
$ kill 67429
$ lsof /media/sdb1
COMMAND   PID    USER   FD   TYPE DEVICE SIZE NODE NAME
bash    67429 johndoe  cwd    DIR   11,0 4096 4257 /media/sdb1/documents
$ kill -9 67429
$ lsof /media/sdb1
$ umount /media/sdb1
$ umount /media/sdb1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值