在Linux操作系统中,有一个看似不起眼的文件,却牢牢掌控着整个文件系统的自动挂载机制——它就是/etc/fstab。许多刚入门的朋友第一次看到这个配置文件时,总觉得每一行像天书般难以理解。然而,只要把各个字段拆开来看,逻辑其实非常清晰。今天我们就来全面剖析这个文件,保证读完你就能独立编写自己的挂载配置。
1. fstab文件的作用
文件/etc/fstab存储的是系统中文件系统的静态信息。简单来说,它就像一张“挂载清单”,负责告诉系统在开机启动或执行mount命令时,哪个设备应该挂载到哪个目录、使用哪种文件系统、附带什么参数。只要配置得当,你甚至可以用mount /directoryname这样的简写来快速挂载一个文件系统,因为系统会自动从fstab中查找对应的设备。此外,fsck、mount、umount等命令也会读取这个文件。
2. fstab文件格式
下面是一个典型的fstab示例行,每个字段由空格或Tab分隔:
fs_spec fs_file fs_type fs_options fs_dump fs_pass
/dev/hda1 / ext2 defaults 1 1
我们来逐一拆解这六个字段的含义。
fs_spec:指定要挂载的设备或远程文件系统。对于本地IDE硬盘,通常表示为/dev/hdaXN(X是通道a、b或c,N是分区号);SCSI设备则是/dev/sdaXN。如果是NFS远程文件系统,格式为主机:路径,例如knuth.aeb.nl:/。对于proc文件系统,直接写proc。
fs_file:挂载点,即要挂载到的目录。swap设备这里填none。如果目录名包含空格,用\040来表示空格。
fs_type:文件系统类型。常见的有ext2(Linux常用)、vfat(Windows FAT32)、NTFS、iso9660等。这里还会涉及codepage(国家语言代码页)和iocharset(字符集)参数。
fs_options:挂载参数,多个参数之间用逗号分隔。大多数场景下defaults就够用了,它包含了rw、suid、exec、auto、nouser、async等默认选项。但有些特殊需求需要单独指定:
ro:只读挂载sync:不对写操作进行缓冲(防止非正常关机损坏文件系统,但降低性能)user:允许普通用户挂载quota:启用磁盘配额限制noauto:不在mount -a(如系统启动时)自动挂载
fs_dump:该字段被dump命令使用,用来决定文件系统多久做一次备份。0表示不备份,1表示要备份。
fs_pass:该字段被fsck命令用来决定启动时文件系统的自检顺序。根文件系统/必须设为1,其他文件系统设为2。不需要自检的设为0。
3. 示例文件
来看一个完整的fstab文件实例,注意其中包含了中文字符集配置,用于解决vfat分区中文文件名乱码的问题:
# /etc/fstab
/dev/hda8 swap swap defaults 0 0
/dev/hda9 / ext2 defaults 1 1
/dev/hda6 /wine vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda7 /winf vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hdb /cdrom iso9660 noauto,user 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
每行对应一个分区,六个字段的含义我们再对应说明:
- 第一项:设备路径,如
/dev/hda6。 - 第二项:挂载点,如
/wine。 - 第三项:文件系统类型,如
vfat。可以查看/proc/filesystems获取系统支持的类型。 - 第四项:挂载参数,比如
defaults或noauto,user。 - 第五项:dump备份标志,0为不备份。
- 第六项:fsck自检顺序,0为不自检。
再看一个更贴近实际系统的例子,其中使用了卷标(LABEL)和设备名两种方式:
LABEL=/ / ext3 defaults 1 1
/dev/sda2 /mnt/D vfat defaults 0 0
第一列可以是设备路径,也可以是设备卷标(如LABEL=/)。第二列挂载目录,第三列文件系统,第四列挂载参数,第五列备份标志,第六列自检顺序。
对于已经挂载的设备,如果想临时修改挂载参数(比如从读写改为只读),不需要卸载,可以直接用remount参数:
# mount /mnt/D/ -o remount,ro
为了安全,还可以指定其他参数:
noexec:不允许该分区上的可执行文件运行。注意:千万不要把根分区设为noexec,否则连mount命令都无法执行,系统就废了。nodev:不允许挂载设备文件。nosuid、nosgid:不允许suid和sgid位生效。nouser:不允许普通用户挂载。
如果你想让Windows分区(如vfat)开机自动挂载,同时解决中文文件名乱码,可以在fstab中添加类似这样的一行:
/dev/hda5 /mnt/d vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
最后,附上一个相对完整的fstab配置供参考(注意LABEL=/12是根分区卷标,实际使用时请按自己的分区情况修改):
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其实没有想象中那么复杂,关键在于理解每个字段的职责。一旦掌握了这个套路,你就能随心所欲地控制系统启动时的挂载行为。下次遇到分区挂载问题,不妨先打开/etc/fstab看看,说不定一眼就能找到症结所在。
