刚刚上面说了许多,那么可不可以在开机的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过,在开始说明前,这里要先跟大家说一说系统挂载的一些限制:
- 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
- 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则 (FHS)
- 所有 mount point 在同一时间之内﹐只能挂载一次。
- 所有 partition 在同一时间之内﹐只能挂载一次。
- 如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
让我们直接查阅一下 /etc/fstab 这个文件的内容吧!
[root@study ~]# cat /etc/fstab
# Device Mount point filesystem parameters dump fsck
/dev/mapper/centos-root / xfs defaults 0 0
UUID=94ac5f77-cb8a-495e-a65b-2ef7442b837c /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
其实 /etc/fstab (filesystem table) 就是将我们利用mount指令进行挂载时, 将所有的选项与参数写入到这个文件中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用指令的支持! 与开机时是否进行文件系统检验fsck等指令有关。 这个文件的内容共有六个字段,这六个字段非常的重要!你“一定要背起来”才好! 各个字段的总结数据与详细数据如下:
Tips鸟哥比较龟毛一点,因为某些 distributions 的 /etc/fstab 文件排列方式蛮丑的, 虽然每一栏之间只要以空白字符分开即可,但就是觉得丑,所以通常鸟哥就会自己排列整齐, 并加上注解符号(就是 # ),来帮我记忆这些信息!
[设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
- 第一栏:磁盘设备文件名/UUID/LABEL name:
这个字段可以填写的数据主要有三个项目:
- 文件系统或磁盘的设备文件名,如 /dev/vda2 等
- 文件系统的 UUID 名称,如 UUID=xxx
- 文件系统的 LABEL 名称,例如 LABEL=xxx
因为每个文件系统都可以有上面三个项目,所以你喜欢哪个项目就填哪个项目!无所谓的!只是从鸟哥测试机的 /etc/fstab 里面看到的,在挂载点 /boot 使用的已经是 UUID 了喔!那你会说不是还有多个写 /dev/mapper/xxx 的吗?怎么回事啊? 因为那个是 LVM 啊!LVM 的文件名在你的系统中也算是独一无二的,这部份我们在后续章节再来谈。 不过,如果为了一致性,你还是可以将他改成 UUID 也没问题喔!(鸟哥还是比较建议使用 UUID 喔!) 要记得使用 blkid 或 xfs_admin 来查询 UUID 喔!
- 第二栏:挂载点 (mount point)::
就是挂载点啊!挂载点是什么?一定是目录啊~要知道啊!忘记的话,请回本章稍早之前的数据瞧瞧喔!
- 第三栏:磁盘分区的文件系统:
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行! 包括 xfs, ext4, vfat, reiserfs, nfs 等等。
- 第四栏:文件系统参数:
记不记得我们在mount这个指令中谈到很多特殊的文件系统参数? 还有我们使用过的“-o codepage=950”?这些特殊的参数就是写入在这个字段啦! 虽然之前在mount已经提过一次,这里我们利用表格的方式再汇整一下:
参数 | 内容意义 |
---|---|
async/sync 非同步/同步 | 设置磁盘是否以非同步方式运行!默认为 async(性能较佳) |
auto/noauto 自动/非自动 | 当下达 mount -a 时,此文件系统是否会被主动测试挂载。默认为 auto。 |
rw/ro 可读写/只读 | 让该分区以可读写或者是只读的型态挂载上来,如果你想要分享的数据是不给使用者随意变更的, 这里也能够设置为只读。则不论在此文件系统的文件是否设置 w 权限,都无法写入喔! |
exec/noexec 可执行/不可执行 | 限制在此文件系统内是否可以进行“执行”的工作?如果是纯粹用来储存数据的目录, 那么可以设置为 noexec 会比较安全。不过,这个参数也不能随便使用,因为你不知道该目录下是否默认会有可执行文件。举例来说,如果你将 noexec 设置在 /var ,当某些软件将一些可执行文件放置于 /var 下时,那就会产生很大的问题喔! 因此,建议这个 noexec 最多仅设置于你自订或分享的一般数据目录。 |
user/nouser 允许/不允许使用者挂载 | 是否允许使用者使用 mount指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设置为 nouser 啰! |
suid/nosuid 具有/不具有 suid 权限 | 该文件系统是否允许 SUID 的存在?如果不是可执行文件放置目录,也可以设置为 nosuid 来取消这个功能! |
defaults | 同时具有rw, suid, dev, exec, auto, nouser, async等参数。 基本上,默认情况使用 defaults 设置即可! |
- 第五栏:能否被 dump 备份指令作用:
dump 是一个用来做为备份的指令,不过现在有太多的备份方案了,所以这个项目可以不要理会啦!直接输入 0 就好了!
- 第六栏:是否以 fsck 检验扇区:
早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整 (clean)。 不过这个方式使用的主要是通过 fsck 去做的,我们现在用的 xfs 文件系统就没有办法适用,因为 xfs 会自己进行检验,不需要额外进行这个动作!所以直接填 0 就好了。
好了,那么让我们来处理一下我们的新建的文件系统,看看能不能开机就挂载呢?
例题:假设我们要将 /dev/vda4 每次开机都自动挂载到 /data/xfs ,该如何进行?答:首先,请用nano将下面这一行写入 /etc/fstab 最后面中;
[root@study ~]# nano /etc/fstab
UUID="e0fa7252-b374-4a06-987a-3cb14f415488" /data/xfs xfs defaults 0 0
再来看看 /dev/vda4 是否已经挂载,如果挂载了,请务必卸载再说!
[root@study ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda4 1038336 32864 1005472 4% /data/xfs
# 竟然不知道何时被挂载了?赶紧给他卸载先!
# **因为,如果要被挂载的文件系统已经被挂载了(无论挂载在哪个目录),那测试就不会进行喔!**
[root@study ~]# umount /dev/vda4
最后测试一下刚刚我们写入 /etc/fstab 的语法有没有错误!这点很重要!因为这个文件如果写错了, 则你的 Linux 很可能将无法顺利开机完成!所以请务必要测试测试喔!
[root@study ~]# mount -a
[root@study ~]# df /data/xfs
最终有看到 /dev/vda4 被挂载起来的信息才是成功的挂载了!而且以后每次开机都会顺利的将此文件系统挂载起来的! 现在,你可以下达 reboot 重新开机,然后看一下默认有没有多一个 /dev/vda4 呢?
/etc/fstab 是开机时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!但是,万一发生你在 /etc/fstab 输入的数据错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然你就无法修改 /etc/fstab ,也无法更新 /etc/mtab 啰~那怎么办?没关系,可以利用下面这一招:
[root@study ~]# mount -n -o remount,rw /