红联Linux门户
Linux帮助

Linux培训教程之安全的动态磁盘存储策略

发布时间:2006-02-22 12:39:59来源:红联作者:golshing
本节要点:
1.软件RAID技术
RAID0/RAID1/RAID5
2.LVM逻辑卷管理技术
PV/VG/LV
3.案例:整合RAID和LVM的磁盘管理策略

系统环境:Windows XP + VMware 5.0 + Redhat Fedora Core3

一,软件RAID技术
*RAID技术有软件RAID以及硬件RAID之分,简称软RAID和硬RAID

(一) RAID技术产生的背景
1,普通的IDE硬盘速度不够快,性能不够稳定,不能应用于企业级的关键任务
2,高效并且稳定的SCSI硬盘价格非常昂贵,中小企业承受不起
3,RAID(Redundant Array of Inexpensive/Independent Disks),好廉价/独立磁盘冗余阵列(或简称磁盘阵列),它的出现,可以让我们把普通的IDE硬盘组成快速且安全可靠的存储设备。RAID技术的出现改变了企业级的存储结果,更多的IDE被企业使用来存储企业级的数据

(二) RAID的原理
1,RAID是一种把多块独立的硬盘按不同方式组合起来形成一个磁盘组,从而提供比单个硬盘更高的存储性能和提供数据冗余的技术。不同的组织方式成为RAID级别(RAID Levels).
2,数据冗余的功能是在用户数据一旦发生损坏后,利用冗余信息可以使损坏的数据得以恢复,从而保障了用户数据的安全性。
3,在用户看起来,组成的磁盘组就像是一个硬盘,对磁盘阵列的操作与单个硬盘的一模一样。
注:关于RAID级别目前有0-6共7种不用的级别,不过常用的是Level0,Level1,Level5三种。支持RAID磁盘阵列不但需要主板的主持,通常还要安装一种称为RAID控制器的PC适配器为管理硬盘阵列。Linux内核可以模拟RAID控制器,用来管理硬盘,但只支持级别0,1,4,5。

(三) RAID0,RAID1,RAID5介绍
1,RAID0又称Striping(磁盘扩展)。
原理:RAID0通过把连续的数据按先后顺序分散到多个磁盘上来提高存储性能,这样,数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自已的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体的存取性能。但由于数据是按顺序先后连续的写入多个磁盘的,如果其中一个磁盘的数据受到损坏,则必然会打破数据的连续性,从而大大地降低RAID的安全性。
评价:速度最快,安全性偏低。适用于只要求存取速度但安全性要求不严格的数据存储应用。
2,RAID1又称Mirroring(镜像存取)
原理:RAID1的宗旨是最大限度的保证用户数据的可用性和可修复性,需要偶数个硬盘才可以实现。其操作方式是把用户写入硬盘的数据百分之百地自动复制到别外一个或若干个硬盘上。RAID-1的磁盘利用率是1/2
评价:RAID1可以说是RAID0的一种极端,其数据安全系数极高,毕竟多个硬盘同一时间损坏的情况几乎不大可能发生,只要当其中一个硬盘中的数据发生损坏,就可以在读取时从别外数据完好的磁盘得到一致的数据拷贝。但由于数据是并行一致的存储进入各个磁盘的,势必会造成数据重复存储,且当硬盘的容量不相同时,镜像存储将以最小容量的那个磁盘为准,因而容易浪费磁盘空间,且存取速度也会大打折扣。
3,RAID5
原理:RAID5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不用的磁盘上,这样每个磁盘上就分别存储有数据和校验码。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID-5的磁盘利用率是(n-1)/n(为什么?)
评价:RAID5相当是RAID0和RAID1的综合应用,取长补短,数据的存储风险被各硬盘分担了,存取速度和数据安全性都很不错。构建RAID5磁盘阵列至少需要三块硬盘。
以下举例说明这种结构的原理:假设有三块磁盘分别为Disk0,Disk1,Disk2.它们构成了RAID5结构,最简单的情况是Disk0和Disk1除了存储本身的数据外还存储着Disk2的数据校验信息,这样当Disk2发生数据损坏时,就可以利用Disk0和Disk1的数据及校验信息进行数据恢复。三个以上硬盘的情况也相似。

