四、设定开机挂载

系统挂载的一些限制:

①根目录/是必须挂载的﹐而且一定要先于其它mount point被挂载进来。

②其它mount point必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则(FHS)

③所有mount point在同一时间之内﹐只能挂载一次。

④所有partition在同一时间之内﹐只能挂载一次。

⑤如若进行卸除﹐您必须先将工作目录移到mountpoint(及其子目录)之外。

1.开机挂载/etc/fstab/etc/mtab

我们查看一下/etc/fstab这个文件的内容,如图4.1所示。

图4.1 /etc/fstab的内容

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

除此之外,/etc/fstab还加入了dump这个备份用的命令支持,与开机时是否进行文件系统检查fsck等指令有关。

在鸟哥的书里面,这个文件的六列内容分别是:

[设备/UUID等]  [挂载点]  [文件系统]  [文件系统参数]  [dump]  [fsck]

但是在我的Ubuntu 18.04中,六列内容分别是:

[文件系统]  [挂载点]  [类型]  [选项]  [dump]  [fsck]

下面继续以鸟哥的内容来讲。

(1)第一列:磁盘设备文件名/UUID/LABEL名称:

这个字段可以填写的数据主要有三个项目:

①文件系统或磁盘的装置文件名,如 /dev/vda2 等;

②文件系统的 UUID 名称,如 UUID=xxx;

③文件系统的 LABEL 名称,例如 LABEL=xxx。

(2)第二列:挂载点。

(3)文件系统:如xfs/ext4/vaf/nfs等。

(4)文件系统参数

文件系统参数主要有以下几点

参数内容意义
async/sync
异步/同步
设定磁盘是否以异步方式运作。预设为 async(效能较佳)
auto/noauto
自动/非自动
当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为auto。
rw/ro
可擦写/只读
让该分区以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用户随意变更的,这里也能够设定为只读。
exec/noexec
可执行/不可执行
限制在此文件系统内是否可以进行执行操作。如果纯粹用来储存数据,那么可以设定为noexec会比较安全。不过,这个参数也不能随便使用,因为你不知道该目录下是否默认会有可执行程序。
user/nouser
(不)允许用户挂载
是否允许用户使用mount指令来挂载呢?一般而言,我们当然不希望一般身份的user能使用mount。
suid/nosuid
(不)具有suid权限
该文件系统是否允许SUID的存在?如果不是执行文件放置目录,也可以设定为nosuid来取消这个功能。
defaults同时具有rw,suid,dev,exec,auto,nouser,async等参数。基本上,预设情况使用defaults设定即可

(5)能否被dump备份指令作用。一般默认输入0。

(6)是否可以以fsck检查分区。

/etc/fstab是开机时的配置文件,不过,实际文件系统的挂载是记录到/etc/mtab与/proc/mounts这两个文件当中的。每次我们在更动文件系统的挂载时,也会同时更动这两个文件。但是,万一发生你在/etc/fstab输入的数据错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的/可是readonly的状态,当然你就无法修改/etc/fstab,也无法更新/etc/mtab,那怎么办?

答案是使用

mount -n -o remount,rw /

2.特殊设备loop挂载(镜像文件不刻录就挂载使用)

(1)挂载光盘/DVD镜像文件

下面以鸟哥将CentOS 7.x的DVD镜像文件挂到测试机上面的命令来做显示。

[root@study ~]# mkdir /data/centos_dvd[root@study ~]# mount -o loop /tmp/CentOS-7.0-1406-x86_64-DVD.iso /data/centos_dvd[root@study ~]# df /data/centos_dvdFilesystem     1K-blocks    Used Available Use% Mounted on/dev/loop0       4050860 4050860         0 100% /data/centos_dvd[root@study ~]# umount /data/centos_dvd/# 测试完成,卸载镜像文件

(2)新建大文件以制作loop设备文件

既然能够挂载DVD的镜像文件,那么我能不能制作出一个大文件,然后将这个文件格式化后挂载呢?好问题!这是个有趣的事情,能够帮助我们解决很多系统的分割不好的情况。

①建立大文件

假设我要在/srv/loopdev建立一个空的文件:

[root@study ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512#这个指令的简单意义如下:#if是input file,输入文件。那个/dev/zero是会一直输出0的设备!#of是output file,将一堆零写入到后面接的文件中。#bs是每个block大小,就像文件系统那样的block意义;#count则是总共几个bs的意思。所以bs*count就是这个文件的容量了!

②大型文件格式化

预设xfs不能格式化文件,所以要加入特殊的参数。

[root@study ~]# mkfs.xfs -f /srv/loopdev[root@study ~]# blkid /srv/loopdev

③挂载

[root@study ~]# mount -o loop UUID=”7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee” /mnt

[root@study ~]# df /mnt

 

五、内存交换空间(swap)的构建

1.使用物理分区构建swap

(1)分区:使用gdisk在硬盘分出一个分区给系统作swap。由于Linuxgdisk预设会将分区的ID设定为Linux的文件系统,所以你可能还得要设定一下system ID

(2)格式化:利用新建的swap格式的“mkswap 设备文件名”就可以格式化该分区称为swap格式。

(3)使用:最后将该swap设备启动,方法为:swapon 设备文件名

(4)观查看:最后通过free与swapon -s来观察下内存使用情况。

执行命令如下:

2.使用文件构建swap(以建立一个128MBswap空间为例)

(1)使用dd命令新增一个128MB的文件,在/tmp下面:

[root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128

(2)使用mkswap将/tmp/swap格式化为swap的文件格式:

[root@study ~]# mkswap /tmp/swap

(3)使用swapon来讲/tmp/swap启动

[root@study ~]# swapon /tmp/swap

(4)使用swapoff关掉swap file,并设定自动启动

①设定自动启动:

[root@study ~]# nano /etc/fstab /tmp/swap  swap  swap  defaults  0  0

②关闭swap file

[root@study ~]# swapoff /tmp/swap /dev/vda6

 

六、文件系统的特殊查看与操作

1.磁盘空间的浪费问题

我们在前面提到过,一个block只能放置一个文件,因此太多小文件将会浪费非常多的磁盘容量。另外,整个文件系统中包括superblock,inode table以及其他metadata等其实都会浪费磁盘容量,所以我们建立xfs/ext4文件系统的时候,一挂载就有很多容量被用到了。

2.利用GNU的parted进行分区

虽然你可以使用gdisk/fdisk很快速的将你的分区分隔妥当,不过gdisk主要针对GPT而fdisk主要支持MBR,对GPT的支持还不够。所以使用不同的分区格式时,得要先查询到正确的分区表才能用适合的指令。那有没有同时支持的指令呢?答案是肯定的,那就是使用parted来进行分区。

parted常用语法如下所示:

[root@study ~]# parted [设备] [指令 [参数]]选项与参数:指令功能:新增分区:mkpart [primary|logical|extended] [ext4|vfat|xfs] 开始 结束显示分区:print删除分区:rm [partition]