一、存储结构与管理硬盘
1、软硬连接方式
在Windows系统中,快捷方式就是指向原始文件的一个链接文件,可以让用户从不同的位置来访问原始的文件;原文件一旦被删除或剪切到其他地方,会导致链接文件失效。但是,在Linux系统中不太一样。
Linux系统中存在软链接和硬链接两种不同的类型。
软链接(soft link):也叫符号链接(symbolic link),仅仅包含所链接文件的名称和路径,很像一个记录地址的标签。当原始文件被删除或移动后,新的链接文件也会随之失效,不能被访问。可以针对文件、目录设置软链接,跨文件系统进行链接也不是问题。从这一点来看,它与Windows系统的“快捷方式”具有一样的性质。用户访问软链接的效果如图1所示。
硬链接(hard link):可以将它理解为一个“指向原始文件block的指针”,系统会创建出一个与原来一模一样的inode信息块。所以,硬链接文件与原始文件其实是一模一样的,只是名字不同。每添加一个硬链接,该文件的inode个数就会增加1;而且只有当该文件的inode个数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件block的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,不能跨分区对目录文件进行硬链接。用户访问硬链接的效果如图2所示。
图1 软链接原理示意图
图2 硬链接原理示意图
ln命令:用于创建文件的软硬链接,语法格式为“ln [参数]原始文件名 链接文件名”。
ln命令的可用参数以及作用如下表所示。在使用ln命令时,是否添加-s参数,将创建出性质不同的两种“快捷方式”。
ln命令中可用的参数以及作用:
参数 | 作用 |
-s | 创建“符号链接”(如果不带-s参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |
软链接:ln -s 原始文件 目标文件
硬链接:ln 原始文件 目标文件
二、使用RAID与LVM磁盘阵列技术
1.1、RAID磁盘冗余阵列
RAID 0、RAID 1、RAID 5与RAID 10这4种最常见的方案。这4种方案的对比如表所示,其中n代表硬盘总数。
RAID 0、1、5、10方案技术对比
RAID级别 | 最少硬盘 | 可用容量 | 读写性能 | 安全性 | 特点 |
0 | 2 | n | n | 低 | 追求最大容量和速度,任何一块盘损坏,数据全部异常。 |
1 | 2 | n/2 | n | 高 | 追求最大安全性,只要阵列组中有一块硬盘可用,数据不受影响。 |
5 | 3 | n-1 | n-1 | 中 | 在控制成本的前提下,追求硬盘的最大容量、速度及安全性,允许有一块硬盘异常,数据不受影响。 |
10 | 4 | n/2 | n/2 | 高 | 综合RAID1和RAID0的优点,追求硬盘的速度和安全性,允许有一半硬盘异常(不可同组),数据不受影响 |
1、RAID 0
RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。
2、RAID 1
它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。
另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
3、RAID 5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。下图中Parity部分存放的就是数据的奇偶校验信息。换句话说,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。
RAID 5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。
4、RAID 10
RAID 5技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用RAID 10技术。
RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。如图7-4所示,RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能也超过了RAID 5,因此当前成为广泛使用的一种存储技术。
RAID 10是先对信息进行分割,然后再两两一组制作镜像。也就是先将RAID 1作为最低级别的组合,然后再使用RAID 0技术将RAID 1磁盘阵列组合到一起,将它们视为“一整块”硬盘。而RAID 01则相反,它是先将硬盘分为两组,然后使用RAID 0作为最低级别的组合,再将这两组RAID 0硬盘通过RAID 1技术组合到一起。
RAID 10技术和RAID 01技术的区别非常明显。在RAID 10中,任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但在RAID 01中,只要有任何一块硬盘损坏,最低级别的RAID 0磁盘阵列马上会停止运作,这可能造成严重隐患。所以RAID 10远比RAID 01常见,很多主板甚至不支持RAID 01。
1.2、部署磁盘阵列
首先,需要在虚拟机中添加4块硬盘设备来制作一个RAID 10磁盘阵列。
mdadm命令:用于创建、调整、监控和管理RAID设备,语法格式为“mdadm参数 硬盘名称”。
mdadm命令中的常用参数及作用如表所示。
mdadm命令的常用参数和作用
参数 | 作用 |
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
例:接下来,使用mdadm命令创建RAID 10,名称为“/dev/md0”。
其中,-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称就搞定了,也可用/dev/sd[b-e]。
查看详细信息,完成创建后:
格式化为xfs格式:
挂载:将md0挂载到目录xiaoqiang下,实际只有10G可用空间。
编辑etc/fstab文件,保存配置,重启生效:
验证RAID 10效果:
在目录xiaoqiang下放置一些文件,移除某块硬盘模拟硬盘损坏,
查看/dev/md0情况,sdc被移除:
再次查看xiaoqiang目录下的文件,文件未受影响:
1.3、损坏磁盘阵列及修复
重新添加一块5GB硬盘,重启虚拟机生效:
然后我们重新添加/dev/sdc:
再次查看/dev/md0的状态,已经重新添加并同步:
1.4、磁盘阵列+备份盘
例2:实现RAID 5,新增4块硬盘,其中3块实现RAID 5,1块用于做热备盘。
-n 3参数代表使用3块硬盘来部署这个RAID磁盘阵列;而-l 5参数则代表RAID 5方案;-x 1参数表示追加1块硬盘做热备盘。
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[b-e]
查看创建情况:
第二步、格式化:
第三步、挂载:
重启后,查看,由3块硬盘组成的RAID 5磁盘阵列,其对应的可用空间是n-1,也就是10GB。热备盘的空间不计算进来,平时完全就是在“睡觉”,只有在意外出现时才会开始工作。:
移除一块硬盘后,使用-D 参数可以看到热备盘自动顶替被移除的硬盘,并进行恢复:
重建完成后,恢复原有状态,读写执行不受影响:
1.5、删除磁盘阵列
首先,需要将所有的磁盘都设置成停用状态:
[root@localhost ~]# umount /xiaoqiang [root@localhost ~]# mdadm /dev/md0 -f /dev/sdc mdadm: set /dev/sdc faulty in /dev/md0 [root@localhost ~]# mdadm /dev/md0 -f /dev/sdd mdadm: set /dev/sdd faulty in /dev/md0 [root@localhost ~]# mdadm /dev/md0 -f /dev/sde mdadm: set /dev/sde faulty in /dev/md0
然后再逐一移除出去:
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb mdadm: hot removed /dev/sdb from /dev/md0 [root@localhost ~]# mdadm /dev/md0 -r /dev/sdc mdadm: hot removed /dev/sdc from /dev/md0 [root@localhost ~]# mdadm /dev/md0 -r /dev/sdd mdadm: hot removed /dev/sdd from /dev/md0 [root@localhost ~]# mdadm /dev/md0 -r /dev/sde mdadm: hot removed /dev/sde from /dev/md0
继续停用整个RAID磁盘阵列,就彻底完成了:
[root@localhost ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
2.1、LVM逻辑卷管理器
逻辑卷管理器(Logical Volume Manager,LVM)。LVM允许用户对硬盘资源进行动态调整。
LVM是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
在日常的使用中,如果卷组(VG)的剩余容量不足,可以随时将新的物理卷(PV)加入到里面,进行不断地扩容。下图是一张逻辑卷管理器的使用流程示意图。
逻辑卷管理器的技术结构
逻辑卷管理器使用流程图
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。
2.2、部署逻辑卷
一般而言,在生产环境中无法在最初时就精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。
我们可以通过部署LVM来解决上述问题。部署时,需要逐个配置物理卷、卷组和逻辑卷,常用的部署命令如表所示。
pv操作-->vg操作-->lv操作
常用的LVM部署命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
重新添加两块新硬盘设备,如图。然后开机。
第1步:让新添加的两块硬盘设备支持LVM技术。
第2步:把两块硬盘设备加入到名为happy的卷组中,然后查看卷组的状态。
第3步:再切割出一个约为400MB的逻辑卷设备。
在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 400M生成一个大小为400MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 100可以生成一个大小为100×4MB=400MB的逻辑卷。
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。
挂载:
[root@localhost ~]# mkdir /sonny [root@localhost' ~]# mount /dev/happy/sonny /sonny
注:如果使用了逻辑卷管理器,则不建议用XFS文件系统,因为XFS文件系统自身就可以使用xfs_growfs命令进行磁盘扩容。
第5步:查看挂载状态,并写入配置文件,使其永久生效。
2.3、扩容逻辑卷
扩容前一定要记得卸载设备和挂载点的关联。
第1步:把上一个实验中的逻辑卷sonny扩展至800MB。
第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。
第3步:重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。
第4步:重新挂载硬盘设备并查看挂载状态。
2.4、缩小逻辑卷
所以在生产环境中执行相应操作时,一定要提前备份好数据。另外,Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证数据的安全)。
在执行缩容操作前记得先把文件系统卸载掉。
[root@localhost ~]# umount /sonny
第1步:检查文件系统的完整性。
第2步:通知系统内核将逻辑卷sonny的容量减小到200MB。
第3步:将LV逻辑卷的容量修改为200M。
第4步:重新挂载文件系统并查看系统状态。
2.5、逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
在正式操作前,先看看VG(卷组)中的容量是否够用:
通过卷组的输出信息可以清晰看到,卷组中已经使用了200MB的容量,空闲容量还有9.88GB。
第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。
查看:
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。
第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
2.6、删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
第2步:删除逻辑卷设备,需要输入y来确认操作。
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
第4步:删除物理卷设备。
在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到相关信息了。