Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244761
  • 博文数量: 69
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 570
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 16:57
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(5)

2009年(63)

我的朋友

分类: LINUX

2009-03-15 21:38:45

 
fstab文件解析

 /etc/fstab是一个文本文件,在这个文件中,每个文件系统(包括分区或者设备)用一行来描述,在每一行中,用空格或TAB符号来分隔各个字段,文件中以#开头的行是注释信息。fstab文件中的纪录的排序十分重要。因为 fsck,mount或umount等程序在做它们的工作时会按此顺序进行本。

    示例(sdb1为新增的硬盘):

    # /etc/fstab: static file system information.
    #
    #          
    proc            /proc           proc    defaults        0       0
    /dev/sda1       /               ext3    errors=remount-ro 0       1
    /dev/sda6       /home           ext3    defaults        0       2
    /dev/sda5       none            swap    sw              0       0
    /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
    /dev/fd0        /media/floppy0 auto    rw,user,noauto 0       0
    /dev/sdb1       /oracel         ext3    defaults        0       2

    第一、二列:设备和默认挂载点

    第一列和第二列的内容是最简单最直接的,它们的作用就是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。大多数 Linux发行版都会为挂载点创建专门的目录,大多数是在/mnt下。

    第三列:文件系统类型

  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选项

    fstab的第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0.而第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为 1,其他文件系统应该为2.若文件系统无需在启动时扫描检查,则设置该字段为0。


---------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
 如果想开机就自动挂载(mount)上,可以在/etc/fstab上添加如下几行:

  /dev/hda5 /mnt/d vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  同时也解决了中文文件名的乱码问题,我的fstab文件如下,仅供参考:

  LABEL=/12 / ext3 defaults 1 1

  none /dev/pts devpts gid=5,mode=620 0 0

  none /proc proc defaults 0 0

  none /dev/shm tmpfs defaults 0 0

  /dev/hda4 swap swap defaults 0 0

  /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0

  /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0

  /dev/hda1 /mnt/c vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  /dev/hda5 /mnt/d vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  /dev/hda6 /mnt/e vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  /dev/hda7 /mnt/f vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  /dev/hda8 /mnt/g vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

  fstab解读

  从做到右:

  /dev/device mount-point type rules dump fsck

  1. /dev/device: 不用说了吧?例如,/dev/hda1 为M$-Win9x下的c:盘。

  2. mount-point: 挂载点。例如,把/dev/hda1挂到/mnt/mywinc下。

  3. type: ext3, vfat, ......就是要挂上的文件系统类型。

  4. rules:

  auto: 开机自动挂接;

  default, noauto: 开机不自动挂接;

  nouser: 只有root可挂;

  ro: 只读挂接;

  rw: 可读可写挂接;

  user: 任何用户都可以挂接;

  5. dump: 备份;0为从不备份,或显示上次至今备份之天数;

  6. fsck: 启动时fsck检查顺序,0为不检查, “/”永远为1;

  我的就是:

  /dev/hda1 /mnt/mywinc vfat default 0 0

  在fstab中加载分区

  mkdir /mnt/win_c

  vi /etc/fstab

  :::::add:::::

  /dev/hda1 /mnt/win_c vfat default,pagecode=936,iocharset=cp936 0 0

  /etc/fastab释疑

  1. fstab文件的作用

  文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过"mount /directoryname"命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、 mount、umount的等命令都利用该程序。

  2. fstab文件格式

  下面是/etc/fatab文件的一个示例行:

  fs_spec fs_file fs_type fs_options fs_dump fs_pass

  /dev/hda1 / ext2 defaults 1 1

  fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为/dev/hdaXN,X是IDE设备通道 (a, b, or c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:,例如:`knuth.aeb.nl:/'。对于procfs,使用`proc'来定义。

  fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。

  fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext2 (linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、iso9600等。

  fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用"defaults"就可以满足需要。其他常见的选项包括:

  选项 含义

  ro 以只读模式加载该文件系统

  sync 不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度

  user 允许普通用户加载该文件系统

  quota 强制在该文件系统上进行磁盘定额限制

  noauto 不再使用mount -a命令(例如系统启动时)加载该文件系统

  fs_dump - 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0

  fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0

  3. 示例文件

  # /etc/fstab

  /dev/hda9 swap swap defaults 0 0

  /dev/hda1 / ext2 defaults 1 1

  /dev/hda5 /home ext2 defaults 1 1

  /dev/hda6 /usr ext2 defaults 1 1

  /dev/hda7 /usr/local ext2 defaults 1 1

  /dev/hda8 /var ext2 defaults 1 1

  /dev/hdb /cdrom iso9660 noauto,user 0 0

  none /proc proc defaults 0 0

  none /dev/pts devpts gid=5,mode=620 0 0
阅读(898) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux inittab详解

给主人留下些什么吧!~~