一、RAID磁盘冗余阵列

1.RAID概念引入

硬盘设备是计算机中较容易出现故障的元器件之一,加之由于其需要存储数据的特殊性质,不能像CPU、内存、电源甚至主板那样在出现故障后更换新的就好,所以在生产环境中一定要未雨绸缪,提前做好数据的冗余及异地备份等工作。

1988年,美国加利福尼亚大学伯克利分校首次提出并定义了RAID(Redundant Array of Inexpensive Disks ,廉价冗余磁盘阵列)技术的概念。RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低, RAID 可以使用大部分的磁盘, “廉价” 已经毫无意义。因此, RAID 咨询委员会( RAID Advisory Board, RAB )决定用 “ 独立 ” 替代 “ 廉价 ” ,于时 RAID 变成了独立磁盘冗余阵列( Redundant Array of Independent Disks ,有“独立磁盘构成的具有冗余能力的阵列”之意)。

RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

RAID 利用数据条带镜像数据校验技术来获取高性能可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。

三大技术

(1)条带化(striping)

把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法称为条带化。

磁盘读写都需要磁头寻道定位,有一定的物理极限。大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS)和数据传输率(每秒传输的数据量,TPS)有限制。当达到这些限制时,后面需要访问磁盘的进程就需要等待。

条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。

影响条带化的两个主要因素有:条带深度(stripe depth)条带宽度(stripe width)

  • 条带深度:指条带的大小,即写入每块磁盘的条带数据块的大小。RAID的数据块大小一般在2KB到512KB之间(或者更大),其数值是2的次方。
  • 条带宽度:指同时可以并发读或写的条带数量。这个数量等于RAID中的物理硬盘数量。一个经过条带化的,具有4块物理硬盘的阵列的条带宽度就是4。

条带深度对性能的影响通常比较难以量化。减小条带大小,文件被分成了更多个,更小的数据块。这些数据块会被分散到更多的硬盘上存储,因此提高了传输的性能,但是由于要多次寻找不同的数据块,磁盘定位的性能就下降了。增加条带大小,会降低传输性能,提高定位性能。

条带宽度对性能的影响则更明显。增加条带宽度,可以增加阵列的读写性能。增加更多的硬盘,也就增加了可以同时并发读或写的条带数量。在其他条件一样的前提下,一个由8块18G硬盘组成的阵列相比一个由4块36G硬盘组成的阵列具有更高的传输性能。

(2)镜像(mirroring)

当采用磁盘镜像方式时,在每次向主磁盘写入数据后,都需要将数据再写到备份磁盘上,使两个磁盘上具有完全相同的位像图。当主磁盘驱动器发生故障时,由于有备份磁盘的存在,在进行切换后,使主机仍能正常工作。镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会导致一定的 I/O 性能降低。磁盘镜像虽然具有高安全性、高读性能实现了容错功能,却冗余开销较大,使磁盘的利用率降至50%。

(3)数据校验( Data parity )

数据校验是利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。

采用数据校验时, RAID 要在写入数据同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同 RAID 等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。

四大优点:

(1) 大容量  由多个磁盘组成的 RAID 系统具有海量的存储空间。现在单个磁盘的容量就可以到 1TB 以上,这样 RAID 的存储容量就可以达到 PB 级,大多数的存储需求都可以满足。一般来说, RAID 可用容量要小于所有成员磁盘的总容量。不同等级的 RAID 算法需要一定的冗余开销,具体容量开销与采用算法相关。如果已知 RAID 算法和容量,可以计算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之间。

(2) 高性能  RAID 的高性能受益于数据条带化技术。单个磁盘的 I/O 性能受到接口、带宽等计算机技术的限制,性能往往很有限,容易成为系统性能的瓶颈。通过数据条带化,RAID 将数据 I/O 分散到各个磁盘上,通过并发获得比单个磁盘成倍增长的聚合 I/O 性能。

(3) 可靠性  RAID 采用镜像和数据校验等数据冗余技术,大幅提升数据可用性和可靠性,保证了若干磁盘出错时,不会导致数据的丢失,不影响系统的连续运行。 镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据完全复制到另一组磁盘驱动器上,保证总有数据副本可用。 比起镜像 50% 的冗余开销 ,数据校验要小很多,它利用校验冗余信息对数据进行校验和纠错。

