免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1330 | 回复: 0
打印 上一主题 下一主题

学会理解并编辑fstab [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-04 16:06 |只看该作者 |倒序浏览
主要翻译自http://www.tuxfiles.org/linuxhelp/fstab.html,根据自己的理解做了修改和补充
可能玩Linux的朋友都知道fstab这个文件,如果要用好linux,熟悉linux的一些核心配置文件是必要的,而fstab则是其中之一。这个文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。因此,我们需要理解其中的内容,了解它如何与 mount命令配合工作,并能够针对自己的情况进行修改。
作为系统配置文件,fstab通常都位于/etc目录下,它包括了所有分区和存储设备的信息,以及它们应该挂载到哪里,以什么样子的方式挂载。如果遇到一些类似于无法挂载你的windows分区阿,无法使用你的光驱阿,无法对某个分区进行写入操作阿什么的,那么基本上可以断定,你的fstab内容有问题了。也就是说,你可以通过修改它来搞定这些问题,而不用去论坛冰天雪地裸体跪求答案了。
说了半天,/etc/fstab其实就是一个文本文件,用gedit或者vi都可以打开,当然,前提是root权限。在这个文件中,每个文件系统(包括分区或者设备)用一行来描述,在每一行中,用空格或TAB符号来分隔各个字段,文件中以#开头的行是注释信息。Fstab文件中的纪录的排序十分重要。因为 fsck,mount或umount等程序在做它们的工作时会按此顺序进行。下面进行详细的讲解,本文假设读者已经有挂载文件系统和分区的基础知识。
在讲解之前要说一下,每个人所使用的系统情况都是不同的,包括硬件种类,所用系统等,因此fstab文件肯定是有所差异的。但是其基本结构,如上所述,都不会变。所以我们先以一个fstab内容作为模板进行讲解。
首先请看下面这个例子:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0
/dev/fd0 /media/floppy auto rw,noauto,user,sync 0 0
proc /proc proc defaults 0 0
/dev/hda1 swap swap pri=42 0 0
这些看起来毫无意义的字符代表了什么?在对应相应分区或者存储设备信息的每一行中,每一列又是什么意思?先大体讲一下,第一列表示设备的名称,第二列表示该设备的挂载点,第三列是文件系统,第四列是挂载选项,第五列是dump选项(用一个数字表示),第六列(接下来的数字)表示文件系统检查选项。好了,接下来,就要详细介绍这些参数的具体含义了。
第一、二列:设备和默认挂载点说实话,第一列和第二列的内容是最简单最直接的,它们的作用就是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。大多数 Linux发行版都会为挂载点创建专门的目录,大多数是在/mnt下,但是一些发行版(比如SUSE或者ubuntu)是在/media下。笔者使用的是 ubuntu,所以示例信息中也是用的/media目录。
按照我们给出的fstab示例,如果你敲入命令
$ mount /dev/fd0
你的软驱就将挂载到/media/floppy,因为这是你告诉系统的软驱默认挂载点。如果没有这个信息,当你敲入mount命令时,mount 会感到很困惑:该死的,你想让我把这玩意挂载到哪里去呢?当然,如果你看fstab中发行版给你指定的默认挂载点不顺眼,也可以自由修改它,修改成任何一个你希望的目录都可以。如果还不存在,就首先创建这个目录。要知道,fstab是不会把所有工作都给你包干的哦。
另外,有一些分区和存储设备是在Linux系统启动的时候就自动挂载的,比如,让我们看看刚才列出来的fstab示例信息,有两行是这样的:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
正如刚才我们讲到的那样,这两行表示/dev/hda2默认挂载到/根目录,而 /dev/hdb1则默认挂载到/home目录,。这些工作在你Linux系统启动的时候就会通过读取fstab自动完成,否则的话……想象你会遭受什么样的折磨吧,所有的程序都在/根目录下,而你却无法使用,因为你没有挂载/根目录!恩,我保证,这将是一次让人沮丧的系统使用经历。
除了显示的使用设备名,你可以使用设备的UUID或设备的卷标签,例如,你可以在这个字段写成“LABAL=root”或“UUID= 3e6be9de- 8139-11d1-9106-a43f08d823a6”,这将使系统更具伸缩性。例如,如果你的系统添加或移除了一个SCSI硬盘,这有可以改变你的设备名,但它不会修改你的卷标签。
对于NFS mount操作,这个字段应该包含host:dir格式的信息,例如:knuth.aeb.nl:/,对于进程文件系统procfs,使用proc。
第三列:文件系统类型fstab中的第三列指示了设备或者分区的文件系统类型。它支持很多种类的文件系统,我们在这里只介绍最为常用的。如果想了解你的kernel目前支持哪些文件系统,可以查看/proc/filesystems的内容。如果这个字段定义为swap,这条纪录将关联到一个用于交换目的的文件或分区。如果这个字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。
ext2 和 ext3: Linux下的Ext2文件系统,是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。至于Ext3文件系统,它属于一种日志文件系统,是对ext2系统的扩展。日志式文件系统的优越性在于,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回朔追踪。由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔并重整被中断的部分,而不必花时间去检查其他的部分,故文件系统检测不一致时,重整的工作速度相当快,几乎不需要花时间。
reiserfs: ReiserFS是一个非常优秀的文件系统。也是最早用于Linux的日志文件系统之一,其机制比Ext3要先进得多,风雷小弟一直使用的就是它,很多发行版现在也把它作为默认文件系统了。可惜其作者前段时间出事了……具体情况就不说了,也不知道下一代reiserfs4还能不能出来,因为ext4都有了。
swap: Swap,即交换区,把它想象成虚拟内存就行了。
vfat 和 ntfs:一看就知道是Windows分区格式了,呵呵。98,me等系统都是使用的vfat,也就是最流行的fat32格式,而NT系列则多使用 NTFS,当然也不是固定的,因此2000或者XP系统要具体情况具体分析。当初Linux对NTFS的写入支持不好,所以大多数资料都建议用户使用 vfat格式,但是现在支持已经很好了,即使不重新编译内核,也可以通过ntfs-3g来进行写入支持(具体方法请参考这篇文章),因此不用太在意这个了。
auto:当然,这不是一个文件系统类型。auto只是表示,文件系统的类型将被自动检测。在上面的示例中,你会发现软驱和光驱的文件系统类型都是auto,为什么呢?因为它们的文件系统类型随时都可能改变,比如软驱,优盘这种设备,可能今天是vfat格式,明天你就把它格式化成了ntfs,因此,最明智的做法就是告诉系统,我没法确定这东西的当前类型,还是你自己检测吧。
udf: 由于刻录光驱越来越流行,现在很多发行版自带的fstab中,光驱的文件格式类型是UDF,UDF是Universal Disc Format的缩写,与ISO 9660格式相容。它采用标准的封装写入技术(PW,Packet Writing)将CD-R/CD-RW当作硬盘使用,用户可以在光盘上修改和删除文件。利用UDF格式进行刻录时,刻录软件将数据打包,并在内存中临时建立一个特殊文件目录表,同时接管系统对光盘的访问。
iso9660: 很多光驱也使用的这个选项。ISO9660是一种描述适合CD盘片的电脑文件结构的国际标准。采用此标准的盘片可以在不同的操作系统上使用,如MAC和Windows。
第四列:挂载选项fstab中的第四列表示设备或者分区所需要的挂载选项。这一列也是fstab中最复杂最容易出错的一列,当然,只要你能知道一些最常用的选项是什么意思,就可以让你从头疼中解脱出来。如果要把可用的选项一项一项介绍……恩,我估计我会写到明天,所以,我还是只是分析最常用的一些选项,如果你想知道更多的东西,还是求助于man吧。
auto 和 noauto: 这是控制设备是否自动挂载的选项。auto是默认选择的选项,这样,设备会在启动或者你使用mount -a命令时按照fstab的内容自动挂载。如果你不希望这样,就使用noauto选项,如果这样的话,你就只能明确地通过手工来挂载设备。
user 和 nouser:这是一个非常有用的选项,user选项允许普通用户也能挂载设备,而nouser则只允许root用户挂载。nouser是默认选项,这也是让很多 Linux新手头疼的东西,因为他们发现没有办法正常挂载光驱,Windows分区等。如果你作为普通身份用户遇到类似问题,或者别的其他问题,就请把 user属性增加到fstab中。
exec 和 noexec: exec允许你执行对应分区中的可执行二进制程序,同理,noexec的作用刚好相反。如果你拥有一个分区,分区上有一些可执行程序,而恰好你又不愿意,或者不能在你的系统中执行他们,就可以使用noexec属性。这种情况多发生于挂载Windows分区时。exec是默认选项,理由很简单,如果 noexec变成了你/根分区的默认选项的话……
ro: 以只读来挂载文件系统。
rw: 以可读可写的属性来挂载系统。
sync 和 async:对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,通俗点讲,就是当你拷贝一个东西到设备或者分区中时,所有的写入变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
有时候这种机制蛮不错的,因为sync会影响你系统的运行速度,但是这也会带来一些问题。想一想,当你希望将一个文件拷贝到u盘上时,你执行了 cp 命令,却忘记执行umount命令(它会强行将缓冲区内容写入),那么你拷贝的文件实际上并没有在u盘上面。如果你是使用的mv命令,而你又很快将u盘拔出……恭喜你,文件会从这个星球上消失的。因此,虽然async是默认属性,但是对于u盘,移动硬盘这种可移动存储设备,最好还是让他们使用sync选项。
defaults: 所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。
一般用户没有特殊需求,直接使用defaults就可以了。看完介绍,我们再回过头去看看前面的示例内容,以光驱为例,主要关注挂载选项这里,可以看到,光驱和其他分区设备的不同是ro,因为普通光驱是只读的。而exec则让你可以从光驱上直接执行某些程序。
第五、六列:dump和fsck选项Dump和fsck?这是什么东西?dump(转储) 是一个备份工具,而fsck是一个文件系统扫描检查工具。我不会在这里详细介绍它们,因为用man或者google都可以获得更加详细的信息。
fstab的第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0。(第五列表示“转储频率”的值,理论上说,可以由备份设备来使用,但通常不用。)
第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。(fsck工具按照/etc/fstab 文件中第六字段 fs_passno 指定的顺序对各文件系统进行检查。 fs_passno 值为0 的文件系统将被跳过,不会被检查。fs_passno值 大于0 的文件系统将被按顺序检查, fs_passno 值最小的文件系统将被最先检查。如果多个文件系统有相同的pass号,fsck将试着并行处理这些文件系统,尽管它不允许在同一个物理磁盘上同时运行多个文件系统检查程序。即只有位于不同硬盘上的文件系统才应该并行检查。)
附图说明:(图片提供者:
stlxv大侠


另外参考
[图片版]新手当自强(续)FAQ(请发帖提问前一定进来看看!)
adagio大侠力作
请问怎么访问windows分区?怎么自动挂载windows分区?为什么要挂载?什么是fstab?
每个分区都需要挂载(mount)以后才能使用,包括系统根分区,家目录,swap等等,这些是启动时系统已经帮你搞定的,只是你不知道而已。
那么系统是怎么搞定的呢?通过fstab文件啊!你可以打开/etc/fstab自己看看,比如我的有这样两行(不是只有这两行啊,我用这个举例,其他可以类推):
# /dev/sdb1
UUID=41baef7a-70fa-4bd0-8ea0-25be9c5ef643   /   ext3   relatime,errors=remount-ro   0   1
第一行是注释,特征是开头一定有一个字符“#”。这是给你看的,告诉你它(系统)接下来将要做什么。换句话说,对于电脑来说,这一行是废话,它懒得管!
●这是linux的语法格式,在其他配置文件里也可以见到。推广一下,如果其他地方有一行你不希望它生效,但又不想删除的话────对喽,在开头加上一个“#”就行了。
第二行是真正的重点了,注意其中每一个空格或者Tab符号都代表一个指令串的结束,一个或连续的多个空格或者Tab符号都将被视为一个。数一数,5个Tab把这一句分为了六个部分对吧?这六个部分意义如下:
1.UUID=xxxxxxx,这是告诉系统────把这个分区给我挂上!(指定目标分区,即sdb1,即本人的第二硬盘第一主分区)。每个人的都不同啊,千万别抄我的!
为什么不直接用sdb1而要搞一个这种稀奇古怪的xxxxxx呢?
当然,也可以用sdb1指定的。但是你想过没有,如果有一天我心血来潮,突然想把sda拔掉用来砸人呢?后果是严重的!人,砸死了没啥,可是系统就没法启动了!因为这个sdb1现在变成了sda1啦!电脑可不管这个,非要找到sdb1它才干活啊!
而UUID呢?它是每个硬盘分区的全球全太阳系全银河系全宇宙唯一标示符,除非你进行了类似重新格式化这种变动分区表的操作,否则它永远不变!粉NB是不?更多知识自己看:
http://zh.wikipedia.org/wiki/UUID
讨厌喔,人家是菜鸟嘛!怎么知道什么油油爱地耶!
别着急,粉简单喔,你只需打开终端,输入以下指令就知道啦:
ls -al /dev/disk/by-uuid
这是我的结果:
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 01C7A446EF220A80 -> ../../sda6
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 227411CA7411A199 -> ../../sdb6
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 2A58D7CE58D796C3 -> ../../sda7
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 3E40C99340C95277 -> ../../sdb5
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 4028B77B28B76F12 -> ../../sda1
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 41baef7a-70fa-4bd0-8ea0-25be9c5ef643 -> ../../sdb1
lrwxrwxrwx 1 root root  10 2009-03-05 02:32 E46CE5006CE4CDFC -> ../../sda8
看到倒数地二行啦,呵呵,甚至不用自己输入,粘贴过来就行了!大妈都会!
2.第二栏“/”,这是指定了该设备挂载的位置(目录),因为这一句是挂载的根目录,所以只有一个”/”。这个当然不用你管,你需要做的是挂载你需要访问分区到你指定的位置(目录)!
很多教材都说要挂载到/mnt,不过我很不以为然,我们大多数人都是单机用户是吧?对于单机用户,最好的挂载位置是/home!原因么自己想吧!
请在你的/home下面事先建立一个空目录,比如叫“winD”(不要随随便便,大小写敏感喔),挂载之前不要在这个目录放任何文件,放了也白放,一挂载就看不到了(不会丢失,就是看不到,突然想起可以用这种方式来藏文件嘿嘿)。
一定要事先喔,如果没有这个目录是挂不上的。另外你要挂几个分区就事先建立几个目录,别偷懒!
3.第三栏是告诉电脑,这个分区用的是什么文件系统。我的根分区是ext3,所以如此。
这个也不能乱抄,要根据自己的实际情况来定,大多数人都是要挂载windows下的某个“盘符”是吧?那么如果是FAT和FAT32,就写成“vfat”;如果是NTFS,就写成“ntfs-3g”。
4.第四栏是很复杂的参数,但必不可少。好在一般应用,输入“defaults”即默认设置即可。如果你想进行更严格的存取控制的话就自己研究吧!
如果你发现挂载后出现乱码,就改成“defaults,utf-8”,基本就没问题了。
5.第五、六栏也是必不可少的参数,对于win分区,就写成“0 0”即可,原因不必深究。
●好了,总结一下。
目标分区,常用三种方式指定:
●UUID(如前述)
●设备名称(如“/dev/sdb1”)
●分区卷标(如“LABEL=winD”,当然。必须要存在。可以在windows资源管理器里改)。
强烈推荐UUID,因为后两种方式非常容易混淆,粉不够严谨。
挂载目录,必须事先建立好。也可以是已存在的任何目录(系统本身要使用的除外,比如/etc、/usr、/var这些,千万别乱来啊!)。
以下是一个例子
UUID=3E40C99340C95277   /home/winD   ntfs-3g   defaults   0   0明白了吧?
每行挂载一个分区就写一行,要挂载两个就写两行,要挂载三个就三行,一百个就一百行!(哥哥,不会吧!)
呵呵,还等什么?开工啊!终端输入:
sudo gedit /etc/fstab
你会看到一些系统自动生成的语句,研究一下就行了,千万别动!一点都不能动!大家都是成年人了,乱动的话一律后果自负!不关我的事啊!
在最后加入你的新行就行了!一切搞定之后,终端输入
sudo mount -a
赶紧看看吧,在“/home/winD”目录里就是你朝思暮想的那个“D盘”!Yeah!
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109488/showart_2139108.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP