在上一篇文章中,我们为当前主机添加了一块20GB的硬盘并分成了两个分区,分别为/dev/sdb1和/dev/sdb2,并将这两个分区分别挂载到/data1和/data2目录下。在成功挂载之后,我重启了主机。重启之后发现/dev/sdb1和/dev/sdb2并没有挂载到/data1和/data2下,需要手动再执行挂载。所以,使用mount的挂载操作只在当前当次有效,当系统重启或者再次开机后必须再次执行mount命令,这就带来了很大的不便。
在Linux下存在这样一个文件:
/etc/fstab
这个文件就是用来解决上面的问题,在该文件中定义的分区将在系统开机是被自动挂载。所以如果/dev/sdb1和/dev/sdb2需要自动挂载,则必须修改该文件。
我们先来看下这个文件中的内容:
## /etc/fstab# Created by anaconda on Thu Oct 18 11:19:50 2018## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/centos-root / xfs defaults 0 0UUID=f1baaf68-7388-4871-a0c0-671b06f59ddf /boot xfs defaults 0 0/dev/mapper/centos-swap swap swap defaults 0 0
除去注释掉的内容,就是该文件对于自动挂载的分区的定义了。该定义按照以下的规则进行:
分区 挂载点 文件系统 参数 是否dump 是否fsck
下面来详细分析下这些选项的意义
分区
需要挂载的分区可以用三种方式标识:设备名、标签和UUID。
- 设备名:类似/dev/sda1这种表示方法。这种方法最为简单,直接将设备名写入即可。但该方法有一种缺点,Linux下的设备名与硬盘的位置密切相关,在第二个插槽的硬盘被标识为/dev/sdb,如果该硬盘更换到第三个插槽,则设备名将变为/dev/sdc。所以使用该方法时,如果硬盘位置改变则必须重新进行配置
- 标签:标签是自定义的一个分区别名,使用标签进行标识时需使用LABEL=label name进行设置。这里使用的标签必须唯一而不能重名。
- UUID:UUID是在对分区进行格式化时生成的唯一的设备标识,使用UUID进行标识时需使用UUID=UUID number进行设置。由于UUID是唯一的,所以使用UUID不用担心UUID的变化而重新修改配置。分区的UUID可以使用命令lsblk –f命令查看。
挂载点
分区要挂载到哪个目录下,直接设置目录名即可。
文件系统
要挂载的分区所使用的文件系统,支持常用的文件系统如ext3、ext4、xfs、ntfs等,也可以设置成auto,mount命令会猜测该分区使用的文件系统。
参数
在分区挂载时使用的参数,有些参数是特定的文件系统才有的。这些参数比较繁多。
- auto - 启动时或使用mount -a命令时自动挂载
- noauto - 只在你的命令下被挂载
- defaults - 使用文件系统的默认挂载参数
- exec - 允许执行此分区的二进制文件
- noexec - 不允许执行此分区的二进制文件
- ro - 以只读模式挂载
- rw - 以可读写模式挂载
- user - 允许任意用户挂载,若无显示定义,隐含启用noexec、nosuid、nodev参数
- users - 允许所有users组中的用户挂载
- nouser - 只能被root挂载
- owner - 允许设备所有者挂载
- sync - I/O同步进行
- async - I/O异步进行
- dev - 解析文件系统上的块特殊设备
- nodev - 不解析文件系统上的块特殊设备
- suid - 允许suid操作和设定sgid位。该参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限
- nosuid - 禁止suid操作和设定sgid位
- noatime - 不更新文件系统上inode访问记录,可以提升性能
- nodiratime - 不更新文件系统上的目录inode访问记录,可以提升性能
- relatime - 实时更新inode access记录。只有在记录中的访问时间早于当前访问才会被更新(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能
- flush - vfat的选项。更频繁的刷新数据,复制对话框或进度条在全部数据写入后才消失
是否dump
是否调用dump进行备份。允许的设置为0或1,0表示不备份,1表示备份。
是否fsck
是否调用fsck对文件系统进行检测。允许的设置为0、1或2。0表示不检测,1表示最早检测,一般用于根目录,2表示在1完成之后进行检测。
一个例子:使/dev/sdb1和/dev/sdb2在开机时自动挂载到/data1和/data2
为了使配置稳定而不用修改,这里使用UUID作为分区的标识,所以先查看两个分区对应的UUID:
[root@localhost ~]# lsblk -f |grep sdbsdb ├─sdb1 xfs 9b058e8b-4877-4ba2-a5eb-b190b6e3f381 └─sdb2 ext4 bfac0a61-747e-47d8-a9eb-5248b774f909
这里同时得到了/dev/sdb1和/dev/sdb2的文件系统类型,在/etc/fstab文件中添加以下配置:
UUID=9b058e8b-4877-4ba2-a5eb-b190b6e3f381 /data1 xfs defaults 0 0UUID=bfac0a61-747e-47d8-a9eb-5248b774f909 /data2 ext4 defaults 0 0
配置完成后使用mount -a命令挂载/etc/fstab文件中的所有分区:
[root@localhost ~]# mount -a[root@localhost ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 22G 2.1G 20G 10% /devtmpfs devtmpfs 3.9G 0 3.9G 0% /devtmpfs tmpfs 3.9G 0 3.9G 0% /dev/shmtmpfs tmpfs 3.9G 8.9M 3.9G 1% /runtmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup/dev/sda1 xfs 1014M 142M 873M 14% /boottmpfs tmpfs 783M 0 783M 0% /run/user/0/dev/sdb1 xfs 9.4G 33M 9.3G 1% /data1/dev/sdb2 ext4 11G 41M 9.9G 1% /data2
可以看到/dev/sdb1和/dev/sdb2分区已经挂载上了,说明我们的配置已经生效了。之后每次启动就无需再手动挂载这两个分区了。