(四) Linux中软件RAID的实现
1,首行Linux中实现软件RAID需要内核的支持(通常是默认支持的),Linux的内核可以模拟软件RAID控制器,实现Linux中的软件RAID。
2,硬件RAID(在主板上加插RAID控制卡)在Linux中的设备名对应于(虚拟)SCSI硬盘,即/dev/sdN (N=0,1,2...)。软件RAID设备文件名如/dev/mdN (N=0,1,2...)。
3,我们需要相应的应用软件(raidtools)创建管理RAID设备。
4,软件RAID设备可以当分区看待,需要格式化后挂载:
[root]#mkfs.ext3 /dev/md1
[root]#mount /dev/md1 /mnt/raid

(五)软件RAID的具体创建过程
1.添加硬盘
RAID设备是由多个硬盘组成的,其基本成员是硬盘分区,即需要先对硬盘分区,具分区不能同在一个物理硬盘上(一个硬盘的不同分区创建RAID是没有效果的)
2.安装raidtools
raidtools中包含有RAID创建管理工具和默认的示范性配置文件
3.编写配置文件/etc/raidtab
该配置文件可以从raidtools中的示范性配置文件里拷贝过来使用.具体的目录如下所示,注意选择对应的RAID设备文件:/usr/share/doc/raidtools-*/raid[0145].conf.sample
4.创建RAID设备
例:[root]#mkraid /dev/md0
5.格式化RAID设备
例:[root]#mkfs.ext3 /dev/md0
6.挂载使用.
例:[root]#mount /dev/md0 /opt
7.卸载md0.
例:[root]#umount /opt
8.停止RAID设备
例:[root]#raidstop /dev/md0

以创建RAID0为例,请参考:
1.添加硬盘,并为硬盘分区.
假设现有两个硬盘为/dev/sdb和/dev/sdc.使用fdisk分别在各硬盘上只创建一个分区如:/dev/sdb1以及/dev/sdc1.
2.复制RAID0的示例文件为/etc/raidtab
[root]#cp /usr/share/doc/raidtools-*/raid0.conf.sample /etc/raidtab
3.编辑/etc/raidtab文件.注意指定创建RAID设备的硬盘数和对应分区,修改后保存退出
4.创建raid设备md0. [root]#mkraid md0
5.格式化md0 [root]#mkfs.ext3 /dev/md0
6.挂载md0 (在不使用RAID设备后需要先卸载RAID设备再使用raidstop命令去除RAID)


注意:还可以使用以下命令检测构面raid设备的组件是否有损坏及应用状态:
[root]#lsraid -A -a /dev/md0
通过以下命令查看RAID设备的内核状态:
[root]#more /proc/mdstat
通过以下命令可以模拟RAID设备失效,通常用于测试RAID设备:
[root]#raidsetfaulty /dev/md0 /dev/sdb1 (指定md0设备的sdb1出现问题)
以下命令当RAID设备成员出现损坏时向RAID设备中添加新的硬盘分区成员:
[root]#raidhotadd /dev/md0 /dev/sdd1 (如果此时查看RAID设备的内核状态则 可以发现RAID1或RAID5会利用新增的成员自动对数据进行恢复)
以下命令用于去除RAID设备成员
[root]#raidhotremove /dev/md0 /dev/sdb1

(六) 使用冗余磁盘自动修复RAID设备
方法是直接修改/etc/raidtab文件。
首先指定冗余设备的个数(nr-spare-disks),并添加以下字段:
raiddev /dev/sdd1
spare-disk (顺序编号)
这样在RAID设备出现问题时可以对RAID1以及RAID5自运调用冗余设备对RAID设备进行修复


二,LVM逻辑卷磁盘存储技术
*LVM技术就是使用软件技术在物理分区上模拟出新的分区

(一) LVM产生的背景
企业级应用对数据存储的要求日益增强使得传统的磁盘分区存储技术显得不够灵活。LVM技术可以实现对存储设备容量的动态调整已适合存储需求,因而是重要的存储技术手段.
重要概念:PV (Phisical Volume) VG (Volume Group) LV (Logical Volume)