(4) 可管理性 RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来说, RAID 是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就可以在这个虚拟驱动器上来组织和存储应用系统数据。 从用户应用角度看,可使存储系统简单易用,管理也很便利。 由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。 RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以大大简化管理工作。

2.RAID分类

目前已有的RAID磁盘阵列方案至少有十几种,出于成本和技术方面考虑,通常需要针对不同的需求在数据可靠性及读写性能上做出权衡,制定出满足各自需求的不同方案。下面介绍几种常用的RAID方案。

(1)RAID 0

RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。在最理想的状态下(n 块使用相同型号和容量的磁盘组成RAID 0),它的读写性能是单个磁盘性能的 n 倍。但是它没有任何形式的冗余策略,若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。

RAID 0技术能够有效地提升硬盘IO性能,但是不具备数据备份和错误修复能力。如下图所示,数据被分别写入到不同的硬盘设备中。

当使用相同型号和容量的磁盘组成RAID 0,该模式会将磁盘先切出等量区块block(一般设置为4K-1M之间),当要写入一个文件时,该文件将会依据block大小进行切割,之后按照顺序依次写入各磁盘中。当某块磁盘损坏,那么文件数据就缺少一块,这个文件就损毁了。由于每个文件都是这样存放的,所以RAID 0 模式任何一块磁盘损坏,在RAID上面所有的数据都会损毁而无法读取。

 (2)RAID 1

它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用

考虑到在进行写入操作时因硬盘切换带来的开销,因此RAID 1的速度会比RAID 0有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高

RAID 1技术虽然数据的安全性得到保障,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,上图的硬盘空间的真实可用率只有50%,由3块硬盘设备组成的RAID 1磁盘阵列的可用率只有33%左右;以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。

(3)RAID 5

RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。下图中Parity部分存放的就是数据的奇偶校验信息。RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过同一条带的其他数据块和奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

RAID 5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。RAID基本可以满足大部分存储应用需求,数据中心大多采用它作为应用数据的保护方案。

(4)RAID 6

前面所述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。 RAID6 引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。 RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。

RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。 RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元方程来重建两个磁盘上的数据。

RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。因此, RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID10 方案的经济性选择。

(5)RAID 10(RAID一零)

RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。如下图示,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。

(6)RAID 50

RAID 50是RAID 5与RAID 0的结合,先做RAID 5,再做RAID 0,即对两组以上RAID 5做条带化存取。

RAID 50至少6块磁盘,每组RAID 5至少要3块硬盘,每组只允许1块盘故障。

此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。RAID 50也被称为镜象阵列条带,既可以像RAID 0一样,将数据分割成条带,在同一时间内并发向多块磁盘写入,又可以像RAID 5一样,通过数据的校验位来保证数据的安全,且校验条带均匀分布在各个磁盘上。RAID50 可以弥补RAID5的读写性能的不足。

(7)RAID 60

RAID 60是RAID 5与RAID 0的结合,先做RAID 6,再做RAID 0,即对两组以上RAID 6做条带化存取。RAID 60最少磁盘数8,每组RAID 6至少要4块硬盘,并允许2块盘故障。

适用于数据要求高可靠性、高请求率、高数据传输;

Raid 60所需磁盘数=大于8的偶数,硬盘利用率=RAID 6 的磁盘利用率

常见的RAID方案特性和性能对比

RAID级别

RAID0

RAID1

RAID5

RAID6

RAID10

RAID50

可靠性

最低

较高

最高

冗余类型

镜像冗余

校验冗余

校验冗余

镜像冗余

镜像冗余

可用空间

100%

50%

(N-1)/N

(N-2)/N

50%

(N-2)/N

性能

最高

最低

较高

较高

应用场景

安全性原因,实际很少用

财务、金融

OLTP、数据库系统

可靠性要求高的场景,默认配置。

金融、电信数据安全性要求很高的场合

数据安全可靠性高

小结:

