###开机挂载/etc/fstab及/etc/mtab
系统挂载的一些限制:
- 根目录/是必须挂载的,而且一定要先于其他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等指令相关。这个文件的内容共有6个字段,各字段的总结数据与详细数据如下:
[设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
- 第一栏 : 磁盘设备文件名/UUID/LAbel name:
这个字段可以填写的数据主要有三个项目 :
-
文件系统或磁盘的设备文件名, 如/dev/vda2等
-
文件系统的UUID名称, 如UUID=xxx
-
文件系统的LABEL名称,例如LABEL=xxx
-
第二栏 : 挂载点(mount point) : 就是挂载点。挂载点是什么?一定是目录。
-
第三栏 : 磁盘分区的文件系统 :
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行。包括xfs、ext4、vfat、reiserfs、nfs等等。
- 第四栏 : 文件系统参数 :
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就好了。
###特殊设备loop挂载(镜像文件不烧录就挂载使用)
- 挂载光盘/DVD镜像文件
[root@study ~]# ll -h /tmp/CentOS-7.0-1406-x86_64-DVD.iso
-rw-r--r--. 1 root root 3.9G Jul 7 2014 /tmp/CentOS-7.0-1406-x86_64-DVD.iso
# 看到上面的结果吧!这个文件就是镜像文件,文件非常的大吧!
[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_dvd
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 4050860 4050860 0 100% /data/centos_dvd
# 就是這個項目! .iso 镜像文件的所有数据可以在 /data/centos_dvd 看到!
[root@study ~]# ll /data/centos_dvd
total 607
-rw-r--r--. 1 500 502 14 Jul 5 2014 CentOS_BuildTag <==瞧!就是DVD的內容啊!
drwxr-xr-x. 3 500 502 2048 Jul 4 2014 EFI
-rw-r--r--. 1 500 502 611 Jul 5 2014 EULA
-rw-r--r--. 1 500 502 18009 Jul 5 2014 GPL
drwxr-xr-x. 3 500 502 2048 Jul 4 2014 images
.....(下面省略).....
[root@study ~]# umount /data/centos_dvd/
# 测试完成!記得将数据給他卸载!
创建大文件以制作loop设备文件
下面我们在 /srv 下创建一个 512MB 左右的大文件,然后将这个大文件格式化并且实际挂载来玩一玩!
- 创建大文件
首先,我们得先有一个大的文件吧!怎么创建这个大文件呢?在 Linux 下面我们有一支很好 用的程序 dd !他可以用来创建空的文件!假设我要创建一个空的文件在 /srv/loopdev ,那可以这样做:
[root@study ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
512+0 records in <==读入 512 笔数据
512+0 records out <==输出 512 笔数据
536870912 Bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s
# 这个指令的简单意义如下:
# if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的设备!
# of 是 output file ,将一堆零写入到后面接的文件中。
# bs 是每个 block 大小,就像文件系统那样的 block 意义;
# count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!
[root@study ~]# ll -h /srv/loopdev
-rw-r--r--. 1 root root 512M Jun 25 19:46 /srv/loopdev
- 大型文件格式化 默认xfs不能够格式化文件,所以需要格式化文件得要加入特别的参数。
[root@study ~]# mkfs.xfs -f /srv/loopdev
[root@study ~]# blkid /srv/loopdev
/srv/loopdev: UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" TYPE="xfs"
- 挂载
利用mount的特殊参数,那个-o loop的参数来处理!
[root@study ~]# mount -o loop UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" /mnt
[root@study ~]# df /mnt
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 520876 26372 494504 6% /mnt
现在将这个文件系统永远的挂载起来。
[root@study ~]# nano /etc/fstab
/srv/loopdev /data/file xfs defaults**,loop** 0 0
# 毕竟系统大多仅查询 block device 去找出 UUID 而已,因此使用文件创建的 filesystem,
# 最好还是使用原本的文件名来处理,应该比较不容易出现错误讯息的!
[root@study ~]# umount /mnt
[root@study ~]# mkdir /data/file
[root@study ~]# mount -a
[root@study ~]# df /data/file
Filesystem 1K-blocks Used Available Use% Mounted on