(二) LVM管理器
命令语法:
[root]#pvscan (列示系统中现有的物理卷)
[root]#pvcreate /dev/sda1 /dev/sda2 /dev/sda3 (对物理分区进行初始化)
[root]#vgscan (在创建卷组之前必须要运行该命令,它会扫描系统中现存的物理卷,并生成一个配置文
件/etc/lvmtab和一个数据库文件/etc/lvmtab.d)
[root]#vgcreate vg0 /dev/sda1 /dev/sda2 (将物理分区合并成为卷组,加-s参数可以指定物理扩展块PE的大小以满足不同要求的逻辑卷存储要求,PE越大,则LVM的容量上限越大)
[root]#vgdisplay vg0 (列示指定卷组详细信息)
[root]#lvcreate -n (*LVM-name*) -L (指定逻辑卷大小) vg0 (表示从vg0产生出来)
该命令运行后会在/dev/vg0/目录下产生对应名称为LVM-name的逻辑卷LVM.
[root]#lvscan (列示当前系统中的LVM状态和数量)
[root]#lvdisplay (*LVM-name*) (可以查看LVM的详细信息)
[root]#lvresize -L +10M /dev/vg0/LVM-name (为ext2及ext3文件系统的LVM无损扩容,注意使用前需先卸载欲扩容LVM设备。)
[root]#vgextend vg0 /dev/sdc1 (为卷组新增成员)
[root]#pvmove /dev/sda1 [/dev/sda2] (可以透过LVM透明地对物理卷PV数据进行移动操作,省略第二个参数表示移除/dev/sda1上的数据,并把数据移动到LV上空余的空间上存储起来,这样做的结果是/dev/sda1就可以空余出来)

注意:
使用FDISK可以在新建分区上创建Linux LVM的文件系统(编号为8e)
lvcreate新建好的LVM可以当成普通的分区看待,需经过格式化并挂载操作才可以使用

(三) 从卷组中删掉指定的物理卷
命令语法:
[root]#pvmove /dev/sda1 (删除sda1中的数据,并把数据转移到剩余的空闲PV中)
[root]#vgreduce /dev/sda1 (将sda1从卷组中删除,该命令与vgextend相对应。sda1从卷组中删除后可使用fdisk进行类型转化再经格化后即可成为自由的分区了)

(四) 为指定的逻辑卷生成快照,用于数据备份
[root]#lvcreate -s -l 8 -n SNAPSHOT /dev/vg0/LVM-NAME (该命令可以生成指定逻辑卷当前时刻的快照,常用于备份数据。-s表于snapshot, -l 指定物理扩展块PE的个数,-n 快照名称. 这样会在/dev/vg0/目录下生成名为SNAPSHOT的快照文件,可以格式化并挂载)

(五) 去除逻辑卷功能
如果不想使用逻辑卷功能,我们可以利用与创建逻辑卷时相反的思路逆向来实现,具体步骤如下:
1.确定当前系统指定的逻辑卷没有正在挂载使用,并且不处于快照状态(删除时会有提示),可直接输入mount命令查看
2.再使用lvremove命令删除已经创建过的逻辑卷
[root]#lvremove /dev/vg0/LVM-NAME
3.使用vgchange命令来停止vg0 的工作
[root]#vgchange -an vg0 (-ay 表示激活指定卷组工作)
4.使用vgremove删除指定的卷组
[root]#vgremove vg0
5.剩下的物理卷设备经挂载即可自由使用


三,案例:整合RAID及LVM磁盘管理技术

实验环境:Windows XP + VMware 5.0 + Redhat Fedora Core3

要求:使用三个硬盘构建RAID-5存储数据,在保证数据安全性的同时还能让磁盘空间根据需要动态的缩放。并尝试在RAID-5实现逻辑卷挂载/home目录.


*提示:创建RAID设备--创建逻辑卷---修改/etc/fstab文件---修改/etc/rc.d/rc.sysinit在启动时激活RAID设备

*注意:
1.使用RAID设备来创建LVM的方法同使用普通IDE硬盘构建LVM逻辑卷的方法一样:
[root]#pvcreate /dev/RAID设备名称
2.修改/etc/fstab自动挂载RAID设备后还要修改/etc/rc.d/rc.sysinit启动脚本,定位到脚本的以下字段(或相近字段)update_boot_stage RCraid并在第一个if条件语句的then代码块中添加以下命令:raidstart /dev/md0(RAID设备). 这样做的目的是为了在激活RAID设备的前提下,LVM逻辑卷管理器才能够依次激活PV,VG,LV并最后由/etc/fstab配置文件成功实现挂载选项

笔记对某些重要问题做了必要注释,希望有利于大家的理解。另外由于使用到的命令比较多,大家在练习时还要多注意结全shell提供的功能,例如按两下tab键的命令补全功能,简单的shell脚本语法实现循环工作等等......
文章评论

共有 0 条评论