一、RAID简介
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列"之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发 挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响。
原理:利用数组方式来作磁盘组
磁盘阵列其样式有三种,一是外接式磁盘阵列柜、二是内接式磁盘阵列卡,三是利用软件来仿真。
外接式磁盘阵列柜最常被使用大型服务器上,具可热交换(Hot Swap)的特性,不过这类产品的价格都很贵。
内接式磁盘阵列卡,因为价格便宜,但需要较高的安装技术,适合技术人员使用操作。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作。
利用软件仿真的方式,是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI卡上的多块硬盘配置成逻辑盘,组成阵列。软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低,有的降低幅度还比较大,达30%左右。因此会拖累机器的速度,不适合大数据流量的服务器。
二、RAID的几种工作模式
# 仅讨论 RAID0,RAID1,RAID5,RAID10这四种,这四种比较典型
1)RAID 0 (又称为Stripe或Striping--分条)
即Data Stripping数据分条技术。RAID 0可以把多块硬盘连成一个容量更大的硬盘群,可以提高磁 盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,成本低,要求至少两个磁盘,一般只是在那些对数 据安全性要求不高的情况下才被使用。
容错性: | 没有 | 冗余类型: | 没有 |
热备盘选项: | 没有 | 读性能: | 高 |
随机写性能: | 高 | 连续写性能: | 高 |
需要的磁盘数: | 只需2个或2*N个(这里应该是多于两个硬盘都可以) | 可用容量: | 总的磁盘的容量 |
典型应用: | 无故障的迅速读写,要求安全性不高,如图形工作站等。 |
三、RAID详解
如图所示:系统向 三个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。我们从图中可以清楚的看到通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。
从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。
RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。
RAID 0具有的特点,使其特别适用于对性能要求较高,而对数据安全不太在乎的领域,如图形工作站等。对于个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。
计算机技术发展迅速,但硬盘传输率也成了性能的瓶颈。怎么办?IDE RAID技术的成熟让我们轻松打造自己的超高速硬盘。在实际应用中,RAID 0硬盘阵列能比普通IDE 7200转ATA 133硬盘快得多,时至今日,在大多数的高端或者玩家主板上我们都能找到一颗PROMISE或者HighPoint的RAID芯片,同时发现它们提供的额 外几个IDE接口。没错,RAID已经近在眼前,难道你甘心放弃RAID为我们带来的性能提升吗?答案当然是否定的!
RAID可以通过软件或硬件实现。像Windows 2000就能够提供软件的RAID功能,但是这样需要消耗不小的CPU资源,降低整机性能。而硬件实现则是一般由RAID卡实现的,高档的SCSI RAID卡有着自己专用的缓存和I/O处理器,但是对于家庭用户来说这样的开销显然是承受不了的,毕竟为了实现RAID买两个或者更多的HDD已经相当不 容易了。我们还有一种折中的办法——IDE RAID。或许这才是普通人最容易接受的方法。虽然IDE RAID在功能和性能上都有所折中,但相对于低廉的价格,普通用户看来并不在意。
RAID 0至少需要两块硬盘才能够实现,它的容量为组成这个系统的各个硬盘容量之和,这几块硬盘的容量要相同,在家用IDE RAID中一般级联两块硬盘,一定要用同型号同容量的硬盘。RAID 0模式向硬盘写入数据的时候把数据一分为二,分别写入两块硬盘,读取数据的时候则反之,这样的话,每块硬盘只要负担一半的数据传输任务,得到的结果也就是 速度的增加。
(1)RAID 0最简单方式(我觉得这个方式不是它本意所提倡的)
就是把x块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起,形成一个独立的逻辑驱动器,容量是单独硬盘的 x倍,在电脑数据写时被依次写入到各磁盘 中,当一块磁盘的空间用尽时,数据就会被自动写入到下一块磁盘中,它的好处是可以增加磁盘的容量。
速度与其中任何一块磁盘的速度相同,如果其中的任何一块磁盘出现故障,整个系统将会受到破坏,可靠
(2)RAID 0的另一方式(常指的RAID 0就是指的这个)
是用n块硬盘选择合理的带区大小创建带区集,最好是为每一块硬盘都配备一个专门的磁盘控制器,在 电脑数据读写时同时向n块磁盘读写数据,速度提升n倍。提高系统的性能。
2)RAID 1 (又称为Mirror或Mirroring--镜像)
RAID 1称为磁盘镜像:把一个磁盘的数据镜像到另一个磁盘上,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,具有很高的数据冗余能力,但磁盘利用 率为50%,故成本最高,多用在保存关键性的重要数据的场合。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。
(1)RAID 1的每一个磁盘都具有一个对应的镜像盘,任何时候数据都同步镜像,系统可以从一组 镜像盘中的任何一个磁盘读取数据。
(2)磁盘所能使用的空间只有磁盘容量总和的一半,系统成本高。
(3)只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。
(4)出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。
(5)更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。
(6)RAID 1磁盘控制器的负载相当大,用多个磁盘控制器可以提高数据的安全性和可用性。
如图所示:当读取数据时,系统先从RAID1的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘 上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回 的数据损失。
Raid 1的优缺点
由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而Mirror(镜像)的磁盘空间利用率低,存储成本高。 Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。
3) RAID 5 (可以理解为是RAID 0和RAID 1的折衷方案,但没有完全使用RAID 1镜像理念,而是使用了"奇偶校验信息"来作为数据恢复的方式,与下面的RAID10不同。)
容错性: | 有 | 冗余类型: | 奇偶校验 |
热备盘选项: | 有 | 读性能: | 高 |
随机写性能: | 低 | 连续写性能: | 低 |
需要的磁盘数: | 三个或更多 | ||
可用容量: | (n-1)/n的总磁盘容量(n为磁盘数) | ||
典型应用: | 随机数据传输要求安全性高,如金融、数据库、存储等。 |
RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID 5为例,其数据存储方式如所示:图中,Ap为A1,A2和A3的奇偶校验信息,其它以此类推。由图中可以看出,RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘 上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。
4) RAID 10(可以理解为是RAID 0和RAID 1的折衷方案,但没有完全使用RAID 1镜像理念,而是使用了"奇偶校验信息"来作为数据恢复的方式)
RAID10也被称为镜象阵列条带。象RAID0一样,数据跨磁盘抽取;象RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是 RAID 0+1。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提 供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。
类型 | 读写性能 | 安全性 | 磁盘利用率 | 成本 | 应用方面 |
RAID0 | 最好(因并行性而提高) | 最差(完全无安全保障) | 最高(100%) | 最低 | 个人用户 |
RAID1 | 读和单个磁盘无分别,写则要写两边 | 最高(提供数据的百分之百备份) | 差(50%) | 最高 | 适用于存放重要数据,如服务器和数据库存储等领域。 |
RAID5 | 读:RAID 5=RAID 0(相近似的数据读取速度) 写:RAID 5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入) |
RAID 5<RAID 1 | RAID 5>RAID 1 | RAID 5<RAID 1 | 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 |
RAID10 | 读:RAID10=RAID0 写:RAID10=RAID1 |
RAID10=RAID1 | RAID10=RAID1(50%) | RAID10=RAID1 | 集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的"奇偶校验信息",磁盘利用率一样是50% |
四、LVM简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。
由四个磁盘分区可以组成一个很大的空间,然后在这些空间上划分一些逻辑分区,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给空间不够用的分区使用。
五、LVM基本术语
前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。首先我们讨论以下几个LVM术语:
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
*物理卷(Physical Volume,PV)
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。
逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
上图所示LVM抽象模型,展示了PV、VG、LV三者之间关系:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
六、LVM操作实例
2)新建一个分区:
[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# fdisk -l
准备工作就绪
3)创建PV
[root@localhost ~]# pvcreate /dev/sdb1
4)查看PV
[root@localhost ~]# pvdisplay
[root@localhost ~]# pvs
[root@localhost ~]# pvscan
[root@localhost ~]# vgcreate vg /dev/sdb1
说明:vg是创建的VG设备的名称,可以随便取;后面接上述的设备名
[root@localhost ~]# vgdisplay
Total PE //PE的总数量,2047 x 4MB = 8.00GB
[root@localhost ~]# vgs
[root@localhost ~]# vgscan
7)创建LV
[root@localhost ~]# lvcreate -L 5G -n lv1 vg
[root@localhost ~]# lvdisplay
[root@localhost ~]# vgs
VFree 从8g 减少到了3g,另外的5g 被分配到了lv1.
9)格式化LV
[root@localhost ~]# mkfs.ext4 /dev/vg/lv1
[root@localhost ~]# mkdir /data1
[root@localhost ~]# mount /dev/vg/lv1 /data1
[root@localhost ~]# vim /etc/fstab
下面我们将对LVM进行扩容和缩减操作,所以向/data1 中写入测试数据以验证LVM 的磁盘动态管理。
[root@localhost ~]# touch /data1/123.txt
[root@localhost ~]# touch /data1/234.txt
[root@localhost ~]# touch /data1/345.txt
[root@localhost ~]# ls -l /data1
LVM的扩容
LVM最大的好处就是可以对磁盘进行动态管理,而且不会丢失现有的数据。假如有一天,lv1的使用量达到了80%,需要扩容,那我们该怎么做呢?因为vg中还有很多剩余空间,所以我们可以从vg中再分配点空间给lv1。
[root@localhost ~]# vgs
[root@localhost ~]# lvextend -L +1G /dev/vg/lv1
[root@localhost ~]# vgs
4)再查看lv1的容量,从5G增加到了6G
[root@localhost ~]# lvs
5)使用df -h命令查看实际的磁盘容量
[root@localhost ~]# df -h
发现实际容量并没有变化,因为我们的系统还不认识刚刚添加进来的磁盘的文件系统,所以还需要对文件系统进行扩容
[root@localhost ~]# resize2fs /dev/vg/lv1
[root@localhost ~]# df -h
现在的可用容量已经增加到了5.8G
[root@localhost ~]# ls -l /data1
还有一种情况,就是假如我们的vg空间不够用了,怎么办?这时我们就需要对VG进行扩容。
[root@localhost ~]# fdisk -l
[root@localhost ~]# pvcreate /dev/sdc
[root@localhost ~]# vgs
[root@localhost ~]# vgextend vg /dev/sdc
[root@localhost ~]# vgs
现在vg的容量为27.99g, 增加了20GB,即一块物理硬盘/dev/sdc的容量,VG扩容成功。
[root@localhost ~]# vgdisplay
[root@localhost ~]# umount /dev/vg/lv1
[root@localhost ~]# df -h
[root@localhost ~]# resize2fs /dev/vg/lv1 4G
[root@localhost ~]# e2fsck -f /dev/vg/lv1
[root@localhost ~]# resize2fs /dev/vg/lv1 4G
[root@localhost ~]# lvreduce –L 4G /dev/vg/lv1
说明:Step E 和Step D 缩减的大小必须保持一致,这里的4G是缩减到的大小;如果使用的是"-4G",则表示容量减少多少的意思。
[root@localhost ~]# mount /dev/vg/lv1 /data1
[root@localhost ~]# df -h
[root@localhost ~]# ll /data1
[root@localhost ~]# umount /dev/vg/lv1
[root@localhost ~]# pvs
[root@localhost ~]# vgreduce vg /dev/sdc
[root@localhost ~]# pvs
[root@localhost ~]# vgs
[root@localhost ~]# umount /dev/vg/lv1
[root@localhost ~]# lvremove /dev/vg/lv1
[root@localhost ~]# vgremove vg
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdc
LVM 快照(snapshot)
快照就是将当时的系统信息记录下来,就好像照相一样,未来若有任何资料变动了,则原始资料会被移动到快照区,没有被改动的区域则由快照区与档案系统共享。
快照(snapshot)
LVM 系统快照区域的备份示意图(虚线为档案系统,长虚线为快照区)
左图为最初建立系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个PE 区块) 作为数据存放处。此时快照区内并没有任何数据,而快照区与系统区共享所有的PE 数据, 因此你会看到快照区的内容与文件系统是一模一样的。等到系统运作一阵子后,假设A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区,所以在右图的快照区被占用了一块PE 成为A,而其他B 到I 的区块则还是与文件系统共享!
[root@localhost ~]# lvcreate -L 5G -n lv1 vg
[root@localhost ~]# mkfs.ext4 /dev/vg/lv1
[root@localhost ~]# mount /dev/vg/lv1 /data1
[root@localhost ~]# touch /data1/111
[root@localhost ~]# touch /data1/222
[root@localhost ~]# cp -a /etc/ /data1
[root@localhost ~]# cp -a /boot/ data1
[root@localhost ~]# lvcreate -L 80M -s -n lv1snap /dev/vg/lv1
说明:为/dev/vg/lv1 创建一个大小为80M,名称为lv1snap 的快照。
[root@localhost ~]# lvdisplay
/dev/vg/lv1snap 的LV Size 为5GB,使用量为0.01%.
[root@localhost ~]# mkdir /snapshot
[root@localhost ~]# mount /dev/vg/lv1snap /snapshot
[root@localhost ~]# rm -rf /data1/etc
[root@localhost ~]# ll /data1
[root@localhost ~]# ll /snapshot
[root@localhost ~]# cp -a /sbin/ /data1
[root@localhost ~]# ll /data1
[root@localhost ~]# ll /snapshot/
[root@localhost ~]# lvdisplay
[root@localhost ~]# df -h
[root@localhost ~]# cd /snapshot
[root@localhost ~]# ls
[root@localhost ~]# tar zcf /tmp/lvm.tar.gz *
[root@localhost ~]# umount /snapshot/
[root@localhost ~]# lvremove /dev/vg/lv1snap
[root@localhost ~]# umount /data1
[root@localhost ~]# mkfs.ext4 /dev/vg/lv1
[root@localhost ~]# mount /dev/vg/lv1 /data1
[root@localhost ~]# tar zxf /tmp/lvm.tar.gz -C /data1
注意:对lv1的修改量不能超过快照的大小,由于原始数据会被搬移到快照区,如果你的快照区不够大,若原始资料被更动的实际数据量比快照区大,那么快照区当然容纳不了,这时候快照功能会失效喔!