100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Linux应该这么学第7章使用 RAID 与 LVM 磁盘阵列技术

Linux应该这么学第7章使用 RAID 与 LVM 磁盘阵列技术

时间:2021-04-14 06:16:34

相关推荐

Linux应该这么学第7章使用 RAID 与 LVM 磁盘阵列技术

本章讲解了如下内容:

➢ RAID(独立冗余磁盘阵列);

➢ LVM(逻辑卷管理器)。

在学习了第 6 章讲解的硬盘设备分区、格式化、挂载等知识后,本章将深入讲解各个常

用 RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术方案的特性,并通

过实际部署 RAID 10、RAID 5+备份盘等方案来更直观地查看 RAID 的强大效果,以便进一步

满足生产环境对硬盘设备的 IO 读写速度和数据冗余备份机制的需求。同时,考虑到用户可能

会动态调整存储资源,本章还将介绍 LVM(Logical Volume Manager,逻辑卷管理器)的部署、

扩容、缩小、快照以及卸载删除的相关知识。相信读者在学完本章内容后,便可以在企业级生

产环境中灵活运用 RAID 和 LVM 来满足对存储资源的高级管理需求了。

7.1 RAID(独立冗余磁盘阵列)

近年来, CPU 的处理性能保持着高速增长,Intel 公司在 年最新发布的 i9-7980XE

处理器芯片更是达到了 18 核心 36 线程。但与此同时,硬盘设备的性能提升却不是很大,因

此逐渐成为当代计算机整体性能的瓶颈。而且,由于硬盘设备需要进行持续、频繁、大量的

IO 操作,相较于其他设备,其损坏几率也大幅增加,导致重要数据丢失的几率也随之增加。

1988 年,加利福尼亚大学伯克利分校首次提出并定义了 RAID 技术的概念。RAID 技术

通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区

段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的

性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据

冗余备份效果。

任何事物都有它的两面性。RAID 技术确实具有非常好的数据冗余备份功能,但是它也相

应地提高了成本支出。就像原本我们只有一个电话本,但是为了避免遗失,我们将联系人号

码信息写成了两份,自然要为此多买一个电话本,这也就相应地提升了成本支出。RAID 技术

的设计初衷是减少因为采购硬盘设备带来的费用支出,但是与数据本身的价值相比较,现代

企业更看重的则是 RAID 技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是

说,RAID 不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以

它在绝大多数运营商或大中型企业中得以广泛部署和应用。

出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上作出权衡,

制定出满足各自需求的不同方案。目前已有的 RAID 磁盘阵列的方案至少有十几种,而刘遄

老师接下来会详细讲解 RAID 0、RAID 1、RAID 5 与 RAID 10 这 4 种最常见的方案。

7.1.1 RAID 0

RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成

一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设

备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。

通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修

复能力。如图 7-1 所示,数据被分别写入到不同的硬盘设备中,即 disk1 和 disk2 硬盘设备会

分别保存数据资料,最终实现提升读取、写入速度的效果。

7.1.2 RAID 1尽管 RAID 0 技术提升了硬盘设备的读写速度,但是它是将数据依次写入到各个物理硬

盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的

数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,

就需要用到 RAID 1 技术了。

在图 7-2 所示的 RAID 1 技术示意图中可以看到,它是把两块以上的硬盘设备进行绑

定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备

份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常

使用。

RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数

据,因此硬盘设备的利用率得以下降,从理论上来说,图 7-2 所示的硬盘空间的真实可用率只

有 50%,由三块硬盘设备组成的 RAID 1 磁盘阵列的可用率只有 33%左右,以此类推。而且,

由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功

能的负载。

那么,有没有一种 RAID 方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了

成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利

用率且还不增加新设备的情况下,能大幅提升数据的安全性。刘遄老师也没有必要忽悠各位

读者,下面将要讲解的 RAID 5 技术虽然在理论上兼顾了三者(读写速度、数据安全性、成

本),但实际上更像是对这三者的“相互妥协”。

7.1.3 RAID 5

如图 7-3 所示,RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。

RAID 5 磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到