容错能力

  • RAID 0:不提供容错功能。任意一个成员盘出现故障,都会导致数据丢失。通过条带化方式同时在多个成员盘中写入数据。RAID 0对于需要高性能但不需要容错的应用场景非常理想。
  • RAID 1:提供100%的数据冗余能力。当一个成员盘故障时,可以使用RAID组中对应的其他磁盘的数据来运行系统,并重构故障盘。因为一个成员盘的内容会完全备份写入另一个磁盘, 所以如果其中一个成员盘出现故障, 则不会丢失任何数据。成对的成员盘在任何时候都包含相同的数据。RAID 1组是需要最大容错能力和最小容量要求的应用场景的理想选择。
  • RAID 5:结合了分布式奇偶校验和磁盘条带化。奇偶校验在不需要备份全部磁盘内容的情况下,为1个磁盘提供了冗余特性。当一个成员盘故障时,RAID控制卡使用奇偶校验数据来重构所有丢失的信息。RAID 5使用较小的系统开销为系统提供了足够的容错能力。
  • RAID 6:结合了分布式奇偶校验和磁盘条带化。奇偶校验在不需要备份全部磁盘内容的情况下,为2个磁盘提供了冗余特性。当一个成员盘故障时,RAID控制卡使用奇偶校验数据来重构所有丢失的信息。RAID 6使用较小的系统开销为系统提供了足够的容错能力。
  • RAID 10:使用多个RAID 1提供完整的数据冗余能力。RAID 10对所有需要通过镜像磁盘组提供100% 冗余能力的场景都适用。

I/O性能

  • RAID 0:提供优异的性能。RAID 0将数据分割为较小的数据块并写入到不同的磁盘中,由于可以同时对多个磁盘进行读写,RAID 0提升了IO性能。
  • RAID 1:由于RAID组中的硬盘都是成对出现,写数据时也必须同时写入2份,从而占用更多的时间和资源,导致性能降低。
  • RAID 5:提供了较高的数据吞吐能力。由于成员盘上同时保留常规数据和校验数据,每个成员盘都可以独立读写,再加上完善的Cache算法,使得RAID 5在很多应用场景中都有出色的性能表现。
  • RAID 6:在需要高可靠性、高响应率、高传输率的场景下,RAID 6是较为适合的RAID级别,其提供了高数据吞吐量、数据冗余性和较高的IO性能。由于RAID 6需要为每个成员盘写入2套校验数据,导致其在写操作期间性能降低。
  • RAID 10:由RAID 0子组提供高数据传输率的同时,RAID 10在数据存储方面表现优异。IO性能随着子组数量的增加而提升。

存储容量

  • RAID 0:在指定一组磁盘后,同等情况下,RAID 0可以提供个最大的存储容量,可用容量=成员盘容量之和。
  • RAID 1:由于对一个磁盘进行写入时,必须同时写入另一个磁盘,导致存储空间损耗。可用容量=成员盘最小容量。
  • RAID 5:校验数据块与常规数据块隔离,因此整体上来说,校验数据会占用1个成员盘的容量。可用空间=成员盘最小容量x(成员盘个数-1)。
  • RAID 6:由于2个独立的校验数据块与常规数据块隔离,整体上来说,校验数据会占用2个成员盘的容量。可用空间=成员盘最小容量x(成员盘个数-2)。
  • RAID 10:可用容量=子组容量之和。

3.软件RAID和硬件RAID

  • 硬件RAID

使用专属的RAID适配器、硬盘控制器或存储处理器。RAID控制器有自己的处理器,I/O处理芯片,和内存,用来提高资源利用率和数据传输速度。RAID控制器管理路由、缓冲区,控制主机与RAID间数据流。硬件RAID通常在服务器中使用。

  • 软件RAID

实现的RAID没有它自己的处理器或I/O处理芯片,而是完全依赖于主机处理器。因此,低速CPU不能满足RAID实施的要求。目前,操作系统支持的最常见的 RAID 等级有 RAID0 、 RAID1 、 RAID10 、 RAID01 和 RAID5 等。比如, Windows Server 支持 RAID0 、 RAID1 和 RAID5 三种等级, Linux 支持 RAID0 、 RAID1 、 RAID4 、 RAID5 、 RAID6 等, Mac OS X Server 、 FreeBSD 、 NetBSD 、 OpenBSD 、 Solaris 等操作系统也都支持相应的 RAID 等级。软件RAID通常在企业级存储设备上使用。

