注:本文的原文创建时间是2003年,最后更新时间是2009年
在Linux系统中,有一个/etc/fstab文件 。该文件是和mount命令结合使用的。该文件是一个配置文件,里面存储的是计算机上所有的存储设备和分区的信息,即这些设备以什么方式挂载到什么地方。如果在Linux上不能访问Windows的分区,或者不能挂载CD或软盘,或者不能使用CD-RW,则可能就是/etc/fstab文件配置错了(misconfigured)。因而,通常情况下可以通过编辑/etc/fstab文件来修复这些设备挂载问题。编辑/etc/fstab文件必须需要root权限。
不同机器的系统、设备或分区不同,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 |
/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 |
可以看出,该文件每行包含了一个设备或分区的信息。其中,第一列是设备名,第二列是设备挂载点,第三列是文件系统类型,第四列是挂载选项,第五列是备份选项,第六列是文件系统检查选项.下面详细解读每一列:
-
第一、二列:设备名和挂载点
第一、二列的内容是十分明确的(straightforward)。它们告诉了mount命令挂载的设备分区和挂载点,与你自己手动使用mount命令去挂载设备效果是一样的。在/etc/fstab中为设备指定的挂载点是该设备默认的挂载点,即在挂载该设备时,不指定其他挂载点的情况下会默认挂载到该/etc/fstab里指定的目录。
很多Linux发行版(不知道是不是这样翻译,Linuxdistros)会创建特殊的目录来作为 挂载点。大多数是用的目录/mnt,但有些(如SuSE)在/media下。上面的/etc/fstab示 例中就是使用的SuSE的挂载点。
所以,命令:mount/dev/fd0 会把/dev/fd0挂载到/media/floppy,因为在/etc/fstab有 指定该项。如果/etc/fstab中没有对应的项,则该命令执行时mount就会找不到挂载点。
用户可以自由地修改默认的挂载点,但该挂载点必须是系统上已存在的目录。如果不存 在,则可以自己创建它。
有些设备或分区是在Linux系统启动时自动挂载的,如下:
/dev/hda2/
ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
如果这些设备挂载不成功,则使用
Linux
系统就会出现问题,因为你无法访问
/
目录。
操作系统就是通过查找
/etc/fstab
文件来知道
/dev/hda2
和
/dev/hdb1
的挂
载点的。(即根目录的挂载也是从该文件来制定的)
-
第三列:文件系统类型
/etc/fstab
文件的第三列指定了设备或分区的文件系统类型。系统支持很多种文件系统,但这里只考察一些最常用的。
-
Ext2
和
ext3:
通常情况下
Linux
系统的分区是
ext3
。
ext2
曾是
Linux
的标准文件系统,后来
ext3
和
reiserfs
变成了几乎所有的新
Linux
发行版的默认文件系统(我的
ubuntu12.04
上是
ext4
)
.Ext3
是一个比
ext2
新的文件系统,不同之处就在于它的日志系统(
journaled
)
,
意味着即使机器在不正常的情况下关闭了,数据也不会丢失,且系统在下次启动时不会花费时间来使用历史记录来检查文件系统。
-
Reiserfs:
该文件系统很不错(原作者这样评价的)。和
ext3
一样,
reiserfs
也是一个日志文件系统,但是比
ext3
更高级。很多
Linux
发行版(包括
SuSE
)把它作为
Linux
分区的默认文件系统。
-
Swap:
这个文件系统明是自己解释的(
self-explanatory
,是系统自己添加的?系统安装的时候确实是要指定的)。该文件系统类型(
swap
)是用在交换分区的。
-
Vfat
和
ntfs:
像
USB
这样的设备更可能格式化成
vfat
(也叫做
FAT32
)这样的格式
.Windows
的分区多可能是
Vfat
或
NTFS
。
Windows
的
9x
系列(
95
,
98
,
ME
)都使用的是
Vfat,NT
系列(
NT
,
2000
,
XP
,
Vista,7
)使用的是
NTFS
,但是也可以格式化成
Vfat.
-
Auto:
这不是文件系统类型。“
auto”
选项只是简单意味着文件系统类型会被自动检测到。如果看过很多
fstab
的示例,会发现
floopy
和
CD-ROM
都是使用“
auto”
作为它们的文件系统。原因就在于它们的文件系统类型是多变的。一个
floopy
设备可以格式成
windows
的格式或在
Linux EXT2
下使用时又格式化成其他。因而诸如
floopy
、
cdrom
等媒体会让系统自己检测其文件系统类型。
-
第四列:挂载选项
fstab
的第四列列出了用于设备或分区的所有挂载选项。这是
fstab
里最麻烦的部分,但是熟悉一些常用的选项意义可以让你避免不少问题。下面会介绍一些常用的选项,更全的选项可以去参考
mount
。
-
auto
和
noauto:
设置
auto
选项时,则该设备会被自己的挂载(是在系统引导时,或者使用了
mount-a
命令)。
auto
是默认的选项。如果不想让设备自动挂载,则可以使用
noauto
选项。设置了
noauto
时,则设备会在明确的挂载命令时挂载(即另外使用挂载命令来挂载这个设备)。
-
user
和
nouser:
这些是非常有用的选项。
user
选项允许常规用户去挂载该设备,而
nouser
选项只允许
root
用户挂载该设备。默认情况下是
nouser
。如果当前用户不能挂载
cdrom
,
windows
分区或其他,则在
/etc/fstab
里添加
user
选项。
-
exec
和
noexec:exec
允许用户执行该分区上的二进制文件,而
noexec
就不允许了。
noexec
对那些包含有二进制文件,而你又不想让这些文件在系统里运行的分区有用,如
windows
分区。
-
ro:
以只读方式挂载文件系统
(read-only)
。
-
rw:
以可读可写方式挂载文件系统。当挂载的设备或分区不能读写时,检查下是不是没设置该选项
-
sync
和
async:
设置文件系统的
I/O
方式。
sync
意味着同步(
synchronously
)。在示例中,
floppy
设备用到了该选项。实际作用就是:当你向
floppy
盘中复制文件时,同时会把修改写到物理盘中。相反的,
async
选项就设置了异步
I/O
,这时,再向软盘复制文件时,则修改会在命令执行一段时间后才会写到物理设备中。这种方式有时是非常好的,但是可能会产生冲突,如在未
umount
软盘的情况下就移除了该设备,则复制的文件可能根本就没有写到软盘上。默认情况下,使用的是
async
。如果经常会在没有
umount
设备的情况下就移走设备,则最好设置
sync
。
-
defaults:
总的默认设置选项为:
rw,suid,dev,exec,auto,nouser
和
async
。
-
第五、六列:备份和核对(
check
)选项
dump
是一个备份工具,
fsck
是一个文件系统核对工具。这里会简单地介绍下,详细的情况需要参考相关命令。
dump
工具检查
fstab
的第五列并使用对应的数子来决定文件系统是否该备份。如果是
0
,则不会对文件系统备份。该选项大多数情况下为
0
。
第六列是
fsck
选项。
fsck
会检查
fstab
第六列的数字,该数字决定了
fsck
核对文件系统的顺序,如果为
0
,则不核对该文件系统。
参考文献:http://www.tuxfiles.org/linuxhelp/fstab.html