LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6028|回复: 9

mount(手工挂载/自动挂载)问题小结

[复制链接]
发表于 2007-1-15 02:53:44 | 显示全部楼层 |阅读模式
1.vfat文件编码方式
fat32文件名分为两种,短文件名和长文件名
两种文件名在磁盘上的存储方式是不同的,长文件名在目录项中特殊的标记
短文件名也就是8.3格式,对于包含中文的任何文件来说都不可能是短文件名
mount挂载时默认将其变成小写,你可以加-o shortname=winnt来使其和
win2k/xp一致
长文件名都是unicode的,以utf16格式存储

2.codepage与iocharset
对于挂载fat32磁盘来说,codepage不需要设置,因为它只对短文件名编码方式起作用
系统默认cp437就足够了
unix世界里很多程序都不处理utf16,iocharset将16位unicode字符转成其他字符集,
系统默认为iso8859-1,一般把它设置成linux系统使用的字符集,如cp936(GBK),utf8
([color="Red"]注:不过linux系统推荐不要使用iocharset选项,推荐直接使用-o utf8 或者utf8=true
具体可参见linux-2.6.19/Documentation/filesystems/vfat.txt原文)

3.一般手工挂载/卸载步驟
(假定为root或sudo进行操作的用户,关于其他用户的挂载见后面)

*找到需要挂载的设备名,通过查看所有块设备:
        cat /proc/partitions 或 fdisk -l
  如果还是不清楚,可以对比查看已挂载设备:
          mount 或 mount -l (-l选项会多输出卷标)
        或cat /proc/mounts
        cat /etc/mtab (加-n选项mount的设备不显示)

*找到设备后,选择一个空目录作为挂载点
(当然你也可以把一个非空目录作为挂载点,但那样很容易将目录中的文件内容搞混)
如挂载u盘/dev/sda1到/mnt下,系统字符设定为utf8
mount -t vfat /dev/hda /mnt -o utf8
就足够了
不加-t vfat在很多情况下也是可以的,但手册上建议最好指定,因为不加-t的话,mount
会先去读根据/etc/filesystems,/proc/filesystems中的文件系统类型进行猜测,只是
一种启发式的猜测(与幻数magic有关),可能会出现问题
如果需要其它选项,见mount(8)

*卸载设备
  确保当前目录不在挂载目录中,并关闭所有使用挂载目录中文件的程序
  umount <挂载点>或<设备名>
  如果输出还是device busy,可以使用
  fuser <挂载点>
  查看哪个进程号正在使用该设备,结合ps aux应该能解决问题
  ([color="Red"]注:-f虽然是强制卸载的含义,但只是针对nfs设计的)

4.固定设备最好在/etc/fstab中设定
<设备名> <挂载点> <类别>  <选项> <是否dump> <是否fsck检查>
对于最后一项,如果/根分区要检查设为1,ext2/3最好设成1
其它文件系统要检查的话需设成2,对于fat32,ntfs文件系统个人觉得没有必要

例如:
# <file system>        <dir>         <type>    <options>          <dump> <pass>
none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0
/dev/hda7 swap swap defaults 0 0
/dev/hda8 / ext3 defaults 0 1

/dev/hda1         /media/winc vfat     ro,uid=1000,utf8 0 0
/dev/hda5         /media/wind vfat     rw,uid=1000,utf8 0 0
/dev/hda6         /media/wine vfat     rw,uid=1000,utf8  0 0
/dev/sda1         /media/sda1 vfat     rw,user,utf8,noauto 0 0
系统在init加载完驱动模块后,会用一个类似mount -a的命令对/etc/fstab中的设备进行加载,
因此,有些人觉得没有必要每次都挂载那些fat32盘,只要在/etc/fstab选项中加上noautoid
就可以了,cdrom(/dev/hdc或/dev/cdrom)也可以加上noauto放在这里
登录进去之后如果想要挂载,mount 设备名或挂载点 就好了
[color="Red"]注:user选项的意思可以让任何人都mount该设备,不过如果其他人或系统已经将其mount上了,
其余非root用户就不能umount; 要想让任何人都可以umount该设备,将user选项改成users
而设置uid=1000(非root uid)后,即使是系统mount上的,文件系统所有者仍然是该uid指定的用户,也
就对文件有了读写权限

5.自动挂载设置

*hal和dbus服务
自动挂载需要启动hal服务,所以把它加到/etc/rc.conf的DEAMONS列表中是个不错的主意
hal服务启动时会先检查dbus是否已经运行,如果未运行会先运行dbus,
所以你在DEAMONS列表中没有dbus也是可以的
*自动挂载权限问题
系统默认对于普通用户是没有自动挂载权限的,不过你可以在
/etc/dbus-1/system.d/hal.conf找到解决方案
在文件的结尾处可以看到
<!-- You can change this to a more suitable user, or make per-group -->
<policy user="nobody">
所以将其改成你的非root用户名就行了(这样设置后你也获得的电源管理和卷管理的权限)
当然,因为上面定义了storage组有自动挂载的权限,所以你可以把自己加入到storage组中
([color="Red"]注:加入到一个组中最简单的方法是编辑/etc/group,在storage组后添上你的用户名就可以了,
当然用groupmems -a username -g groupname也是一个不错的选择)