软RAID的特点就是配置管理和数据恢复比较简单,但是RAID所有任务完全由主机CPU完成会严重影响CPU的性能。软RAID由操作系统实现,因此系统所在分区不能作为RAID的逻辑磁盘。RAID的配置信息保存在系统信息中,而不是以文件形式单独保存在磁盘上,当系统意外崩溃而需要重新安装时,RAID信息就会丢失。(mdadm是linux下的一款标准的软件 RAID管理工具,可以管理linux软RAID,比如创建、调整、监控RAID。)

4.RAID卡

实现了RAID功能的板卡(SCSI卡或IDE扩展卡)称为RAID卡。对于RAID卡,操作系统无法感知物理磁盘,操作系统只能通过厂家提供的RAID卡的管理软件来查看卡上所连接的物理磁盘。配置RAID时,是由RAID卡在开机自检,进入它的ROM配置程序来配置各种RAID功能。

RAID卡结构示意图

SCSI RAID卡包含SCSI控制器,连接SCSI磁盘;PCI控制器,连接主机PCI总线,维护PCI总线仲裁、数据发送功能;

ROM(一般为flash芯片)存放初始化RAID卡必须的代码和实现RAID功能所需的代码

RAM,作为数据缓存(存放从缓存中读出待写入磁盘的数据或从硬盘中读出到内存中的数据);作为RAID卡上的CPU执行运算所需的内存空间。

XOR芯片是专门用来做RAID3、5、6等这类校验型RAID的校验计算使用。如果让CPU来做校验计算,需要执行代码,将耗费很多周期;使用专门的XOR数字电路,一进一出就能立即得到结果,大大提高了校验计算的速度,降低了CUP压力。

带电池RAID卡和不带电池RAID卡的区别就是PCI-E给RAID卡供电,卡上的电池通过PCI-E的电源充电,电池再给RAM供电。RAID卡是通过PCI-E接口插在主板上的,PCI-E接口可以供电。一般电池如果出了问题或者没电,raid控制器会关闭写缓存性能变差。如果没有关闭写缓存,那么当断电情况下,缓存中的数据可能丢失。

5.虚拟磁盘的读写策略

在创建虚拟磁盘时,会需要对其数据读写策略进行定义,以规范后续虚拟磁盘运行过程中数据的读写方式。

数据读策略

在配置界面中一般体现为“Read Policy”。RAID控制卡支持如下两种数据读策略:

  • 预读取方式:在配置界面中一般有“Always Read Ahead”、“Read Ahead”、“Ahead”等配置选项。使用此策略后,从虚拟磁盘中读取所需数据时,会把后续数据同时读出放在Cache中,用户随后访问这些数据时可以直接在Cache中命中,将减少磁盘寻道操作,节省响应时间,提高了数据读取速度。

    要使用该策略,要求RAID控制卡支持数据掉电保护功能,但如果此时超级电容异常,可能导致数据丢失。

  • 非预读取方式:使用此策略后,RAID控制卡接收到数据读取命令时,才从虚拟磁盘读取数据,不会做预读取的操作。

数据写策略

在配置界面中一般体现为“Write Policy”。RAID控制卡支持如下三种数据写策略:

  • 回写:在配置界面中一般体现为“Write Back”等字样。使用此策略后,需要向虚拟磁盘写数据时,会直接写入Cache中,当写入的数据积累到一定程度,RAID控制卡才将数据刷新到虚拟磁盘,这样不但实现了批量写入,而且提升了数据写入的速度。当控制器Cache收到所有的传输数据后,将给主机返回数据传输完成信号。

    要使用该策略,要求RAID控制卡支持数据掉电保护功能,但如果此时超级电容异常,可能导致数据丢失。

  • 直写:在配置界面中一般有“Write Through”等选项。使用此策略后,RAID控制卡向虚拟磁盘直接写入数据,不经过Cache。当磁盘子系统接收到所有传输数据后,控制器将给主机返回数据传输完成信号。

    此种方式不要求RAID控制卡支持数据掉电保护功能,即使超级电容故障,也无影响。该写策略的缺点是写入速度较低。。

  • 与BBU相关的回写:在配置界面中一般有“Write Back with BBU”等选项。使用此策略后,当RAID控制卡BBU在位且状态正常时,RAID控制卡到虚拟磁盘的写操作会经过Cache中转(即回写方式);当RAID控制卡BBU不在位或BBU故障时,RAID控制卡到虚拟磁盘的写操作会自动切换为不经过Cache的直接写入(即直写方式)。