除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命

缺陷;图 7-3 中 parity 部分存放的就是数据的奇偶校验信息,换句话说,就是 RAID 5 技术实

际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试

重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性

与存储成本问题。

7.1.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,因此当前成

为广泛使用的一种存储技术。

7.1.5 部署磁盘阵列

在具备了上一章的硬盘设备管理基础之后,再来部署 RAID 和 LVM 就变得十分轻松了。首

先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列,如图 7-5 所示。

这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要

注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算

机架构的不同而导致虚拟机系统无法识别添加的硬盘设备。

mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,格式为“mdadm [模式] <RAID

设备名称> [选项] [成员设备名称]”。

当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便

宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会用 mdadm 命

令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识的操作过程与生

产环境中的完全一致。mdadm 命令的常用参数以及作用如表 7-1 所示。

接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md0”。

第 6 章中讲到,udev 是 Linux 系统内核中用来给硬件命名的服务,其命名规则也非

常简单。我们可以通过命名规则猜测到第二个 SCSI 存储设备的名称会是/dev/sdb,然后

依此类推。使用硬盘设备来部署 RAID 磁盘阵列很像是将几位同学组成一个班级,但总

不能将班级命名为/dev/sdbcde 吧。尽管这样可以一眼看出它是由哪些元素组成的,但是

并不利于我们的记忆和阅读。更何况如果我们是使用 10、50、100 个硬盘来部署 RAID

磁盘阵列呢?

此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡;-v 参

数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID

磁盘阵列的名称;-a yes 参数代表自动创建设备文件;-n 4 参数代表使用 4 块硬盘来部署这个

RAID 磁盘阵列;而-l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定

了。

