跳至主要内容

在Fedora下自动挂载移动硬盘

(一)从Mount到fstab
最早使用Linux的时候,我遇 到的第一个难题就是如何将Windows下的硬盘分区挂载到Linux中。当时用的是mount。指定了文件系统 vfat,字符编码codepage=936等参数之后,mount一下就ok了。不过偶是个懒人,所以不情愿每次进入系统都输入一遍命令(不过必须承 认,对于当时还是个新手的偶而言,多用几次命令行还是很有好处的 ^_^ )。

Google之后了解到 /etc/fstab 文件的好处。Linux中/etc目录下的fstab文件是一个文件系统表 (File System Table file ),它维护着mount point条目。这些条目是根据HAL事件自动增添或是删除的──fstab文件不是指望靠用户手动修改的,有个程序 fstab-sync 可以自动修改fstab文件。当系统的HAL服务启动之后,上一次增加的所有条目都会被删除,而后根据需要,fstab-sync 会被调用若干次,加入合适的条目。

(二)fstab-sync和policy
了解到了这里,就要知道fstab-sync是如何知道应该增添什么条目的?
# man fstab-sync
文 档说主要是参考storage.policy和volume.policy的属性。缺省的属性是存放在系统配置文件中的,在偶的Fedora 4系统中,放在 /usr/share/hal/fdi/policy/10osvendor/10-storage-policy.fdi里面。别心急修改──这个文件 是osvendor提供的,在升级的时候可能会被更新,正确的作法是在policy目录中放入单独的文件,例如,为了自动挂载移动硬盘,我新建了文件: /usr/share/hal/fdi/policy/95user.fdi。
以下是这个fdi文件的内容:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
 <device>
  <match key="@block.storage_device:storage.removable" bool="true">
   <merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
   <merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
   <merge key="volume.policy.mount_option.users" type="bool">true</merge>
   <merge key="volume.policy.mount_option.iocharset=utf8" type="bool">true</merge>
   <merge key="volume.policy.mount_option.codepage=936" type="bool">true</merge>
  </match>
  <match key="@block.storage_device:storage.hotpluggable" bool="true">
   <merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
   <merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
   <merge key="volume.policy.mount_option.users" type="bool">true</merge>
   <merge key="volume.policy.mount_option.iocharset=utf8" type="bool">true</merge>
   <merge key="volume.policy.mount_option.codepage=936" type="bool">true</merge>
  </match>
 </device>
</deviceinfo>

(三)实战
可以重启HAL守护进程更新fstab看看效果:
# service haldaemon restart
# cat /etc/fstab
可以看到fstab中的内容已经被修改了,加入了如下的行:
/dev/sda7 /media/USB1 vfat pamconsole,users,exec,noauto,codepage=936,iocharset=utf8,dmask=0,fmask=111,managed 0 0
/dev/sda6 /media/USB2 vfat pamconsole,users,exec,noauto,codepage=936,iocharset=utf8,dmask=0,fmask=111,managed 0 0

这样就实现了安全便捷地挂载移动硬盘。关于HAL和相关的内容有时间会再贴的。

评论