刚刚上面说了许多,那么可不可以在开机的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过,在开始说明前,这里要先跟大家说一说系统挂载的一些限制:

    • 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
    • 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则 (FHS)
    • 所有 mount point 在同一时间之内﹐只能挂载一次。
    • 所有 partition 在同一时间之内﹐只能挂载一次。
    • 如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
      让我们直接查阅一下 /etc/fstab 这个文件的内容吧!

    其实 /etc/fstab (filesystem table) 就是将我们利用 指令进行挂载时, 将所有的选项与参数写入到这个文件中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用指令的支持! 与开机时是否进行文件系统检验 fsck 等指令有关。 这个文件的内容共有六个字段,这六个字段非常的重要!你“一定要背起来”才好! 各个字段的总结数据与详细数据如下:

    Tips 鸟哥比较龟毛一点,因为某些 distributions 的 /etc/fstab 文件排列方式蛮丑的, 虽然每一栏之间只要以空白字符分开即可,但就是觉得丑,所以通常鸟哥就会自己排列整齐, 并加上注解符号(就是 # ),来帮我记忆这些信息!

    • 第一栏:磁盘设备文件名/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)::
      就是挂载点啊!挂载点是什么?一定是目录啊~要知道啊!忘记的话,请回本章稍早之前的数据瞧瞧喔!

    • 第四栏:文件系统参数:
      记不记得我们在 这个指令中谈到很多特殊的文件系统参数? 还有我们使用过的“-o codepage=950”?这些特殊的参数就是写入在这个字段啦! 虽然之前在 mount 已经提过一次,这里我们利用表格的方式再汇整一下:

    • 第五栏:能否被 dump 备份指令作用:
      dump 是一个用来做为备份的指令,不过现在有太多的备份方案了,所以这个项目可以不要理会啦!直接输入 0 就好了!

    • 第六栏:是否以 fsck 检验扇区:
      早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整 (clean)。 不过这个方式使用的主要是通过 fsck 去做的,我们现在用的 xfs 文件系统就没有办法适用,因为 xfs 会自己进行检验,不需要额外进行这个动作!所以直接填 0 就好了。

    好了,那么让我们来处理一下我们的新建的文件系统,看看能不能开机就挂载呢?

    例题:假设我们要将 /dev/vda4 每次开机都自动挂载到 /data/xfs ,该如何进行?答:首先,请用 将下面这一行写入 /etc/fstab 最后面中;

    1. UUID="e0fa7252-b374-4a06-987a-3cb14f415488" /data/xfs xfs defaults 0 0

    再来看看 /dev/vda4 是否已经挂载,如果挂载了,请务必卸载再说!

    最后测试一下刚刚我们写入 /etc/fstab 的语法有没有错误!这点很重要!因为这个文件如果写错了, 则你的 Linux 很可能将无法顺利开机完成!所以请务必要测试测试喔!

    1. [root@study ~]# mount -a
    2. [root@study ~]# df /data/xfs

    最终有看到 /dev/vda4 被挂载起来的信息才是成功的挂载了!而且以后每次开机都会顺利的将此文件系统挂载起来的! 现在,你可以下达 reboot 重新开机,然后看一下默认有没有多一个 /dev/vda4 呢?

    1. [root@study ~]# mount -n -o remount,rw /

    7.4.2 特殊设备 loop 挂载 (镜像文件不烧录就挂载使用)

    如果有光盘镜像文件,或者是使用文件作为磁盘的方式时,那就得要使用特别的方法来将他挂载起来,不需要烧录啦!

    • 挂载光盘/DVD镜像文件
      想像一下如果今天我们从国家高速网络中心(http://ftp.twaren.net)或者是昆山科大()下载了 Linux 或者是其他所需光盘/DVD的镜像文件后, 难道一定需要烧录成为光盘才能够使用该文件里面的数据吗?当然不是啦!我们可以通过 loop 设备来挂载的!

    那要如何挂载呢?鸟哥将整个 CentOS 7.x 的 DVD 镜像文件捉到测试机上面,然后利用这个文件来挂载给大家参考看看啰!

    非常方便吧!如此一来我们不需要将这个文件烧录成为光盘或者是 DVD 就能够读取内部的数据了! 换句话说,你也可以在这个文件内“动手脚”去修改文件的!这也是为什么很多镜像文件提供后,还得要提供验证码 (MD5) 给使用者确认该镜像文件没有问题!

    • 创建大文件以制作 loop 设备文件!
      想一想,既然能够挂载 DVD 的镜像文件,那么我能不能制作出一个大文件,然后将这个文件格式化后挂载呢? 好问题!这是个有趣的动作!而且还能够帮助我们解决很多系统的分区不良的情况呢!举例来说,如果当初在分区时, 你只有分区出一个根目录,假设你已经没有多余的容量可以进行额外的分区的!偏偏根目录的容量还很大! 此时你就能够制作出一个大文件,然后将这个文件挂载!如此一来感觉上你就多了一个分区啰!用途非常的广泛啦!

    下面我们在 /srv 下创建一个 512MB 左右的大文件,然后将这个大文件格式化并且实际挂载来玩一玩! 这样你会比较清楚鸟哥在讲啥!

    • 创建大型文件
      首先,我们得先有一个大的文件吧!怎么创建这个大文件呢?在 Linux 下面我们有一支很好用的程序 dd !他可以用来创建空的文件喔!详细的说明请先翻到下一章 来查阅,这里鸟哥仅作一个简单的范例而已。 假设我要创建一个空的文件在 /srv/loopdev ,那可以这样做:
    1. [root@study ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
    2. 512+0 records in <==读入 512 笔数据
    3. 512+0 records out <==输出 512 笔数据
    4. 536870912 Bytes 537 MB copied, 12.3484 seconds, 43.5 MB/s
    5. # if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的设备!
    6. # of 是 output file ,将一堆零写入到后面接的文件中。
    7. # bs 是每个 block 大小,就像文件系统那样的 block 意义;
    8. # count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!
    9. -rw-r--r--. 1 root root 512M Jun 25 19:46 /srv/loopdev

    dd 就好像在叠砖块一样,将 512 块,每块 1MB 的砖块堆叠成为一个大文件 (/srv/loopdev) ! 最终就会出现一个 512MB 的文件!粉简单吧!

    • 大型文件的格式化
      默认 xfs 不能够格式化文件的,所以要格式化文件得要加入特别的参数才行喔!让我们来瞧瞧!
    1. [root@study ~]# mkfs.xfs -f /srv/loopdev
    2. [root@study ~]# blkid /srv/loopdev

    其实很简单啦!所以鸟哥就不输出格式化的结果了!要注意 UUID 的数值,未来会用到!

    • 挂载
      那要如何挂载啊?利用 mount 的特殊参数,那个 -o loop 的参数来处理!

    通过这个简单的方法,感觉上你就可以在原本的分区在不更动原有的环境下制作出你想要的分区就是了! 这东西很好用的!尤其是想要玩 Linux 上面的“虚拟机”的话, 也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载,真的非常有用的喔! ^_^

    比较特别的是,CentOS 7.x 越来越聪明了,现在你不需要下达 -o loop 这个选项与参数,它同样可以被系统挂上来! 连直接输入 blkid 都会列出这个文件内部的文件系统耶!相当有趣!不过,为了考虑向下兼容性,鸟哥还是建议你加上 loop 比较妥当喔! 现在,请将这个文件系统永远的自动挂载起来吧!

    1. [root@study ~]# nano /etc/fstab
    2. /srv/loopdev /data/file xfs defaults**,loop** 0 0
    3. # 毕竟系统大多仅查询 block device 去找出 UUID 而已,因此使用文件创建的 filesystem,
    4. # 最好还是使用原本的文件名来处理,应该比较不容易出现错误讯息的!
    5. [root@study ~]# umount /mnt
    6. [root@study ~]# mkdir /data/file
    7. [root@study ~]# mount -a
    8. [root@study ~]# df /data/file
    9. /dev/loop0 520876 26372 494504 6% /data/file