7.4 设置启动挂载
7.4.1 启动挂载 /etc/fstab 及 /etc/mtab
想要进入系统就自动挂载,将需要挂载的文件写入到 /etc/fstab 中即可
系统挂载的一些限制:
- 根目录必须是挂载的,且一定要优先于其他挂载点被挂载进来
- 其他挂载点必须为已建立的目录,可任意指定,但一定要遵守必需的目录系统架构原则
- 所有挂载点在同一时间之内,只能挂载一次
- 所有硬盘分区在同一时间内,只能挂载一次
- 如若进行卸载,必须先将工作目录移到挂载点及其子目录之外
/etc/fstab 内容如下:
上述文件一共有六个段,需要记忆:
【设备/UUID 等】 【挂载点】 【文件系统】 【文件系统参数】 【dump】 【fsck】
-
第一栏:设备文件名/UUID/LABEL name
这个字段可以填写的数据主要有三个项目:
- 文件系统或磁盘的设备文件名,如 /dev/sda2 等
- 文件系统的 UUID 名称,如 UUID = xxx
- 文件系统的 LABEL 名称,如 UUID = LABEL
-
第二栏:挂载点
-
第三轮:磁盘分区的文件系统
-
第四栏:文件系统参数,即 mount 命令里 -o 参数后面可以添加的参数
-
第五栏:能否被 dump 备份命令作用,输入 0 即可
-
第六栏:是否以 fsck 检验扇区,输入 0 即可
自行修改后的内容如下:
范例:每次启动都想自动挂载 /dev/sda4 到 /data/xfs,如何进行
- 通过 lsblk 及 blkid,确定其文件类型、UUID、是否有挂载
- 将相应的信息写入 /etc/fstab 中
- 用 mount -a 测试刚才写入的是否正确。如果写错的话,Linux 系统将无法顺利启动
/etc/fstab 是每次启动时的配置文件,不过,实际文件系统的挂载记录到 /etc/mtab 及 /proc/mounts 这两个文件中。但是万一配置文件输入的数据错误,导致无法顺利启动,进入单人维护模式时,无法修改和更新上述的文件。解决办法如下:
moutn -n -o remount rw /
7.4.2 特殊设备 loop 挂载(镜像文件不刻录就挂载使用)
loop 设备是什么?
loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop。
-
挂载 CD/DVD 镜像文件
将 centos7 的 DVD 文件上传到测试机中,然后进行挂载
mkdir /data/centos_dvd mount -o loop /tmp/xxx.ios /data/centos_dvd
这样,就不需要必须将这个文件刻录成为光盘就能够读取其中的内容
-
建立大型文件以制作 loop 设备文件
使用命令 dd 建立空文件,详细的说明后面学习
dd if=/dev/zero of=/srv/loopdev bs=1M count=512 # 这个命令的简单意义如下: # if 是 input file,输入文件,那个 /dev/zero 是会一直输出 0 的设备 # of 是 output file,将一堆 0 写入后面接的文件中 # bs 是每个 block 大小,就像文件系统那样的 block 意义 # count 是总共几个 bs 的意思,所以 bs*count 就是这个文件的容量
-
大型文件的默认格式化
默认 xfs 是不能够格式化文件,所以格式化文件得要加入特别的参数才行
-
挂载
-
将这个文件系统加入开机自动挂载
注意:毕竟系统大多仅查询 block device 去找出 UUID 而已,因此使用文件创建的文件系统,最好还是使用原本的文件名来处理
7.5 内存交换分区(swap)之创建
内存交换分区对于服务器来说还是需要的,由于不知道什么时候会有大量来自网络的请求,因此最好还是能够预留一些内存交换分区来缓冲一下系统内存的使用量,至少达到【备而不用】的地步
如果已经将系统建立起来,此时才发现没有建立内存交换分区,该怎么处理?通过之前的学习有两种办法:
- 设置一个内存交换分区
- 建立一个虚拟内存的文件
7.5.1 使用物理分区创建内存交换分区
建立内存交换分区,需要通过以下几个步骤:
- 分区:使用 gdisk 在磁盘中划分出一个分区给系统作为内存交换分区
- 格式化:使用 mkswap
- 使用:启动 swapon
- 观察:通过 free 与 swapon -s 来观察以下内存的使用量
- 先进行分区操作
-
开始创建 swap 格式
-
开始观察与加载
7.5.2 使用文件创建内存交换文件
在物理分区无法支持的环境下,利用 dd 去创建一个大文件。用文件创建的方式建立一个 128 MB 的内存交换文件,步骤如下:
-
使用 dd 这个命令在 /tmp 下新增一个 128 MB 的文件
-
使用 mkswap 格式化为内存交换文件的文件格式
-
使用 swapon 启动
-
使用 swapoff 关闭 swap file,并设置自动启动
一般来说,目前所使用的 x86 主机所含的内存实在太大,我们个人使用的Linux 系统大概都用不到交换分区。不过对于服务器或工作站这些常年运行的系统来说,内存交换分区还是需要建立的。
因为内存交换分区主要的功能是当物理内存不够时,则某些在内存当中的程序会暂时被移动到内存交换分区中,让物理内存可以被需要的程序来使用。另外,如果你的主机支持电源管理模式,也就是说你的 Linux 主机系统可以进入【休眠】模式的话,那么,运行当中的程序状态则会被记录到内存交换分区中,以作为【唤醒】主机的状态依据。另外,某些程序运行时,本来就会利用内存交换分区的特性来存放一些数据。
7.6 文件系统的特殊观察与操作
7.6.1 磁盘空间之浪费问题
当使用 ll 去查询某个目录下的数据时,第一行都会出现一个【total】的字样:是该目录下所有数据所耗用的实际区块数量 * 区块大小的值
上面的特殊字体部分,就是每个文件所使用掉的区块的容量。但是文件实际大小并没有这么大,这就造成了损耗。
7.6.2 利用 GUN 的 parted 进行分区操作
虽然可以使用 gdisk/fdisk 进行快速分区操作,但在使用之前需要查询分区表的类型,才能使用合适的命令。但 parted 命令能够支持所有的分区。
在某些特殊时刻,需要写一个脚本,一口气建立全部分区,可以使用这个命令更方便。
parted 可以在一个命令行就完成分区,语法如下:
语法:
parted [设备] [命令 [参数]]
选项与参数:
命令功能:
新增分区:mkpart [part-type | part-label] [fs-type] start end
显示分区:print
删除分区:rm [part]
范例一:以 parted 列出目前本机的分区表信息
范例二:再次建立一个 512MB 的分区用来格式化为 vfat ,且挂载于 /data/win
上述只是 parted 的简单用法,详细查看 【man parted】
7.8 本章习题
情景模拟题一
本章例题中建立了非常多硬盘分区,将这些硬盘分区删除
-
需要先查看要删除的分区是否在被使用的状态,如果是,需要用 umount 卸载文件系统。如果是内存交换分区,要用 swapoff 去卸载
-
观察 /etc/fstab ,将该文件中新增的行全部删除
-
通过 gdisk/parted 命令将分区删除
情景模拟题二
由于原本系统分区不够好,希望能独立一个文件系统挂载到 /srv/myproject 目录下。并且每次启动都能自动挂载,且该目录是给 project 这个用户组共享的,其他人不可具有权限
-
创建该目录挂载点,并修改用户组及权限
groupadd project mkdir /srv/myproject chgrp project /srv/myproject chmod 2770 /srv/myproject
-
新建硬盘分区,更新内核,并格式化
-
修改 /etc/fstab 文件,并使用 mount -a 进行测试