BBU(Battery Backup Unit,电池备份单元)
BBU在电源供应出现问题的时候,为RAID控制器缓存提供电源。当电源断电时,BBU电力可以使控制器内缓存中的数据可以保存一定时间(根据BBU的型号而决定)。用户只需要在BBU电力耗尽之前恢复正常供电,缓存中的数据即可被完整的写回RAID中,避免断电导致数据丢失。

6.部署磁盘阵列

可以通过mdadm(全称“multiple devices admin”)命令在Linux系统中创建、调整、监控、管理RAID设备。

mdadm命令的常用参数和作用

参数 作用
-a 检测设备名称
-n 指定设备数量
-l 指定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列

软RAID磁盘阵列创建过程:

创建磁盘阵列

查看创建结果

将RAID磁盘阵列格式化成对应的文件系统(和普通的磁盘格式化方式一致)

创建挂载点,继续挂载操作

具体过程演示待完善。

硬RAID创建测试过程:

待完善(。。。。。。)

二、LVM逻辑卷管理器

LVM引入

硬盘分区完成或者RAID磁盘阵列部署完成之后,再想修改硬盘分区大小就不容易了。即当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—逻辑卷管理器(Logical Volume Manager,LVM)。LVM允许用户对硬盘资源进行动态调整。

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

LVM架构图如下:

重要概念简介

