|
|
虽然在linux下挂载轻而易举,但是实现自动挂载曾经还是一件比较麻烦的事情。这里介绍利用gnome-volume-manager实现自动挂载的主要流程,不敢妄称完美,但的确可以达到与windows自动挂载相同的效果。
linux发现并自动挂载可移动设备的原理比较繁琐,简单描述如下:
1. 当插入可移动设备时,内核首先发现,并通知hotplug和udev,hotplug负责加载相应的模块(如usb-storage),udev负责创建相应的设备(如/dev/sda1);
2. udev再将消息传给hald守护程序,并告诉它相关挂载的信息,例如权限信息等;
3. hald知道后,通过一系列精心编写的规则文件(就是传说中的xxx-policy.fdi),将如何挂载的信息通过dbus这个通道发出去;
4. gnome-volume-manager订阅dbus的消息,调用gnome-mount来实现可移动设备的挂载与卸载。KDE在kde-volume-manager未发布之前也采用gnome-volume-manager。
更详细的过程请参考这里和这张流程图。
根据以上流程,不难知道自动挂载的安装和配置过程:
1. 编译内核,让其支持hotplug和可移动设备。
2. 安装udev,hotplug,hal,dbus,gnome-mount,gnome-volume-manager。
3. 启动hotplug,hal 和 dbus 服务,并将这些服务加入到开机自启动列表
4. 添加"gnome-volume-manager --sm-disable"这一行到System->preferences->Sessions->Startup programs,并重新登录gnome,这样可以保证gnome-volume-manager随gnome启动。
5. 删除或者注释掉/etc/fstab中有关可移动设备挂载的部分,因为hald的script会检查/etc/fstab中的内容,如果已经挂载或者存在相关选项,就忽略该设备。
6. 将想要使用自动挂载的用户加入plugdev组,"gpasswd -a someuser plugdev",因为非plugdev组的普通用户不能使用自动挂载功能。
检验方法:
插入usb存储设备或者将光盘放入光驱,如果桌面上出现相应的图标,并弹出窗口,则说明自动挂载成功。
缺陷及解决办法:
挂载u盘时,如果u盘是vfat的格式,gnome-volume-manager-2.15.0的mount结果是
- /dev/sda1 on /media/disk type vfat (rw,noexec,nosuid,nodev,shortname=winnt,uid=1000)
复制代码
我曾经在传说中的fdi文件里设置过iocharset和codepage,lshal命令显示这些设置已被hald读取,但是gnome- volume-manager的mount结果依然如此,这说明它没有读取policy中的指定选项,这样的结果是某些locale(例如我的 zh.CN_GBK)下挂载的目录下中文文件是乱码。其实更科学的应该根据用户自己的locale来自动选择。
解决办法就是在编译内核的时候,指定vfat文件系统的默认编码:iocharset=gb2312,codepage=936
- File systems ---> DOS/FAT/NT Filesystems --->
- <*> VFAT (Windows-95) fs support
- (936) Default codepage for FAT
- (gb2312) Default iocharset for FAT
复制代码
原文见:http://pinker.3322.org/?p=47 |
|