[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to n2mdadm: layout defaults to n2mdadm: chunk size defaults to 512Kmdadm: size set to 20955136Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.

其次,把制作好的 RAID 磁盘阵列格式化为 ext4 格式。

[root@localhost ~]# mkfs.ext4 /dev/md0mke2fs 1.42.9 (28-Dec-)文件系统标签=OS type: Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks2621440 inodes, 10477568 blocks523878 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=2157969408320 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成

再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为

40GB。

[root@localhost ~]# mkdir /RAID[root@localhost ~]# mount /dev/md0 /RAID/[root@localhost ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/cl-root 50G 6.2G 44G 13% /devtmpfs 897M0 897M 0% /devtmpfs912M 84K 912M 1% /dev/shmtmpfs912M 9.0M 903M 1% /runtmpfs912M0 912M 0% /sys/fs/cgroup/dev/sda1 1014M 174M 841M 18% /boot/dev/mapper/cl-home 47G 37M 47G 1% /hometmpfs183M 12K 183M 1% /run/user/42tmpfs183M0 183M 0% /run/user/0/dev/md0 40G 49M 38G 1% /RAID

最后,查看/dev/md0 磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久

生效。

[root@localhost ~]# mdadm -D /dev/md0 /dev/md0:Version : 1.2Creation Time : Fri Nov 2 16:51:12 Raid Level : raid10Array Size : 41910272 (39.97 GiB 42.92 GB)Used Dev Size : 20955136 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 2 16:55:16 State : clean Active Devices : 4Working Devices : 4Failed Devices : 0Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost:0 (local to host localhost)UUID : 736b6527:5ef5d6f1:fe7b274b:46d306b9Events : 19Number Major Minor RaidDevice State0 8 16 0active sync set-A /dev/sdb1 8 32 1active sync set-B /dev/sdc2 8 48 2active sync set-A /dev/sdd3 8 64 3active sync set-B /dev/sde

7.1.6 损坏磁盘阵列及修复

之所以在生产环境中部署 RAID 10 磁盘阵列,是为了提高硬盘存储设备的读写速度及数

据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能

并不直观,因此刘遄老师决定给各位读者讲解一下 RAID 磁盘阵列损坏后的处理方法,这样

大家在步入运维岗位后遇到类似问题时,也可以轻松解决。

在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其

移除,然后查看 RAID 磁盘阵列的状态,可以发现状态已经改变。

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdbmdadm: set /dev/sdb faulty in /dev/md0[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Fri Nov 2 16:51:12 Raid Level : raid10Array Size : 41910272 (39.97 GiB 42.92 GB)Used Dev Size : 20955136 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 2 16:57:36 State : clean, degraded Active Devices : 3Working Devices : 3Failed Devices : 1Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost:0 (local to host localhost)UUID : 736b6527:5ef5d6f1:fe7b274b:46d306b9Events : 21Number Major Minor RaidDevice State- 0 0 0removed1 8 32 1active sync set-B /dev/sdc2 8 48 2active sync set-A /dev/sdd3 8 64 3active sync set-B /dev/sde0 8 16 -faulty /dev/sdb

在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID

10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可,在此期间

我们可以在/RAID 目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先

重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Fri Nov 2 17:09:44 Raid Level : raid10Array Size : 41910272 (39.97 GiB 42.92 GB)Used Dev Size : 20955136 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 2 17:10:44 State : clean, degraded Active Devices : 3Working Devices : 3Failed Devices : 1Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost:0 (local to host localhost)UUID : 190f31d6:b078b001:f5fe07cb:d191131aEvents : 12Number Major Minor RaidDevice State- 0 0 0removed1 8 32 1active sync set-B /dev/sdc2 8 48 2active sync set-A /dev/sdd3 8 64 3active sync set-B /dev/sde0 8 16 -faulty /dev/sdb[root@localhost ~]# mdadm -r /dev/md0 /dev/sdbmdadm: hot removed /dev/sdb from /dev/md0[root@localhost ~]# mdadm -D /dev/md0 /dev/md0:Version : 1.2Creation Time : Fri Nov 2 17:09:44 Raid Level : raid10Array Size : 41910272 (39.97 GiB 42.92 GB)Used Dev Size : 20955136 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 3Persistence : Superblock is persistentUpdate Time : Fri Nov 2 17:11:13 State : clean, degraded Active Devices : 3Working Devices : 3Failed Devices : 0Spare Devices : 0Layout : near=2Chunk Size : 512KName : localhost:0 (local to host localhost)UUID : 190f31d6:b078b001:f5fe07cb:d191131aEvents : 13Number Major Minor RaidDevice State- 0 0 0removed1 8 32 1active sync set-B /dev/sdc2 8 48 2active sync set-A /dev/sdd3 8 64 3active sync set-B /dev/sde[root@localhost ~]# mdadm /dev/md0 -a /dev/sdbmdadm: added /dev/sdb[root@localhost ~]# mdadm -D /dev/md0 /dev/md0:Version : 1.2Creation Time : Fri Nov 2 17:09:44 Raid Level : raid10Array Size : 41910272 (39.97 GiB 42.92 GB)Used Dev Size : 20955136 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Fri Nov 2 17:11:58 State : clean, degraded, recovering Active Devices : 3Working Devices : 4Failed Devices : 0Spare Devices : 1Layout : near=2Chunk Size : 512KRebuild Status : 12% completeName : localhost:0 (local to host localhost)UUID : 190f31d6:b078b001:f5fe07cb:d191131aEvents : 16Number Major Minor RaidDevice State4 8 16 0spare rebuilding /dev/sdb1 8 32 1active sync set-B /dev/sdc2 8 48 2active sync set-A /dev/sdd3 8 64 3active sync set-B /dev/sde

7.2 LVM逻辑卷管理器

前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—LVM(逻辑卷管理器)。LVM可以允许用户对硬盘资源进行动态调整。

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图7-7所示。

图7-7 逻辑卷管理器的技术结构

为了帮助大家理解,刘遄老师来举一个吃货的例子。比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大面团分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

7.2.1 部署逻辑卷

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。

我们可以通过部署LVM来解决上述问题。部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。常用的部署命令如表7-2所示。

表7-2 常用的LVM部署命令

为了避免多个实验之间相互发生冲突,请大家自行将虚拟机还原到初始状态,并在虚拟机中添加两块新硬盘设备,然后开机,如图7-8所示。

在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。在下文中,刘遄老师将对每一个步骤再作一些简单的描述。

第1步:让新添加的两块硬盘设备支持LVM技术。

[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdcPhysical volume "/dev/sdb" successfully createdPhysical volume "/dev/sdc" successfully created

图7-8 在虚拟机中添加两块新的硬盘设备

第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

[root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdcVolume group "storage" successfully created[root@linuxprobe ~]# vgdisplay--- Volume group ---VG Name storageSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 39.99 GiBPE Size 4.00 MiBTotal PE 10238Alloc PE / Size 0 / 0 Free PE / Size 10238 / 39.99 GiBVG UUID KUeAMF-qMLh-XjQy-ArUo-LCQI-YF0o-pScxm1………………省略部分输出信息………………

第3步:切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

[root@linuxprobe ~]# lvcreate -n vo -l 37 storageLogical volume "vo" created[root@linuxprobe ~]# lvdisplay --- Logical volume ---LV Path /dev/storage/voLV Name voVG Name storageLV UUID D09HYI-BHBl-iXGr-X2n4-HEzo-FAQH-HRcM2ILV Write Access read/writeLV Creation host, time localhost.localdomain, -02-01 01:22:54 -0500LV Status available# open 0LV Size 148.00 MiBCurrent LE 37Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2………………省略部分输出信息………………

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo mke2fs 1.42.9 (28-Dec-)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks38000 inodes, 151552 blocks7577 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=3381657619 block groups8192 blocks per group, 8192 fragments per group2000 inodes per groupSuperblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): doneWriting superblocks and filesystem accounting information: done [root@linuxprobe ~]# mkdir /linuxprobe[root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe

第5步:查看挂载状态,并写入到配置文件,使其永久生效。

[root@linuxprobe ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/rhel-root 18G 3.0G 15G 17% /devtmpfs 905M 0 905M 0% /devtmpfs 914M 140K 914M 1% /dev/shmtmpfs 914M 8.8M 905M 1% /runtmpfs 914M 0 914M 0% /sys/fs/cgroup/dev/sr0 3.5G 3.5G 0 100% /media/cdrom/dev/sda1 497M 119M 379M 24% /boot/dev/mapper/storage-vo 145M 7.6M 138M 6% /linuxprobe[root@linuxprobe ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab

7.2.2 扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联。

[root@linuxprobe ~]# umount /linuxprobe

第1步:把上一个实验中的逻辑卷vo扩展至290MB。

[root@linuxprobe ~]# lvextend -L 290M /dev/storage/voRounding size to boundary between physical extents: 292.00 MiBExtending logical volume vo to 292.00 MiBLogical volume vo successfully resized

第2步:检查硬盘完整性,并重置硬盘容量。

[root@linuxprobe ~]# e2fsck -f /dev/storage/voe2fsck 1.42.9 (28-Dec-)Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 5: Checking group summary information/dev/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks[root@linuxprobe ~]# resize2fs /dev/storage/voresize2fs 1.42.9 (28-Dec-)Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.The filesystem on /dev/storage/vo is now 299008 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@linuxprobe ~]# mount -a[root@linuxprobe ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/rhel-root 18G 3.0G 15G 17% /devtmpfs 985M 0 985M 0% /devtmpfs 994M 80K 994M 1% /dev/shmtmpfs 994M 8.8M 986M 1% /runtmpfs 994M 0 994M 0% /sys/fs/cgroup/dev/sr0 3.5G 3.5G 0 100% /media/cdrom/dev/sda1 497M 119M 379M 24% /boot/dev/mapper/storage-vo 279M 2.1M 259M 1% /linuxprobe

7.2.3 缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@linuxprobe ~]# umount /linuxprobe

第1步:检查文件系统的完整性。

[root@linuxprobe ~]# e2fsck -f /dev/storage/voe2fsck 1.42.9 (28-Dec-)Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 5: Checking group summary information/dev/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks

第2步:把逻辑卷vo的容量减小到120MB。

[root@linuxprobe ~]# resize2fs /dev/storage/vo 120Mresize2fs 1.42.9 (28-Dec-)Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.The filesystem on /dev/storage/vo is now 122880 blocks long.[root@linuxprobe ~]# lvreduce -L 120M /dev/storage/voWARNING: Reducing active logical volume to 120.00 MiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce vo? [y/n]: yReducing logical volume vo to 120.00 MiBLogical volume vo successfully resized

第3步:重新挂载文件系统并查看系统状态。

[root@linuxprobe ~]# mount -a[root@linuxprobe ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/rhel-root 18G 3.0G 15G 17% /devtmpfs 985M 0 985M 0% /devtmpfs 994M 80K 994M 1% /dev/shmtmpfs 994M 8.8M 986M 1% /runtmpfs 994M 0 994M 0% /sys/fs/cgroup/dev/sr0 3.5G 3.5G 0 100% /media/cdrom/dev/sda1 497M 119M 379M 24% /boot/dev/mapper/storage-vo 113M 1.6M 103M 2% /linuxprobe

7.2.4 逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:

快照卷的容量必须等同于逻辑卷的容量;

快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

首先查看卷组的信息。

[root@localhost ~]# vgdisplay

--- Volume group ---

VG Name storage

System ID

Format lvm2

Metadata Areas 2

Metadata Sequence No 4

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 1

Max PV 0

Cur PV 2

Act PV 2

VG Size 39.99 GiB

PE Size 4.00 MiB

Total PE 10238

Alloc PE / Size 30 / 120.00 MiB

Free PE / Size 10208 / <39.88 GiB

VG UUID Pg9H0O-CldH-vSR4-laNM-9ntB-ZFmY-ZszE4r

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@linuxprobe ~]# echo "Welcome to " > /linuxprobe/readme.txt[root@linuxprobe ~]# ls -l /linuxprobetotal 14drwx------. 2 root root 12288 Feb 1 07:18 lost+found-rw-r--r--. 1 root root 26 Feb 1 07:38 readme.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@linuxprobe ~]# lvcreate -L 120M -s -n SNAP /dev/storage/voLogical volume "SNAP" created[root@linuxprobe ~]# lvdisplay--- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKltLV Write Access read/writeLV Creation host, time localhost.localdomain, -02-01 07:42:31 -0500LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 0.01%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3………………省略部分输出信息………………

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。

[root@linuxprobe ~]# dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M1+0 records in1+0 records out104857600 bytes (105 MB) copied, 3.35432 s, 31.3 MB/s[root@linuxprobe ~]# lvdisplay--- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKltLV Write Access read/writeLV Creation host, time localhost.localdomain, -02-01 07:42:31 -0500LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 83.71%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3

第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@linuxprobe ~]# umount /linuxprobe[root@linuxprobe ~]# lvconvert --merge /dev/storage/SNAPMerging of volume SNAP started.vo: Merged: 21.4%vo: Merged: 100.0%Merge of snapshot into logical volume vo has finished.Logical volume "SNAP" successfully removed

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

[root@linuxprobe ~]# mount -a[root@linuxprobe ~]# ls /linuxprobe/lost+found readme.txt

7.2.5 删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@linuxprobe ~]# umount /linuxprobe[root@linuxprobe ~]# vim /etc/fstab## /etc/fstab# Created by anaconda on Fri Feb 19 22:08:59 ## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/rhel-root / xfs defaults 1 1UUID=50591e35-d47a-4aeb-a0ca-1b4e8336d9b1 /boot xfs defaults 1 2/dev/mapper/rhel-swap swap swap defaults 0 0/dev/cdrom /media/cdrom iso9660 defaults 0 0 /dev/storage/vo /linuxprobe ext4 defaults 0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@linuxprobe ~]# lvremove /dev/storage/vo Do you really want to remove active logical volume vo? [y/n]: yLogical volume "vo" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@linuxprobe ~]# vgremove storageVolume group "storage" successfully removed

第4步:删除物理卷设备。

[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdcLabels on physical volume "/dev/sdb" successfully wipedLabels on physical volume "/dev/sdc" successfully wiped

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了(前提是上述步骤的操作是正确的)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。