linux中fstab文件配置讲解

 
###1、fstab文件的作用

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

###2、下面是/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"就可以满足需要。defaults，它代表包含了选项 `rw,suid,dev,exec,auto,nouser`和`async`
其他常见的选项包括： 

    选项　　　　　　　　　　　　　　含义 
    ro　　　　以只读模式加载该文件系统 
    sync　　　不对该设备的写操作进行缓冲处理，这可以防止在非正常关机时情况下破坏文件系统，但是却降低了计算机速度 
    user　　　允许普通用户加载该文件系统 
    quota　　　强制在该文件系统上进行磁盘定额限制 
    noauto　　不再使用mount　－a命令（例如系统启动时）加载该文件系统
    fs_dump　-　该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储，若不需要转储就设置该字段为0(设置是否让备份程序dump备份文件系统，0为忽略，1为备份)
    fs_pass　-　该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序，根文件系统"/"对应该字段的值应该为1，其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0
    
###3、修改/etc/fstab实现自动挂载Windows分区，并显示中文目录

```
LABEL=/ / 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
LABEL=/usr /usr ext3 defaults 1 2
/dev/hda9 swap swap defaults 0 0
```

\#添加如下几行

```
/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0 
/dev/hda5 /mnt/win_d vfat codepage=936,iocharset=cp936 0 0 
/dev/hda6 /mnt/win_e vfat codepage=936,iocharset=cp936 0 0
``` 
 
 
 
##Linux磁盘管理—fstab文件解析
 
Linux系统/etc/fstab是一个文本文件，在这个文件中，每个文件系统（包括分区或者设备）用一行来描述，在每一行中，用空格或TAB符号来分隔各个字段，文件中以*开头的行是注释信息。fstab文件中的纪录的排序十分重要。因为 fsck，mount或umount等程序在做它们的工作时会按此顺序进行本。
 **示例（sdb1为新增的硬盘）：**

```
\#/etc/fstab: static file system information.
#
\# <file system> <mount point> <type> <options><dump> <pass>
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.