/etc/fstab文件描述了系统可以挂载的文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。比如我们执行mount -a命令就会按序挂载/etc/fstab中指定的每条文件系统(除非添加了noauto选项)。
fstab文件中记录的排序十分重要。因为 fsck,mount或umount等程序在做它们的工作时会按此顺序进行。
以一个fstab内容作为模板进行讲解。
以#开头为注释,非#开头的每一行描述了一个文件系统挂载信息。
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=02c5e115-082c-4ec4-bd13-8cccf82a04be / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=8EFB-96A4 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
第一列和第二列的内容是最简单最直接的,它们的作用就是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。大多数 Linux发行版都会为挂载点创建专门的目录,大多数是在/mnt下,但是一些发行版(比如SUSE或者ubuntu)是在/media下。
如果想把本机上的某个设备(device)挂载上来,写法如:/dev/sda1、/dev/hda2或/dev/cdrom,其中,/dev/sda1 表示第一个串口硬盘的第一个分区,也可以是第一个SCSI硬盘的第一个分区,/dev/hda1表示第一个IDE硬盘的第一个分区,/dev/cdrom 表示光驱。
要挂载的也可以是远程文件系统。做过嵌入式linux开发的朋友都可能知道 mount 192.168.1.56:/home/nfs /mnt/nfs/ -o nolock
命令所代表的意义。它的任务是把IP为192.168.1.56的远程主机上的/home/nfs/目录挂载到本机的/mnt/nfs /目录之下。如果要把它写进/etc/fstab文件中,file system这部分应填写为:192.168.1.56:/home/nfs/。
除了显式的使用设备名,你可以使用设备的UUID(Universally Unique Identifier全局唯一标识符)或设备的卷标签,例如,你可以在这个字段写成“LABEL=root”或“UUID= 3e6be9de- 8139-11d1-9106-a43f08d823a6”,这将使系统更具伸缩性。例如,如果你的系统添加或移除了一个SCSI硬盘,这有可能改变你的设备名,但它不会修改你的卷标签和UUID。
备注:用label表示之前,先要使用e2label创建卷标,如:e2label /dir_1 /dir_2,其意思是说用/dir_2来表示/dir_1的名称。然后,再在/etc/fstab下添加:
LABEL=/dir_2 /dir_2 <type> <options> <dump> <pass>
。重启后,系统就会将/dir_1挂载到/dir_2目录上。
有多种方式可以获得文件系统的uuid:
vic@ubuntu:~/Desktop$ sudo dumpe2fs /dev/sda5 |grep 'UUID'
dumpe2fs 1.45.5 (07-Jan-2020)
Filesystem UUID: 02c5e115-082c-4ec4-bd13-8cccf82a04be
第三列指示了设备或者分区的文件系统类型。
第四列表示设备或者分区所需要的挂载选项。
auto 和 noauto,控制设备是否自动挂载的选项。
user 和 nouser,user选项允许普通用户也能挂载设备,而nouser则只允许root用户挂载,nouser是默认选项。
exec 和 noexec,exec允许你执行对应分区中的可执行二进制程序,exec是默认选项。
ro,以只读来挂载文件系统。 rw,以可读可写的属性来挂载系统。
sync 和 async,对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,就是当你拷贝一个东西到设备或者分区中时,所有的写入变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
defaults,所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。
第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0。
第六列是fsck选项,fsck命令(文件系统检测和修复)通过检测该字段来决定文件系统扫描检查/修复顺序,根文件系统/该字段的值应该为1(表示最先检查),其他文件系统通常为2(数字一致的fsck会尝试并发检测)。若文件系统无需在启动时扫描检查,则设置该字段为0。