物理卷(PV:处于LVM最底层,是LVM的基本存储逻辑块,可以将其理解为硬盘分区或者RAID磁盘阵列。它和裸磁盘、分区相比,多了LVM相关的管理参数。

卷组(VG):建立在物理卷之上,一个卷组能够包含一个或多个物理卷(PV),而且在卷组创建之后也可以继续向其中添加新的物理卷。

逻辑卷(LV):逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。在逻辑卷LV之上可以建立文件系统。

物理块(PE):PE是物理卷PV的基本划分单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

逻辑块(LE):逻辑卷LV被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。

部署逻辑卷

常用的LVM部署命令

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

部署逻辑卷命令

步骤1:添加硬盘设备支持LVM技术(创建PV)

pvcreate /dev/sdb
//创建物理卷

步骤2:把物理卷添加到vg_storage卷组,然后查看卷组状态(创建卷组VG)

vgcreate vg_storage /dev/sdb
//       (卷组名称)  (物理卷)vgdisplay //查看卷组

步骤3:将卷组划分逻辑卷(创建逻辑卷LV)

//创建逻辑卷方法一
lvcreate   -L        15G                -n   lv1            vg_storage
//                 (单位为 MB、GB、TB )    (逻辑卷名)     (卷组名)//方法2
lvcreate   -l        100%vg               -n   lv1            vg_storage
//                 (使用百分比 )            (逻辑卷名)     (卷组名)

步骤4:把生成的逻辑卷格式化

 mkfs.ext4        /dev/vg_storage/lv1
//(格式化命令)

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

步骤5:挂载使用

mkdir /backup   //创建挂载点
mount /dev/vg_storage/lv1 /backup   //挂载

 步骤6:查看挂载状态,并写入配置文件,时期永久生效。

df -h   //查看挂载状态//写入配置文件方法一(使用shell命令)
echo "/dev/vg_storage/lv1 /backup ext4 defaults 0 0" >> /etc/fstab//写入配置文件方法二
vi /etc/fstab
//将/dev/vg_storage/lv1 /backup ext4 defaults 0 0写入文件cat /etc/fstab //查看写入情况

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

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

 扩容逻辑卷

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

扩容逻辑卷过程

步骤1:卸载设备和挂载点的联系

umount         /backup
//(卸载命令)   (挂载点)

步骤2:把卷组中资源继续给逻辑卷扩容

lvextend           -L 290M            /dev/vg_storage/lv1
//(逻辑卷扩容命令)  (扩展至290M)

步骤3:检查硬盘的完整性(确认目录结构、内容和文件内容没有丢失)

e2fsck         -f /dev/vg_storage/lv1
//磁盘检查命令

步骤4:重置设备在系统中容量。(步骤2的扩容动作完成了,但系统内核还没有同步这部分新修改的信息,需要手动同步)

resize2fs            /dev/vg_storage/lv1
//(重置系统容量命令)

步骤5:重新挂载硬盘设备并查看挂载状态

缩小逻辑卷

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

缩小逻辑卷过程

步骤1:卸载

步骤2:检查文件系统的完整性

e2fsck         -f /dev/vg_storage/lv1

步骤3:告知系统内核将逻辑卷lv1容量缩小到100MB

resize2fs            /dev/vg_storage/lv1   120M

步骤4:将逻辑卷容量修改为100MB

lvreduce             -L  100M            /dev/vg_storage/lv1
//(逻辑卷缩小命令)  (缩小至100M)

注意:在缩小容量时,是先告知内核缩小容量,再修改逻辑卷容量;而之前扩容时,直接修改逻辑卷容量,再告知内核扩容

步骤5:重新挂载并查看系统状态

删除逻辑卷

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

删除逻辑卷过程

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

umount    /backup   //卸载vi /etc/fstab  //修改删除相关设备在配置文件中的参数

 步骤2:删除逻辑卷

lvremove /dev/vg_storage/lv1//在确认是否删除时输入y,确认删除

步骤3:删除卷组

vgremove vg_storage
//       (填写卷组名称即可,不用设备的绝对路径)

步骤4:删除物理卷

pvremove /dev/sdb 

逻辑卷快照

LVM可以给系统创建一个快照,由于使用了写时复制(copy-on-write) 策略,相比传统的备份更有效率。 初始的快照只有关联到实际数据的inode的硬链接(hard-link)而已。只要实际的数据没有改变,快照就只会包含指向数据的inode的指针,而非数据本身。一旦你更改了快照对应的文件或目录,LVM就会自动拷贝相应的数据,包括快照所对应的旧数据的拷贝和你当前系统所对应的新数据的拷贝。这样的话,只要你修改的数据(包括原始的和快照的)不超过2G,你就可以只使用2G的空间对一个有35G数据的系统创建快照。要创建快照,在卷组中必须有未被分配的空间。和其他逻辑卷一样,快照也会占用卷组中的空间。所以,如果你计划使用快照来备份你的根(root)分区,不要将整个卷组的空间都分配给根(root)逻辑卷。

LVM快照卷两个特点:

1.快照卷的容量不行等同于逻辑卷的容量

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

创建逻辑卷快照

步骤1:查看卷组(VG)中容量是否够用

vgdisplay

步骤2:生成一个快照卷

//可以像创建普通逻辑卷一样创建快照逻辑卷
lvcreate -L   120M       -s    -n snapshot /dev/vg_storage/lv1
//参数-L 后面接快照卷大小(注意与做快照的逻辑卷容量一致)
//参数-s 表示生成一个快照卷
//参数-n 后面接快照卷名称

步骤3:卷恢复

lvconvert --merge /dev/vg_storage/snapshot

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

【存储知识】RAID(磁盘冗余阵列)与 LVM(逻辑卷管理器)相关推荐

  1. 文件系统,磁盘配额,数据存储,lvm 逻辑卷管理器

    文件系统 文件系统包括:ext2 ext3 (比ext2多一个日志)ext4                 iso9660(光盘文件系统)                 vfat  (相当于win ...

  2. linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结

    物理设备的命名规则 在Linux系统中一切都是文件,硬件设备也不例外.既然是文件,就必须有文件名称.系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大 ...

  3. RHEL磁盘阵列与LVM逻辑卷管理器

    磁盘阵列和逻辑管理器 本篇博客和各位聊聊关于linux系统中的相关磁盘阵列和逻辑管理器,都是涉及到硬件方面的操作.那我们为什么需要使用LVM以及配置RAID呢? 一般在公司中服务器需要保证数据的安全性 ...

  4. LVM逻辑卷管理器,部署逻辑卷,扩容逻辑卷,缩小逻辑卷,删除逻辑卷

    1.LVM逻辑卷管理器 硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID 磁盘阵列之后,再想修改硬盘分区大小就不容易了.换句话说,当用户想要随着 ...

  5. linux设置逻辑卷进不了图形界面,LVM逻辑卷管理器图形界面操作

    LVM逻辑卷管理器图形界面操作 LVM有关概念 LVM(Logical Volume Manager)即逻辑卷管理器,它最先是在Linux 2.4内核中被集成到内核中去的,它的出现改变了传统的磁盘空间 ...

  6. Linux如何查看LV的容量情况,LVM 逻辑卷管理器-增大LV容量

    LVM 逻辑卷管理器-增大LV的容量 步骤: (1)新增一个8e systemID的分区: (2)用pvcreate命令构建PV: (3)用vgextend命令将PV加入vg_1: (4)用lvres ...

  7. Linux就该这么学---第七章(LVM逻辑卷管理器)

    第七章节-LVM技术 逻辑卷管理器(LVM,Logical Volume Manager) 1.物理卷(PV,physical Volumn) 2.卷组(VG,Volume Group) 3.逻辑卷( ...

  8. LINUX下的LVM逻辑卷管理器

    首先初始化 1 :pvcreat /dev/sda1 /dev/sda2 意思是说初始化设备/dev/sda1 和 /dev/sda2 然后用vgscan来描一下 2: vgcreate aaa /d ...

  9. Android逻辑卷管理LVM,LINUX——LVM逻辑卷管理

    LVM: logical volumes manager LVM逻辑卷部署 物理卷->卷组->逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...

  10. LVM(逻辑卷管理器)

    目录 一.常用的LVM部署命令 二.部署逻辑卷 1.让新添加的两块硬盘设备支持 LVM 技术. 2.把两块硬盘设备加入到storage卷组中,然后查看卷组的状态. 3.切割出一个约为150MB的逻辑卷 ...

最新文章

  1. java between_Java8 Period.between方法坑及注意事项
  2. 用java程序设计一个快递_Java编程语言的优点快递
  3. Go 的新关键字 any 是个啥
  4. Spark面对OOM问题的解决方法及优化总结
  5. html怎么去li间隙,求助大神 如让图片展示在li标签里面,不要间隙 谢谢
  6. Numpy的广播与科学计算
  7. JavaScript中单例模式的实现
  8. Android 蓝牙扫描
  9. Chapter 6-Blurring Things Up之Do It Twice
  10. 看不懂英文文档,是我们英语太差吗?
  11. 灰尘对服务器影响吗,灰尘可谓是数据中心机房的死敌
  12. CleanMyMac X2023最新版安装图文详解
  13. MySQL创建数据库得语句是什么_创建数据库的语句是什么
  14. 基于RFM模型的用户价值分析——PythonTableau
  15. ACL访问控制列表(访问控制、抓取感兴趣流)详解及基本ACL和高级ACL的配置。
  16. $作为分隔符的字符串如何进行切割
  17. java jtextarea滚动条下滑,JTextArea更新时滚动条自动在最上面或者在最下面的方法...
  18. 微信小程序 云开发 聊天功能
  19. chroot的作用及详解
  20. 图像采集及处理多线程编程

热门文章

  1. New Phyto | 沈其荣团队李荣等解析生物有机肥培育抑病土壤的根际菌群抵御病原菌入侵的机制...
  2. mysql存储过程(通俗易懂)
  3. 【渗透测试】--- rbash逃逸方法简述
  4. 程序员画像,十年沉浮 | 必读
  5. ROS中launch文件和参数设置
  6. Facebook,Twitter,Linkedin分享
  7. hdu 1880 魔咒字典
  8. 02_性能_内存调整_个人学习小结
  9. html上下两个箭头符号怎么打出来,上下两个半箭头符号怎么打啊?高手进来看下,有图示的!...
  10. 《生与死》- 瓦特·兰德