*gnome和xfce中的自动挂载
hal探测到新硬件后,通过dbus通知gnome-volume-manager然后到gnome-mount
(其中gnome-volume-manage没有也是可以的)
gnome-mount会先到/etc/fstab中查找是有该设备,如果有则按/etc/fstab中的选项自动挂载
如果没有,则会按gnome-mount的挂载选项进行挂载
配置gnome-mount最简单的方法是使用gconf-editor,在
systerm-->storage-->default_options-->vfat:mount_options
中设定,一般你只需要加上utf8就可以了
([color="Red"]注:在gnome中桌面中,挂载后图标下面的盘符应该和该磁盘的卷标一致。如果磁盘没有卷标,或者卷标中含有中文字符,则显示该磁盘
的容量.对于fat32盘设置卷标最简单的方法是到windows底下右键电击该磁盘,在属性->常规中对卷标进行设置; 在linux中ext2/3可以
用e2label进行设置)

好了,以上就是一点小结,也是最常用到的,每个arch新手基本都会遇到的问题,俺们以前只会用
ubuntu,好像也没为这种事情操心(不过也基本啥都没学会,以前都不知有配置服务这回事,
机器开机慢得像蜗牛还以为linux本来就是这样,呵呵),遗漏部分、有错的部分希望大家指出,enjoy arching!
发表于 2007-1-15 18:30:14 | 显示全部楼层
说得好,学Linux就是为了折腾,呵呵
回复 支持 反对

使用道具 举报

发表于 2007-1-16 18:37:23 | 显示全部楼层
好文!受益匪浅,高手啊,多谢!
回复 支持 反对

使用道具 举报

发表于 2007-1-16 18:48:54 | 显示全部楼层
看来年末来了,大家都在总结资源哈
收下了,谢过~
回复 支持 反对

使用道具 举报

发表于 2007-1-17 16:26:58 | 显示全部楼层
*gnome和xfce中的自动挂载
hal探测到新硬件后,通过dbus通知gnome-volume-manager然后到gnome-mount
(其中gnome-volume-manage没有也是可以的)
gnome-mount会先到/etc/fstab中查找是有该设备,如果有则按/etc/fstab中的选项自动挂载
如果没有,则会按gnome-mount的挂载选项进行挂载
配置gnome-mount最简单的方法是使用gconf-editor,在
systerm-->storage-->default_options-->vfat:mount_options
中设定,一般你只需要加上utf8就可以了
(注:在gnome中桌面中,挂载后图标下面的盘符应该和该磁盘的卷标一致。如果磁盘没有卷标,或者卷标中含有中文字符,则显示该磁盘
的容量.对于fat32盘设置卷标最简单的方法是到windows底下右键电击该磁盘,在属性->常规中对卷标进行设置; 在linux中ext2/3可以
用e2label进行设置)

xfce能不能不借用gnome的那两个包?
hal自己能做到检查到移动设备(如USB Disk)然后在/media(或是/mnt?)建立一个挂载点目录的吧?

我现在这个还没弄好……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-17 23:52:44 | 显示全部楼层
gnome-mount确实会为你在/meidia下建一个临时目录
xfce本身是不带自动挂载工具的.虽然/opt/xfce4/bin目录下有个xfmountdev4,但实际上这个脚本没有起r任何作用,估计是为以后开发留出的接口
所以现在解决方案可以如下:
mkdir /media/usb
在/etc/fstab中加入如下内容
/dev/sda1(或你常用的移动设备)  /media/usb  vfat user,rw,utf8,noauto 0 0
基本能够解决问题...
回复 支持 反对

使用道具 举报

发表于 2007-1-18 10:42:29 | 显示全部楼层
受益了,谢谢兄太,期待别的总结

PS:一直搞不定我的声卡多音频,主板是nf4的,希望看到的人帮助一下
回复 支持 反对

使用道具 举报

发表于 2007-1-21 23:24:05 | 显示全部楼层
Post by thinux
gnome-mount确实会为你在/meidia下建一个临时目录
xfce本身是不带自动挂载工具的.虽然/opt/xfce4/bin目录下有个xfmountdev4,但实际上这个脚本没有起r任何作用,估计是为以后开发留出的接口
所以现在解决方案可以如下:
mkdir /media/usb
在/etc/fstab中加入如下内容
/dev/sda1(或你常用的移动设备)  /media/usb  vfat user,rw,utf8,noauto 0 0
基本能够解决问题...

自己一向手动挂载,最近升级了下xfce,试了试hal
一点问题都没呢。它确实是在/media下临时目录。

那个允许xfce管理桌面的有点小问题
就是桌面的动作不能及时刷新。
回复 支持 反对

使用道具 举报

发表于 2007-1-22 01:45:47 | 显示全部楼层
Post by risky
自己一向手动挂载,最近升级了下xfce,试了试hal
一点问题都没呢。它确实是在/media下临时目录。

那个允许xfce管理桌面的有点小问题
就是桌面的动作不能及时刷新。


自动刷新需要启动fam服务。

你的hal会自动在/media下面建目录么?我的似乎不行,不知道是权限不够还是要自己设置。。。
回复 支持 反对

使用道具 举报

发表于 2007-1-22 12:03:21 | 显示全部楼层
Post by leemars
自动刷新需要启动fam服务。

你的hal会自动在/media下面建目录么?我的似乎不行,不知道是权限不够还是要自己设置。。。

确实开了fam可以了。呵。
是在/media下建usbdisk、usbdisk-1
你的root能开么?

hal/dbus正常的话一般没问题吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表