可能玩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。