Linux服务器软阵列设置


组织多个小容量硬盘成为有较大空间的方法:一种方法是使用软件RAID技术,使用多块硬盘做RAID0,这种方法相对而言比较简单,但是必须使用相同容量的硬盘,有一定的局限性;另外一种方式是使用逻辑卷(Logical Volume )技术,这种技术可以支持任何大小的硬盘,但是做起来比较麻烦。我们先来讲使用软件RAID的方法。
实例一
譬如客户拿两个80G的硬盘来做在线盘,分别接在第二个IDE口的主和从接口上,那么我们首先删除两个80G硬盘上的所有分区,然后再使用fdisk 给硬盘创建两个主分区,分别为 /dev/hdc1 和 /dev/hdd1。然后我们使用vi 编辑器,在/etc 目录下创建一个名为 raidtab的配置文件。文件内容如:
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 0
chunk-size 512
device /dev/hdc1
raid-disk 0
device /dev/hdd1
raid-disk 1
中间空格部分不用对齐,可以用tab隔开,也可以用空格隔开。行与行之间一定要用回车换行。编辑好raidtab文件后,只需要运行mkraid 命令,就可以创建阵列了。此时,只需要像格式化普通硬盘分区一样格式化/dev/md0就可以了。
mkfs.ext3 /dev/md0
然后,在fstab里配置好自动挂载点,将/dev/md0 挂载到 /game 挂载点就可以了。
逻辑卷的方法逻辑卷的方法比较复杂,需要进行如下几个步骤创建物理卷——把多个物理卷捆绑成一个卷组——在卷组上创建逻辑卷有几个概念要理解:物理卷:物理卷其实就是磁盘分区,也可以是一整个物理磁盘。物理卷组:多个物理卷组成物理卷组,可以理解为一个逻辑的磁盘。逻辑卷:在物理卷组上建立的逻辑文件卷,可以理解为分区。那么我们还是以刚才的实际例子来讲解:
第一步:创建物理卷pvcreate /dev/hdcpvcreate /dev/hdd这里是把整个物理硬盘创建一个物理卷,如果是要把硬盘上的分区创建物理卷,那么就要使用fdisk工具中的t选项把分区类型标识为8e 类型,也就是linux LVM类型。然后在用pvcreate命令来创建物理卷。要注意的是,如果以前系统没有使用过LVM的话,系统会提示没有lvmtab.conf文件。那么请先运行vgscan命令,来创建这个文件。
第二步:创建物理卷组
vgcreate vm0 /dev/hdc /dev/hdd
这样就创建了一个名字叫vm0的逻辑卷组,相当于创建了一个新的逻辑硬盘。一般而言,卷组创建后就会被自动激活,你也可以使用下面的命令来激活刚才的卷组。
vgchange –a y /dev/vm0
如你以后想要删除卷组,那么你要先关闭vm0的活动状态,使用
vgchange –a n /dev/vm0
如果要删除刚才的卷组,可以使用如下命令:
vgremove /dev/vm0
要想查看物理卷组的信息,可以使用
vgdisplay
该命令可以显示目前系统上所有的物理卷组信息。其中一个很重要的信息就是卷组的大小信息,这个信息将为后一步创建逻辑卷的时候,逻辑卷的大小提供参考。
第三步:在物理卷组上创建逻辑卷
lvcreate –i 2 –I 512 –L 148G –n game /dev/vm0
这样就在物理卷组vm0上创建了一个148G的逻辑卷,名字叫game。你可以理解为在虚拟的硬盘vm0上创建了一个分区叫 game 。其中-i 参数用来指定有多少个物理卷参与条带运算,-I 参数则指定每个条带的大小。其中-L参数用来指定逻辑卷的大小,大小数字要参考前面vgdisplay命令中显示的物理卷组的大小。
这样逻辑卷就创建完毕了,接下来我们就可以当一个普通磁盘一样来使用/dev/vm0/game这个逻辑卷了。
mkfs.ext3 /dev/vm0/game
然后编辑fstab文件就可以了。
实例二
linux下raid5磁盘阵列实施
4块320G硬盘,每个硬盘首先划出10G硬盘,剩下的310G组成raid5,第三(sdc)第四(sdd)硬盘照上面输入。每个硬盘的10G系统盘区(sda1)都要可以启动。这样就达到了硬盘可以任意互换次序而不影响系统运行和raid5的数据的效果。
aptitude install mirrordir mdadm ;安装 mirrordir 和raid管理程序。首先分区,格式化分区,然后用mirrordir工具进行复制,并让每个磁盘可以启动系统。
复制分区表,使用这个命令:
sfdisk -d /dev/sda |sfdisk /dev/sdb;此命令有危险,会把sdb盘的分区表改的跟sda完全相同
sfdisk -d /dev/sda |sfdisk /dev/sdc
sfdisk -d /dev/sda |sfdisk /dev/sdd
格式化备用系统分区
mkfs.ext3 /dev/sdb1
mkfs.ext3 /dev/sdc1
mkfs.ext3 /dev/sdd1
将系统复制到备用分区:
mkdir /1
mkdir /2
mount /dev/sda1 /1 ;(当前的系统根分区)
mount /dev/sdb1 /2 ;(复制到第二个硬盘)
mirrordir /1 /2 ;(这里不要写反了,哈哈)
grub-install --root-directory /2 /dev/sdb ;(让第二个硬盘可以grub启动)
做成脚本如下:
copy2.sh:(复制sda1到sdb1 并让sdb可以独立启动系统)
#!/bin/sh
mount /dev/sda1 /1
mount /dev/sdb1 /2
mirrordir /1 /2
grub-install --root-directory=/2 hd1 ;对sdb安装grub启动程序
unmount /1
unmount /2
----------------------copy2.sh 结束
后面的如法炮制。
建立raid5:
mdadm -a
上面的3个同步命令,
copy2.sh 可以每天执行一次, 让 2号硬盘的系统跟工作用的硬盘一样.
通过上面的实施, 我们得到了3个备份系统, 可以在系统不能启动是,将后面的2,3,4号磁盘换到1号磁盘的位置进行启动。
(1)软阵列的制作
准备工作,需要对待阵列的磁盘进行格式化并分区。比如要对 /dev/hda和/dev/hdb两个ide盘做成阵列 /dev/md0 则先将/dev/hda和/dev/hdb格式化为/dev/hda1、/dev/hdb1 两个大的分区。然后再使用如下指令来构建/dev/md0阵列:
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/hd[ab]1 (*)
其中
--create 表示创建阵列,/dev/md0 是待创建的阵列名
--level=0 表示阵列级别为 raid0
--raid-devices=2 表示此阵列包含的磁盘分区数量为2个, /dev/hd[ab]1表示具体的分区,这里为/dev/hda1和/dev/hdb1
此指令也可简写为
mdadm -C /dev/md0 -l0 -n2 /dev/hd[ab]1
其意义与(*)是一样的
(2)软阵列的启用与停用
用mdadm启用软阵列时需要用到它的配置文件,这个配置文件由创建阵列时运行如下两条指令产生:
echo "DEVICE /dev/hd[ab]1">/etc/md0.conf
mdadm --detail --scan>>/etc/md0.conf
其中 /dev/md0 是上一步创建的阵列设备名,/etc/md0.conf是 /dev/md0的配置文件。第一步创建一个新的阵列后,一定要通过上面的指令运行得到它的配置文件,否则,阵列停用后将无法启用。现在,通过配置文件可以操作阵列了。
停用阵列: mdadm -S /dev/md0
启用阵列: mdadm -A /dev/md0 -c /etc/md0.conf
-c 表示指定配置文件(configure)
(3)阵列的格式化及挂载
在阵列刚刚创建后,最好格式化一下
mkfs.ext3 /dev/md0
同分区的挂载一样,阵列挂载用mount来完成
mkdir -p /dir
mount /dev/md0 /dir
根据以上的步骤,还可以做出更多的阵列,前提是分区要分好。比如: mdadm -c /dev/md1 -l0 -n2 /dev/hd[ab]2 创建了 /dev/md1阵列,它占用了/dev/hda2 /dev/hdb2两个分区。
实例三
debian下应用raid5提高数据安全性
现在160G硬盘性价比比较高,4个西部数据160G盘,用软件raid5,组成480G的一个卷,因为是raid5,支持一个硬盘损坏,每个盘拿出10G做系统,用raid1,然后剩下的作raid5,对于读操作来说,raid1速度的提升跟raid0一样,因为可以从多个盘片分别读取。软件raid支持同一组硬盘的不同分区组建不同的raid格式。
raid5原理很简单,就是多一个盘用来做奇偶校验,这些盘是同等的互为校验,就是raid5,如果有一个专门的校验盘,就是raid4, 因为冗余了一个盘,所以就允许一个盘损坏。如果冗余2个盘,就是raid6,允许2个盘同时损坏。由于算法只是奇偶校验就够了,所以计算量很小,并不像大家想像的那样占用大量cpu处理。
debian下安装步骤:
首先,内核中要支持raid5,执行modconf 添加raid5和raid1支持。
安装mdadm软件包:apt-get install mdadm
分区:
建立md0卷.暂时空缺的硬盘用"missing"代替"/dev/hdex".raid5允许一个分区用missing代替,以后可以用mdadm -manage /dev/md0 --add /dev/hdxx来填加这个missing的分区。
#mdadm -C /dev/md0 --level 5 --raid-devices 4 /dev/hdb8 /dev/hdd8 /dev/hde8 /dev/hdg8
mdadm: array /dev/md0 started.
配置/etc/mdadm/mdadm.conf
先手动列出组建raid的分区:
echo DEVICE /dev/hd*6 /dev/hd*8 >/etc/mdadm/mdadm.conf
然后自动测试raid设置并记录到/dev/mdadm/mdadm.conf:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
格式化为reiserfs分区
# mkfs.reiserfs /dev/md0
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
Guessing about desired format.. Kernel 2.6.11-amd64 is running.
Format 3.6 with standard journal
Count of blocks on the device: 108998928
Number of blocks consumed by mkreiserfs formatting process: 11538
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 85176854-9911-4154-9580-536b5b0f3281
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/md0'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok挂到/mnt
mount /dev/md0 /mnt将home目录同步过来
mirrordir /home /mnt修改/de/fstab 让md0做home
到现在就完成了raid5的部署。查看/proc/mdstat文件,可以了解现在组建raid5的进度:
files:/etc# cat /proc/mdstat
Personalities : [raid1] [raid5]
md0 : active raid5 hdg8[4] hde8[2] hdd8[1] hdb8[0]
435995712 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
[==============>......] recovery = 73.6% (106991744/145331904) finish=19.1min speed=33334K/sec
unused devices: <none>
从raid中取下一个分区:
files:/# mdadm --manage /dev/md1 -r /dev/hdg6
将一个分区加入到raid:
files:/# mdadm --manage /dev/md1 -a /dev/hdg6
查看修复进度:
files:/# cat /proc/mdstat
Personalities : [raid1] [raid5]
md0 : active raid5 hdb8[0] hdg8[3] hde8[2] hdd8[1]
435995712 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
md1 : active raid1 hdg6[4] hdb6[0] hde6[2] hdd6[1]
9767424 blocks [4/3] [UUU_]
[========>............] recovery = 42.0% (4107584/9767424) finish=3.7min speed=24917K/sec
unused devices: <none>
mdadm --manage /dev/md0 --remove #取消一个raid
mdadm --manage /dev/md0 -f /dev/hdc8 #把hdc8标识为失效
故障恢复步骤:
1.关机,取出坏盘
2.装上新盘,开机
3.先umount损坏分区所使用的分区 umount /dev/md0 有时需要停掉一些服务才可以卸载分区,用lsof看哪些程序占用md0的文件。
4.mdadm /dev/md0 -f /dev/hdc8 -r /dev/坏盘hdc8
5. 给新盘分区 和其它的盘完全一样 sfdisk -d /dev/hda |sfdisk /dev/hdc
6.mdadm --manage /dev/md0 --add /dev/hdc8
7.mdadm -R /dev/md0
8.mount /dev/md0 根据/etc/fstab来挂载分区.
9.系统会自动同步,用watch cat /proc/mdstat 查看 100%的时候就ok了 840G的阵列需要5小时才可以完成,在重建的同时,阵列已经可以投入使用了。如果阵列配置文件丢失,造成阵列解散,只要分区数据没有破坏,就可以用mdadm -create进行重建,而不丢失数据。
1.mdadm -create /dev/md0 --level=5 --raid-devices=4 /dev/hda8 /dev/hdb8 /dev/hdc8 /dev/hdd8 ;跟新建raid命令一样,只是系统会提示,磁盘原来是raid中的一个,输入y继续。
2.mount /dev/md0 /mnt ;ls /mnt 数据应该都回来了。
3.重新建立/etc/mdadm/mdadm.conf ,方法跟前面建立raid5时一样。
下面是一个操作实例(红色为键入的命令):
#mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/hda11 /dev/hdc6 /dev/hdd6
mdadm: /dev/hda11 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
mdadm: /dev/hdc6 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
mdadm: /dev/hdd6 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
Continue creating array? y
mdadm: array /dev/md1 started.
# mount /dev/md1 /home1
# df -h /home1Filesystem 容量 已用 可用 已用% 挂载点
/dev/md1 56G 17G 40G 30% /home1
# ls /home1
192.168.10.80 192.168.2.2 192.168.8.1 192.168.9.1
# cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda10[0] hdd7[3] hdc7[2] hdb1[1]
234444288 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
md1 : active raid5 hdd6[3] hdc6[1] hda11[0]
58412032 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 1.0% (295540/29206016) finish=30.9min speed=15554K/sec
unused devices: <none>
实例四
Linux下如何用mdadm实现软件RAID
一:简要介绍
数据在现今企业中占有重要的地位,数据存储的安全性有而是人们使用计算机要注意的重要问题之一。通常情况下人们在服务器端采用各种冗余磁盘阵列RAID技术来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器,但是很多中小企业没有足够的经费承受这笔开销。我们有没有方法可以通过软件来实现 RAID呢?
由于本文中会使用mdadm软件,而该软件一般情况下都会集成在Redhat linux中,所以可以直接使用。
作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID 的支持,这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本。下面就让我们看一个 Redhat Linux AS 4下的软件RAID配置实例吧。
● 操作系统为RedHat Linux AS 4;
● 内核版本为2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。
在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期 Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。
实现过程
-:配置RAID1
第一步:以root用户登录系统,对磁盘进行分区。
#fdisk /dev/sdb
将设备/dev/sdb上的全部磁盘空间划分给一个主分区,建立/dev/sdb1分区,并修改分区的类型标识为fd(linux raid auto),然后对剩余的磁盘做同样的操作。创/dev/sdb1,/dev/sdc1,/dev/sdd1三个分区。
第二步:创建RAID阵列
#mdadm -Cv /dev/md0 -l1 -n2 -x1 /dev/sd{b,c,d}1
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 \
/dev/hda1 /dev/hdc1
小提示:-C参数为创建阵列模式。/dev/md0为阵列的设备名称。-l1为阵列模式,可以选择0,1,4,5等多种不同的阵列模式,分别对应 RAID0,RAID1,RAID4,RAID5。-n2为阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目。-x1为阵列中备用磁盘的数目,因为我们是RAID1所以设置当前阵列中含有一块备用磁盘。/dev/sd{b,c,d}1为参与创建阵列的磁盘名称,阵列由三块磁盘组成,其中两块为镜象的活动磁盘,一块备用磁盘提供故障后的替换。
第三步:查看RAID阵列情况
创建RAID过程需要很长时间,因为磁盘要进行同步化操作,查看/proc/mdstat文件,该文件显示RAID的当前状态和同步完成所需要的时间。
#cat /proc/mdstat
系统会显示——
personalities:[raid1]
read_ahead 1024 sectors
event:1
md0:active raid1 sdb1[0] sdc1[1] sdd1[2]
18432000 blocks [2/2] [UU]
unused devices:<none>
出现上面的提示后就表示创建的RAID1已经可以使用了。
第四步:编辑阵列的配置文件
mdadm的配置文件主要提供人们日常管理,编辑这个文件可以让RAID更好的为我们工作,当然这个步骤不是必须的。不经过编辑配置文件也可以让RAID工作。首先扫描系统中的全部阵列:
#mdadm --detail -scan
扫描结果将显示阵列的名称,模式和磁盘名称,并且列出阵列的UUID号,UUID也同时存在于阵列的每个磁盘中,缺少该号码的磁盘是不能够参与阵列的组成的。接下来编辑阵列的配置文件/etc/mdadm.conf文件,将扫描的显示结果按照文件规定的格式修改后添加到文件的末尾。
#vi /etc/mdadm.conf
添加以下内容到mdadm.conf文件中
device /dev/sdb1 /dev/sdc1 /dev/sdd1
array /dev/md0 level=raid1 num-devices=2 uuid=2ed2ba37:d952280c:a5a9c282:a51b48da spare-group=group1
在配置文件中定义了阵列的名称和模式,还有阵列中活动磁盘的数目与名称,另外也定义了一个备用的磁盘组group1。
第五步:启动停止RAID1阵列
启动和停止RAID1阵列的命令非常简单。启动直接执行“mdadm -as /dev/md0”即可。执行mdadm -s /dev/md0将停止RAID1阵列。另外在rc.sysinit启动脚本文件中加入命令mdadm -as /dev/md0后将设置为阵列随系统启动而启动。
总结:配置RAID1的步骤相对RAID5来说不是很烦琐,不过在使用mdadm时应该注意就是不要在一块硬盘上划分多个分区,再将多个分区组成阵列,这种方式不但不能提高硬盘的访问速度,反而会降低整体系统的性能。正确的方法是将一块硬盘分成一个或多个分区,然后将多块不同硬盘的分区组成阵列。另外系统目录如/usr最好不要放在阵列中,因为一旦阵列出现问题系统将无法正常运行。
二:配置RAID 5
1.创建分区
五块SCSI磁盘分别对应/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一块磁盘/dev/sda分两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且将分区类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。
# fdisk /dev/sdb
进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。
2.创建RAID 5
这里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下:
# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
#mdadm --create --verbose /dev/md5 --level=raid5 --raid-devices=3 --chunk=32 /dev/hda3 /dev/hdb3 /dev/hdc3
parity-algorithm left-symmetric
parity-algorithm表示raid5的奇偶效验的运算法则,可用选择有:
left-symmetric left-asymmetric right-symmetric right-asymmetric
最佳性能的是:left-symmetric
命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、 5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB;“/dev/sd[b, c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。
3.查看阵列状态
当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec
unused devices:
当新建或重构完成后,再次查看/proc/mdstat文件:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减1;“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成 [_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于 n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F)。
4.生成配置文件
mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚持把这一步做完。
在mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
以上的这些信息可以通过扫描系统的阵列来获取,命令为:
# mdadm -Ds
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件
# vi /etc/mdadm.conf
5.创建文件系统并挂接(mount)使用
RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:
# mkfs -t ext3 /dev/md0
当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:
# mount /dev/md0 /mnt/raid
为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:
/dev/md0 /mnt/raid ext3 defaults 0 0
故障模拟:上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。
我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。
1.将/dev/sdb1标记为已损坏的设备
# mdadm /dev/md0 -f /dev/sdb1
查看当前阵列状态
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec
unused devices:
因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。经过几分钟后,再次查看当前阵列状态。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。
2.移除损坏的设备
# mdadm /dev/md0 -r /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
损坏的sdb1已经从阵列中移掉。
3.将新设备添加到阵列中
因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1。
# mdadm /dev/md0 -a /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
这时sdb1作为备份设备再次出现在阵列中,常用阵列维护命令:
1).启动阵列
# mdadm -As /dev/md0
该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。
#mdadm -As
该命令指启动mdadm.conf文件中的所有阵列。
#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1
如果没有创建mdadm.conf文件则可以采用上面这种启动方式。
2).停止阵列
# mdadm -S /dev/md0
3).显示指定阵列的详细信息
# mdadm -D /dev/md0
三:几种常用RAID的简介
RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。
磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。
1.RAID 0
特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。
磁盘利用数:n(假设有n个磁盘)。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。
2.RAID 1
特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。
磁盘利用数:n/2。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。
3.RAID 5
特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。
磁盘利用数:n-1。
配置条件:最低三块硬盘,且分区大小尽量相同。
应用领域:适合于事务处理环境,如售票处、销售系统等
在AS4下用mdadm命令创建RAID磁盘阵列
1.创建4个新raid分区,每个为800M,过程如下:
[root@localhost ~]# fdisk /dev/hda
The number of cylinders for this disk is set to 4864.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
Command (m for help): n
First cylinder (4145-4864, default 4145):
Using default value 4145
Last cylinder or +size or +sizeM or +sizeK (4145-4864, default 4864): +800M
Command (m for help): n
First cylinder (4243-4864, default 4243):
Using default value 4243
Last cylinder or +size or +sizeM or +sizeK (4243-4864, default 4864): +800M
Command (m for help): n
First cylinder (4341-4864, default 4341):
Using default value 4341
Last cylinder or +size or +sizeM or +sizeK (4341-4864, default 4864): +800M
Command (m for help): n
First cylinder (4439-4864, default 4439):
Using default value 4439
Last cylinder or +size or +sizeM or +sizeK (4439-4864, default 4864): +800M
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
/dev/hda9 4145 4242 787153+ 83 Linux
/dev/hda10 4243 4340 787153+ 83 Linux
/dev/hda11 4341 4438 787153+ 83 Linux
/dev/hda12 4439 4536 787153+ 83 Linux
Command (m for help): t
Partition number (1-12): 9
Hex code (type L to list codes): l
0 Empty 1c Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid
......
Hex code (type L to list codes): fd
Changed system type of partition 9 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 10
Hex code (type L to list codes): fd
Changed system type of partition 10 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 11
Hex code (type L to list codes): fd
Changed system type of partition 11 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 12
Hex code (type L to list codes): fd
Changed system type of partition 12 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
/dev/hda9 4145 4242 787153+ fd Linux raid autodetect
/dev/hda10 4243 4340 787153+ fd Linux raid autodetect
/dev/hda11 4341 4438 787153+ fd Linux raid autodetect
/dev/hda12 4439 4536 787153+ fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
2.使用mdadm 命令来建立一个 RAID 0 阵列/dev/md0.
[root@localhost ~]# mdadm -C /dev/md0 --level=0 --raid-devices=4 /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
mdadm: /dev/hda9 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda10 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda11 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda12 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? yes
mdadm: array /dev/md0 started.
3.使用mdadm -D命令查看/dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Sat Nov 19 10:01:47 2005
Raid Level : raid0
Array Size : 3148288 (3.00 GiB 3.22 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 19 10:01:47 2005
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 11 2 active sync /dev/hda11
3 3 12 3 active sync /dev/hda12
UUID : da00d68c:ec3e8057:dafaf27a:fb0c2fa3
Events : 0.1
4.(这步可省略,但为了便于以后管理,建议使用)创建mdadm.conf
[root@localhost ~]#echo DEVICE /dev/hd*[0-9] /dev/sd*[0-9] > /etc/mdadm.conf
[root@localhost ~]#mdadm --detail --scan >> /etc/mdadm.conf
5.在新建的raid上创建ext3
[root@localhost ~]# mkfs.ext3 /dev/md0
mke2fs 1.35 (28-Feb-2004)
max_blocks 805961728, rsv_groups = 24596, rsv_gdb = 192
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
393600 inodes, 787072 blocks
39353 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=809500672
25 block groups
32768 blocks per group, 32768 fragments per group
15744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
inode.i_blocks = 9224, i_size = 4243456
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
6.挂载raid阵列
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/md0 /data
[root@localhost ~]# cd /data
[root@localhost data]# ls
lost+found
[root@localhost data]# df -H /data
Filesystem 容量 已用 可用 已用% 挂载点
/dev/md0 3.2G 39M 3.0G 2% /data
[root@localhost data]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 hda12[3] hda11[2] hda10[1] hda9[0]
3148288 blocks 64k chunks
unused devices: <none>
[root@localhost ~]#umount /data
7.装配已经存有的阵列
先停止活动的磁盘阵列:
mdadm -S /dev/md0
再装配到/dev/md1:
[root@localhost data]# mdadm -A /dev/md1 /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
mdadm: /dev/md1 has been started with 4 drives.
[root@localhost data]# mdadm -D /dev/md1
/dev/md1:
Version : 00.90.01
Creation Time : Sat Nov 19 10:01:47 2005
Raid Level : raid0
Array Size : 3148288 (3.00 GiB 3.22 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sat Nov 19 10:01:47 2005
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 11 2 active sync /dev/hda11
3 3 12 3 active sync /dev/hda12
UUID : da00d68c:ec3e8057:dafaf27a:fb0c2fa3
Events : 0.1
怎么样设置热备盘?
mdadm -C /dev/md0 -l5 --raid-devices=3 /dev/sda1 /dev/sda2 /dev/sda3 --spare-device=1 /dev/sda4
/dev/sda4就是 spare devcie
Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 8 1 active sync /dev/sda8
2 8 9 2 active sync /dev/sda9
3 8 10 -1 spare /dev/sda10
怎么样热换磁盘?
mdadm /dev/md0 -f /dev/sdax
set faulty for sdax
mdadm /dev/md0 -r /dev/sdax
hot remove /dev/sdax from /dev/md0
mdadm /dev/md0 -a /dev/sdax
hot add /dev/sdax to /dev/md0
if the array is full ,new added /dev/sdax will be a spare device
it'll be auto added when a device in array is down
怎么样删除已有的software raid?
1.stop /dev/mdX:
mdadm -S /dev/mdX
or
rm /dev/mdX
2.del /etc/mdadm.conf
3.del raid mount in /etc/fstab and autofs
4.del raid part use fdisk or parted
利用Linux创建磁盘阵列
磁盘阵列配置文件为/etc/raidtab
raiddev /dev/md0 //指定磁盘阵列的设备名称
raid-level linear //指定采用的是Linear模式
nr-raid-disks 2 //此阵列由2个硬盘组成
chunk-size 32 //数据写入时,每个写入区块的大小
persistent-superblock 1 //设置是否写入磁盘的superblock
device /dev/hdb1 //按实际情况,指定第1个硬盘分区名称
raid-disk 0 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdc1 //按实际情况,指定第2个硬盘分区名称
raid-disk 1 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
创建好配置文件后,执行以下命令
#mkraid /dev/md0
执行完以个步骤,已经创建好磁盘阵列,然后启动,系统会自动启动此阵列.接下来,就可以如同一般硬盘分区一样,格式化并挂载此阵列.
#mke2fs -j /dev/md0 //格式化此硬盘分区
#mount -t ext3 /dev/md0 /mnt/raid
强行初始化磁盘阵列
#mkraid -really-force /dev/md0
挂载完成后,就可以像平常目录一样,访问这个利用磁盘阵列建设好的目录.当然也可以修改/etc/fstab配置文件,使系统每次启动都自动挂载此磁盘阵列.
除了mke2fs命令以外,相关命令还有raidstop(需先卸载已经挂载的目录)及raidstart.还可以查看/proc/mdstat阵列的状态记录文件.
创建RAID-5磁盘阵列
raiddev /dev/md0 //指定磁盘阵列的设备名称
raid-level 5 //指定采用的是Linear模式
nr-raid-disks 3 //此阵列由2个硬盘组成
nr-spare-disks 1 //此阵列的备用硬盘数目
chunk-size 32 //数据写入时,每个写入区块的大小
persistent-superblock 1 //设置是否写入磁盘的superblock
parity-algorithm left-symmetric //指定哪种算法计算同位校验码
device /dev/hdb1 //按实际情况,指定第1个硬盘分区名称
raid-disk 0 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdc1 //按实际情况,指定第2个硬盘分区名称
raid-disk 1 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdd1
raid-disk 2
device /dev/hda6 //备用硬盘的分区名称
spare-disk 0 //指定备用硬盘是此阵列所使用的第1位备用硬盘(编号从“0”开始)
1、 容错能力测试
关机,将hdc硬盘连线断开,重新启动,这时仍然可以启用RAID-5阵列,且一切正常。查看/proc/mdstat状态记录文件,便可以发现只启用的2个硬盘。如果两个以上硬盘出现故障,可就无法启动阵列了,数据也无法恢复。
2、 支持备用硬盘
修改配置文件,依次执行raidstop及mkraid命令,停止执行中的阵列,并重新初始化阵列。当初始化时,系统会在后台同步所有硬盘的数据,此时不要重新启动。设置好备用硬盘后,如果其中之一的硬盘发生故障,系统就会自动启用备用硬盘,并利用他正常运行的数据,重建此备用硬盘数据,以确保数据安全。
3、 空间利用率分析
此方式会使用一个硬盘的容量来存储同位校验码,因此数据浪费率少于Linear及RAID-0。在不使用备用硬盘的情况下,如果RAID-5阵列是由N台硬盘所组成,且每台硬盘的容量为S,则此阵列的容量为(N-1)xS
4、 读写性能分析
此方式由于读写数据时是将一个文件夹切割成小区块,由于可同步从N-1台硬盘读写数据,因此理想上存取速率可变成N-1倍。但实际上,由于必须耗费系统资源在计算同位校验码上,因此不会达到这么高的传输效率。
实例一
譬如客户拿两个80G的硬盘来做在线盘,分别接在第二个IDE口的主和从接口上,那么我们首先删除两个80G硬盘上的所有分区,然后再使用fdisk 给硬盘创建两个主分区,分别为 /dev/hdc1 和 /dev/hdd1。然后我们使用vi 编辑器,在/etc 目录下创建一个名为 raidtab的配置文件。文件内容如:
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 0
chunk-size 512
device /dev/hdc1
raid-disk 0
device /dev/hdd1
raid-disk 1
中间空格部分不用对齐,可以用tab隔开,也可以用空格隔开。行与行之间一定要用回车换行。编辑好raidtab文件后,只需要运行mkraid 命令,就可以创建阵列了。此时,只需要像格式化普通硬盘分区一样格式化/dev/md0就可以了。
mkfs.ext3 /dev/md0
然后,在fstab里配置好自动挂载点,将/dev/md0 挂载到 /game 挂载点就可以了。
逻辑卷的方法逻辑卷的方法比较复杂,需要进行如下几个步骤创建物理卷——把多个物理卷捆绑成一个卷组——在卷组上创建逻辑卷有几个概念要理解:物理卷:物理卷其实就是磁盘分区,也可以是一整个物理磁盘。物理卷组:多个物理卷组成物理卷组,可以理解为一个逻辑的磁盘。逻辑卷:在物理卷组上建立的逻辑文件卷,可以理解为分区。那么我们还是以刚才的实际例子来讲解:
第一步:创建物理卷pvcreate /dev/hdcpvcreate /dev/hdd这里是把整个物理硬盘创建一个物理卷,如果是要把硬盘上的分区创建物理卷,那么就要使用fdisk工具中的t选项把分区类型标识为8e 类型,也就是linux LVM类型。然后在用pvcreate命令来创建物理卷。要注意的是,如果以前系统没有使用过LVM的话,系统会提示没有lvmtab.conf文件。那么请先运行vgscan命令,来创建这个文件。
第二步:创建物理卷组
vgcreate vm0 /dev/hdc /dev/hdd
这样就创建了一个名字叫vm0的逻辑卷组,相当于创建了一个新的逻辑硬盘。一般而言,卷组创建后就会被自动激活,你也可以使用下面的命令来激活刚才的卷组。
vgchange –a y /dev/vm0
如你以后想要删除卷组,那么你要先关闭vm0的活动状态,使用
vgchange –a n /dev/vm0
如果要删除刚才的卷组,可以使用如下命令:
vgremove /dev/vm0
要想查看物理卷组的信息,可以使用
vgdisplay
该命令可以显示目前系统上所有的物理卷组信息。其中一个很重要的信息就是卷组的大小信息,这个信息将为后一步创建逻辑卷的时候,逻辑卷的大小提供参考。
第三步:在物理卷组上创建逻辑卷
lvcreate –i 2 –I 512 –L 148G –n game /dev/vm0
这样就在物理卷组vm0上创建了一个148G的逻辑卷,名字叫game。你可以理解为在虚拟的硬盘vm0上创建了一个分区叫 game 。其中-i 参数用来指定有多少个物理卷参与条带运算,-I 参数则指定每个条带的大小。其中-L参数用来指定逻辑卷的大小,大小数字要参考前面vgdisplay命令中显示的物理卷组的大小。
这样逻辑卷就创建完毕了,接下来我们就可以当一个普通磁盘一样来使用/dev/vm0/game这个逻辑卷了。
mkfs.ext3 /dev/vm0/game
然后编辑fstab文件就可以了。
实例二
linux下raid5磁盘阵列实施
4块320G硬盘,每个硬盘首先划出10G硬盘,剩下的310G组成raid5,第三(sdc)第四(sdd)硬盘照上面输入。每个硬盘的10G系统盘区(sda1)都要可以启动。这样就达到了硬盘可以任意互换次序而不影响系统运行和raid5的数据的效果。
aptitude install mirrordir mdadm ;安装 mirrordir 和raid管理程序。首先分区,格式化分区,然后用mirrordir工具进行复制,并让每个磁盘可以启动系统。
复制分区表,使用这个命令:
sfdisk -d /dev/sda |sfdisk /dev/sdb;此命令有危险,会把sdb盘的分区表改的跟sda完全相同
sfdisk -d /dev/sda |sfdisk /dev/sdc
sfdisk -d /dev/sda |sfdisk /dev/sdd
格式化备用系统分区
mkfs.ext3 /dev/sdb1
mkfs.ext3 /dev/sdc1
mkfs.ext3 /dev/sdd1
将系统复制到备用分区:
mkdir /1
mkdir /2
mount /dev/sda1 /1 ;(当前的系统根分区)
mount /dev/sdb1 /2 ;(复制到第二个硬盘)
mirrordir /1 /2 ;(这里不要写反了,哈哈)
grub-install --root-directory /2 /dev/sdb ;(让第二个硬盘可以grub启动)
做成脚本如下:
copy2.sh:(复制sda1到sdb1 并让sdb可以独立启动系统)
#!/bin/sh
mount /dev/sda1 /1
mount /dev/sdb1 /2
mirrordir /1 /2
grub-install --root-directory=/2 hd1 ;对sdb安装grub启动程序
unmount /1
unmount /2
----------------------copy2.sh 结束
后面的如法炮制。
建立raid5:
mdadm -a
上面的3个同步命令,
copy2.sh 可以每天执行一次, 让 2号硬盘的系统跟工作用的硬盘一样.
通过上面的实施, 我们得到了3个备份系统, 可以在系统不能启动是,将后面的2,3,4号磁盘换到1号磁盘的位置进行启动。
(1)软阵列的制作
准备工作,需要对待阵列的磁盘进行格式化并分区。比如要对 /dev/hda和/dev/hdb两个ide盘做成阵列 /dev/md0 则先将/dev/hda和/dev/hdb格式化为/dev/hda1、/dev/hdb1 两个大的分区。然后再使用如下指令来构建/dev/md0阵列:
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/hd[ab]1 (*)
其中
--create 表示创建阵列,/dev/md0 是待创建的阵列名
--level=0 表示阵列级别为 raid0
--raid-devices=2 表示此阵列包含的磁盘分区数量为2个, /dev/hd[ab]1表示具体的分区,这里为/dev/hda1和/dev/hdb1
此指令也可简写为
mdadm -C /dev/md0 -l0 -n2 /dev/hd[ab]1
其意义与(*)是一样的
(2)软阵列的启用与停用
用mdadm启用软阵列时需要用到它的配置文件,这个配置文件由创建阵列时运行如下两条指令产生:
echo "DEVICE /dev/hd[ab]1">/etc/md0.conf
mdadm --detail --scan>>/etc/md0.conf
其中 /dev/md0 是上一步创建的阵列设备名,/etc/md0.conf是 /dev/md0的配置文件。第一步创建一个新的阵列后,一定要通过上面的指令运行得到它的配置文件,否则,阵列停用后将无法启用。现在,通过配置文件可以操作阵列了。
停用阵列: mdadm -S /dev/md0
启用阵列: mdadm -A /dev/md0 -c /etc/md0.conf
-c 表示指定配置文件(configure)
(3)阵列的格式化及挂载
在阵列刚刚创建后,最好格式化一下
mkfs.ext3 /dev/md0
同分区的挂载一样,阵列挂载用mount来完成
mkdir -p /dir
mount /dev/md0 /dir
根据以上的步骤,还可以做出更多的阵列,前提是分区要分好。比如: mdadm -c /dev/md1 -l0 -n2 /dev/hd[ab]2 创建了 /dev/md1阵列,它占用了/dev/hda2 /dev/hdb2两个分区。
实例三
debian下应用raid5提高数据安全性
现在160G硬盘性价比比较高,4个西部数据160G盘,用软件raid5,组成480G的一个卷,因为是raid5,支持一个硬盘损坏,每个盘拿出10G做系统,用raid1,然后剩下的作raid5,对于读操作来说,raid1速度的提升跟raid0一样,因为可以从多个盘片分别读取。软件raid支持同一组硬盘的不同分区组建不同的raid格式。
raid5原理很简单,就是多一个盘用来做奇偶校验,这些盘是同等的互为校验,就是raid5,如果有一个专门的校验盘,就是raid4, 因为冗余了一个盘,所以就允许一个盘损坏。如果冗余2个盘,就是raid6,允许2个盘同时损坏。由于算法只是奇偶校验就够了,所以计算量很小,并不像大家想像的那样占用大量cpu处理。
debian下安装步骤:
首先,内核中要支持raid5,执行modconf 添加raid5和raid1支持。
安装mdadm软件包:apt-get install mdadm
分区:
建立md0卷.暂时空缺的硬盘用"missing"代替"/dev/hdex".raid5允许一个分区用missing代替,以后可以用mdadm -manage /dev/md0 --add /dev/hdxx来填加这个missing的分区。
#mdadm -C /dev/md0 --level 5 --raid-devices 4 /dev/hdb8 /dev/hdd8 /dev/hde8 /dev/hdg8
mdadm: array /dev/md0 started.
配置/etc/mdadm/mdadm.conf
先手动列出组建raid的分区:
echo DEVICE /dev/hd*6 /dev/hd*8 >/etc/mdadm/mdadm.conf
然后自动测试raid设置并记录到/dev/mdadm/mdadm.conf:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
格式化为reiserfs分区
# mkfs.reiserfs /dev/md0
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
Guessing about desired format.. Kernel 2.6.11-amd64 is running.
Format 3.6 with standard journal
Count of blocks on the device: 108998928
Number of blocks consumed by mkreiserfs formatting process: 11538
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 85176854-9911-4154-9580-536b5b0f3281
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/md0'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok挂到/mnt
mount /dev/md0 /mnt将home目录同步过来
mirrordir /home /mnt修改/de/fstab 让md0做home
到现在就完成了raid5的部署。查看/proc/mdstat文件,可以了解现在组建raid5的进度:
files:/etc# cat /proc/mdstat
Personalities : [raid1] [raid5]
md0 : active raid5 hdg8[4] hde8[2] hdd8[1] hdb8[0]
435995712 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
[==============>......] recovery = 73.6% (106991744/145331904) finish=19.1min speed=33334K/sec
unused devices: <none>
从raid中取下一个分区:
files:/# mdadm --manage /dev/md1 -r /dev/hdg6
将一个分区加入到raid:
files:/# mdadm --manage /dev/md1 -a /dev/hdg6
查看修复进度:
files:/# cat /proc/mdstat
Personalities : [raid1] [raid5]
md0 : active raid5 hdb8[0] hdg8[3] hde8[2] hdd8[1]
435995712 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
md1 : active raid1 hdg6[4] hdb6[0] hde6[2] hdd6[1]
9767424 blocks [4/3] [UUU_]
[========>............] recovery = 42.0% (4107584/9767424) finish=3.7min speed=24917K/sec
unused devices: <none>
mdadm --manage /dev/md0 --remove #取消一个raid
mdadm --manage /dev/md0 -f /dev/hdc8 #把hdc8标识为失效
故障恢复步骤:
1.关机,取出坏盘
2.装上新盘,开机
3.先umount损坏分区所使用的分区 umount /dev/md0 有时需要停掉一些服务才可以卸载分区,用lsof看哪些程序占用md0的文件。
4.mdadm /dev/md0 -f /dev/hdc8 -r /dev/坏盘hdc8
5. 给新盘分区 和其它的盘完全一样 sfdisk -d /dev/hda |sfdisk /dev/hdc
6.mdadm --manage /dev/md0 --add /dev/hdc8
7.mdadm -R /dev/md0
8.mount /dev/md0 根据/etc/fstab来挂载分区.
9.系统会自动同步,用watch cat /proc/mdstat 查看 100%的时候就ok了 840G的阵列需要5小时才可以完成,在重建的同时,阵列已经可以投入使用了。如果阵列配置文件丢失,造成阵列解散,只要分区数据没有破坏,就可以用mdadm -create进行重建,而不丢失数据。
1.mdadm -create /dev/md0 --level=5 --raid-devices=4 /dev/hda8 /dev/hdb8 /dev/hdc8 /dev/hdd8 ;跟新建raid命令一样,只是系统会提示,磁盘原来是raid中的一个,输入y继续。
2.mount /dev/md0 /mnt ;ls /mnt 数据应该都回来了。
3.重新建立/etc/mdadm/mdadm.conf ,方法跟前面建立raid5时一样。
下面是一个操作实例(红色为键入的命令):
#mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/hda11 /dev/hdc6 /dev/hdd6
mdadm: /dev/hda11 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
mdadm: /dev/hdc6 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
mdadm: /dev/hdd6 appears to be part of a raid array:
level=5 devices=3 ctime=Thu Jul 20 19:13:28 2006
Continue creating array? y
mdadm: array /dev/md1 started.
# mount /dev/md1 /home1
# df -h /home1Filesystem 容量 已用 可用 已用% 挂载点
/dev/md1 56G 17G 40G 30% /home1
# ls /home1
192.168.10.80 192.168.2.2 192.168.8.1 192.168.9.1
# cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda10[0] hdd7[3] hdc7[2] hdb1[1]
234444288 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
md1 : active raid5 hdd6[3] hdc6[1] hda11[0]
58412032 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 1.0% (295540/29206016) finish=30.9min speed=15554K/sec
unused devices: <none>
实例四
Linux下如何用mdadm实现软件RAID
一:简要介绍
数据在现今企业中占有重要的地位,数据存储的安全性有而是人们使用计算机要注意的重要问题之一。通常情况下人们在服务器端采用各种冗余磁盘阵列RAID技术来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器,但是很多中小企业没有足够的经费承受这笔开销。我们有没有方法可以通过软件来实现 RAID呢?
由于本文中会使用mdadm软件,而该软件一般情况下都会集成在Redhat linux中,所以可以直接使用。
作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID 的支持,这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本。下面就让我们看一个 Redhat Linux AS 4下的软件RAID配置实例吧。
● 操作系统为RedHat Linux AS 4;
● 内核版本为2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。
在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期 Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。
实现过程
-:配置RAID1
第一步:以root用户登录系统,对磁盘进行分区。
#fdisk /dev/sdb
将设备/dev/sdb上的全部磁盘空间划分给一个主分区,建立/dev/sdb1分区,并修改分区的类型标识为fd(linux raid auto),然后对剩余的磁盘做同样的操作。创/dev/sdb1,/dev/sdc1,/dev/sdd1三个分区。
第二步:创建RAID阵列
#mdadm -Cv /dev/md0 -l1 -n2 -x1 /dev/sd{b,c,d}1
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 \
/dev/hda1 /dev/hdc1
小提示:-C参数为创建阵列模式。/dev/md0为阵列的设备名称。-l1为阵列模式,可以选择0,1,4,5等多种不同的阵列模式,分别对应 RAID0,RAID1,RAID4,RAID5。-n2为阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目。-x1为阵列中备用磁盘的数目,因为我们是RAID1所以设置当前阵列中含有一块备用磁盘。/dev/sd{b,c,d}1为参与创建阵列的磁盘名称,阵列由三块磁盘组成,其中两块为镜象的活动磁盘,一块备用磁盘提供故障后的替换。
第三步:查看RAID阵列情况
创建RAID过程需要很长时间,因为磁盘要进行同步化操作,查看/proc/mdstat文件,该文件显示RAID的当前状态和同步完成所需要的时间。
#cat /proc/mdstat
系统会显示——
personalities:[raid1]
read_ahead 1024 sectors
event:1
md0:active raid1 sdb1[0] sdc1[1] sdd1[2]
18432000 blocks [2/2] [UU]
unused devices:<none>
出现上面的提示后就表示创建的RAID1已经可以使用了。
第四步:编辑阵列的配置文件
mdadm的配置文件主要提供人们日常管理,编辑这个文件可以让RAID更好的为我们工作,当然这个步骤不是必须的。不经过编辑配置文件也可以让RAID工作。首先扫描系统中的全部阵列:
#mdadm --detail -scan
扫描结果将显示阵列的名称,模式和磁盘名称,并且列出阵列的UUID号,UUID也同时存在于阵列的每个磁盘中,缺少该号码的磁盘是不能够参与阵列的组成的。接下来编辑阵列的配置文件/etc/mdadm.conf文件,将扫描的显示结果按照文件规定的格式修改后添加到文件的末尾。
#vi /etc/mdadm.conf
添加以下内容到mdadm.conf文件中
device /dev/sdb1 /dev/sdc1 /dev/sdd1
array /dev/md0 level=raid1 num-devices=2 uuid=2ed2ba37:d952280c:a5a9c282:a51b48da spare-group=group1
在配置文件中定义了阵列的名称和模式,还有阵列中活动磁盘的数目与名称,另外也定义了一个备用的磁盘组group1。
第五步:启动停止RAID1阵列
启动和停止RAID1阵列的命令非常简单。启动直接执行“mdadm -as /dev/md0”即可。执行mdadm -s /dev/md0将停止RAID1阵列。另外在rc.sysinit启动脚本文件中加入命令mdadm -as /dev/md0后将设置为阵列随系统启动而启动。
总结:配置RAID1的步骤相对RAID5来说不是很烦琐,不过在使用mdadm时应该注意就是不要在一块硬盘上划分多个分区,再将多个分区组成阵列,这种方式不但不能提高硬盘的访问速度,反而会降低整体系统的性能。正确的方法是将一块硬盘分成一个或多个分区,然后将多块不同硬盘的分区组成阵列。另外系统目录如/usr最好不要放在阵列中,因为一旦阵列出现问题系统将无法正常运行。
二:配置RAID 5
1.创建分区
五块SCSI磁盘分别对应/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一块磁盘/dev/sda分两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且将分区类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。
# fdisk /dev/sdb
进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。
2.创建RAID 5
这里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下:
# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
#mdadm --create --verbose /dev/md5 --level=raid5 --raid-devices=3 --chunk=32 /dev/hda3 /dev/hdb3 /dev/hdc3
parity-algorithm left-symmetric
parity-algorithm表示raid5的奇偶效验的运算法则,可用选择有:
left-symmetric left-asymmetric right-symmetric right-asymmetric
最佳性能的是:left-symmetric
命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、 5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB;“/dev/sd[b, c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。
3.查看阵列状态
当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec
unused devices:
当新建或重构完成后,再次查看/proc/mdstat文件:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减1;“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成 [_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于 n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F)。
4.生成配置文件
mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚持把这一步做完。
在mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
以上的这些信息可以通过扫描系统的阵列来获取,命令为:
# mdadm -Ds
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件
# vi /etc/mdadm.conf
5.创建文件系统并挂接(mount)使用
RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:
# mkfs -t ext3 /dev/md0
当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:
# mount /dev/md0 /mnt/raid
为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:
/dev/md0 /mnt/raid ext3 defaults 0 0
故障模拟:上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。
我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。
1.将/dev/sdb1标记为已损坏的设备
# mdadm /dev/md0 -f /dev/sdb1
查看当前阵列状态
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec
unused devices:
因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。经过几分钟后,再次查看当前阵列状态。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。
2.移除损坏的设备
# mdadm /dev/md0 -r /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
损坏的sdb1已经从阵列中移掉。
3.将新设备添加到阵列中
因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1。
# mdadm /dev/md0 -a /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
这时sdb1作为备份设备再次出现在阵列中,常用阵列维护命令:
1).启动阵列
# mdadm -As /dev/md0
该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。
#mdadm -As
该命令指启动mdadm.conf文件中的所有阵列。
#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1
如果没有创建mdadm.conf文件则可以采用上面这种启动方式。
2).停止阵列
# mdadm -S /dev/md0
3).显示指定阵列的详细信息
# mdadm -D /dev/md0
三:几种常用RAID的简介
RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。
磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。
1.RAID 0
特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。
磁盘利用数:n(假设有n个磁盘)。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。
2.RAID 1
特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。
磁盘利用数:n/2。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。
3.RAID 5
特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。
磁盘利用数:n-1。
配置条件:最低三块硬盘,且分区大小尽量相同。
应用领域:适合于事务处理环境,如售票处、销售系统等
在AS4下用mdadm命令创建RAID磁盘阵列
1.创建4个新raid分区,每个为800M,过程如下:
[root@localhost ~]# fdisk /dev/hda
The number of cylinders for this disk is set to 4864.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
Command (m for help): n
First cylinder (4145-4864, default 4145):
Using default value 4145
Last cylinder or +size or +sizeM or +sizeK (4145-4864, default 4864): +800M
Command (m for help): n
First cylinder (4243-4864, default 4243):
Using default value 4243
Last cylinder or +size or +sizeM or +sizeK (4243-4864, default 4864): +800M
Command (m for help): n
First cylinder (4341-4864, default 4341):
Using default value 4341
Last cylinder or +size or +sizeM or +sizeK (4341-4864, default 4864): +800M
Command (m for help): n
First cylinder (4439-4864, default 4439):
Using default value 4439
Last cylinder or +size or +sizeM or +sizeK (4439-4864, default 4864): +800M
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
/dev/hda9 4145 4242 787153+ 83 Linux
/dev/hda10 4243 4340 787153+ 83 Linux
/dev/hda11 4341 4438 787153+ 83 Linux
/dev/hda12 4439 4536 787153+ 83 Linux
Command (m for help): t
Partition number (1-12): 9
Hex code (type L to list codes): l
0 Empty 1c Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid
......
Hex code (type L to list codes): fd
Changed system type of partition 9 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 10
Hex code (type L to list codes): fd
Changed system type of partition 10 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 11
Hex code (type L to list codes): fd
Changed system type of partition 11 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-12): 12
Hex code (type L to list codes): fd
Changed system type of partition 12 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 1937 200812+ 83 Linux
/dev/hda3 1938 3212 10241437+ 83 Linux
/dev/hda4 3213 4864 13269690 5 Extended
/dev/hda5 3213 3722 4096543+ 83 Linux
/dev/hda6 3723 3977 2048256 83 Linux
/dev/hda7 3978 4079 819283+ 83 Linux
/dev/hda8 4080 4144 522081 82 Linux swap
/dev/hda9 4145 4242 787153+ fd Linux raid autodetect
/dev/hda10 4243 4340 787153+ fd Linux raid autodetect
/dev/hda11 4341 4438 787153+ fd Linux raid autodetect
/dev/hda12 4439 4536 787153+ fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
2.使用mdadm 命令来建立一个 RAID 0 阵列/dev/md0.
[root@localhost ~]# mdadm -C /dev/md0 --level=0 --raid-devices=4 /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
mdadm: /dev/hda9 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda10 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda11 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda12 appears to contain an ext2fs file system
size=786432K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? yes
mdadm: array /dev/md0 started.
3.使用mdadm -D命令查看/dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Sat Nov 19 10:01:47 2005
Raid Level : raid0
Array Size : 3148288 (3.00 GiB 3.22 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Nov 19 10:01:47 2005
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 11 2 active sync /dev/hda11
3 3 12 3 active sync /dev/hda12
UUID : da00d68c:ec3e8057:dafaf27a:fb0c2fa3
Events : 0.1
4.(这步可省略,但为了便于以后管理,建议使用)创建mdadm.conf
[root@localhost ~]#echo DEVICE /dev/hd*[0-9] /dev/sd*[0-9] > /etc/mdadm.conf
[root@localhost ~]#mdadm --detail --scan >> /etc/mdadm.conf
5.在新建的raid上创建ext3
[root@localhost ~]# mkfs.ext3 /dev/md0
mke2fs 1.35 (28-Feb-2004)
max_blocks 805961728, rsv_groups = 24596, rsv_gdb = 192
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
393600 inodes, 787072 blocks
39353 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=809500672
25 block groups
32768 blocks per group, 32768 fragments per group
15744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
inode.i_blocks = 9224, i_size = 4243456
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
6.挂载raid阵列
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/md0 /data
[root@localhost ~]# cd /data
[root@localhost data]# ls
lost+found
[root@localhost data]# df -H /data
Filesystem 容量 已用 可用 已用% 挂载点
/dev/md0 3.2G 39M 3.0G 2% /data
[root@localhost data]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 hda12[3] hda11[2] hda10[1] hda9[0]
3148288 blocks 64k chunks
unused devices: <none>
[root@localhost ~]#umount /data
7.装配已经存有的阵列
先停止活动的磁盘阵列:
mdadm -S /dev/md0
再装配到/dev/md1:
[root@localhost data]# mdadm -A /dev/md1 /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
mdadm: /dev/md1 has been started with 4 drives.
[root@localhost data]# mdadm -D /dev/md1
/dev/md1:
Version : 00.90.01
Creation Time : Sat Nov 19 10:01:47 2005
Raid Level : raid0
Array Size : 3148288 (3.00 GiB 3.22 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sat Nov 19 10:01:47 2005
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 11 2 active sync /dev/hda11
3 3 12 3 active sync /dev/hda12
UUID : da00d68c:ec3e8057:dafaf27a:fb0c2fa3
Events : 0.1
怎么样设置热备盘?
mdadm -C /dev/md0 -l5 --raid-devices=3 /dev/sda1 /dev/sda2 /dev/sda3 --spare-device=1 /dev/sda4
/dev/sda4就是 spare devcie
Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 8 1 active sync /dev/sda8
2 8 9 2 active sync /dev/sda9
3 8 10 -1 spare /dev/sda10
怎么样热换磁盘?
mdadm /dev/md0 -f /dev/sdax
set faulty for sdax
mdadm /dev/md0 -r /dev/sdax
hot remove /dev/sdax from /dev/md0
mdadm /dev/md0 -a /dev/sdax
hot add /dev/sdax to /dev/md0
if the array is full ,new added /dev/sdax will be a spare device
it'll be auto added when a device in array is down
怎么样删除已有的software raid?
1.stop /dev/mdX:
mdadm -S /dev/mdX
or
rm /dev/mdX
2.del /etc/mdadm.conf
3.del raid mount in /etc/fstab and autofs
4.del raid part use fdisk or parted
利用Linux创建磁盘阵列
磁盘阵列配置文件为/etc/raidtab
raiddev /dev/md0 //指定磁盘阵列的设备名称
raid-level linear //指定采用的是Linear模式
nr-raid-disks 2 //此阵列由2个硬盘组成
chunk-size 32 //数据写入时,每个写入区块的大小
persistent-superblock 1 //设置是否写入磁盘的superblock
device /dev/hdb1 //按实际情况,指定第1个硬盘分区名称
raid-disk 0 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdc1 //按实际情况,指定第2个硬盘分区名称
raid-disk 1 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
创建好配置文件后,执行以下命令
#mkraid /dev/md0
执行完以个步骤,已经创建好磁盘阵列,然后启动,系统会自动启动此阵列.接下来,就可以如同一般硬盘分区一样,格式化并挂载此阵列.
#mke2fs -j /dev/md0 //格式化此硬盘分区
#mount -t ext3 /dev/md0 /mnt/raid
强行初始化磁盘阵列
#mkraid -really-force /dev/md0
挂载完成后,就可以像平常目录一样,访问这个利用磁盘阵列建设好的目录.当然也可以修改/etc/fstab配置文件,使系统每次启动都自动挂载此磁盘阵列.
除了mke2fs命令以外,相关命令还有raidstop(需先卸载已经挂载的目录)及raidstart.还可以查看/proc/mdstat阵列的状态记录文件.
创建RAID-5磁盘阵列
raiddev /dev/md0 //指定磁盘阵列的设备名称
raid-level 5 //指定采用的是Linear模式
nr-raid-disks 3 //此阵列由2个硬盘组成
nr-spare-disks 1 //此阵列的备用硬盘数目
chunk-size 32 //数据写入时,每个写入区块的大小
persistent-superblock 1 //设置是否写入磁盘的superblock
parity-algorithm left-symmetric //指定哪种算法计算同位校验码
device /dev/hdb1 //按实际情况,指定第1个硬盘分区名称
raid-disk 0 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdc1 //按实际情况,指定第2个硬盘分区名称
raid-disk 1 //设置上述分区是此阵列所使用的第1 //个硬盘(编号由"0"开始)
device /dev/hdd1
raid-disk 2
device /dev/hda6 //备用硬盘的分区名称
spare-disk 0 //指定备用硬盘是此阵列所使用的第1位备用硬盘(编号从“0”开始)
1、 容错能力测试
关机,将hdc硬盘连线断开,重新启动,这时仍然可以启用RAID-5阵列,且一切正常。查看/proc/mdstat状态记录文件,便可以发现只启用的2个硬盘。如果两个以上硬盘出现故障,可就无法启动阵列了,数据也无法恢复。
2、 支持备用硬盘
修改配置文件,依次执行raidstop及mkraid命令,停止执行中的阵列,并重新初始化阵列。当初始化时,系统会在后台同步所有硬盘的数据,此时不要重新启动。设置好备用硬盘后,如果其中之一的硬盘发生故障,系统就会自动启用备用硬盘,并利用他正常运行的数据,重建此备用硬盘数据,以确保数据安全。
3、 空间利用率分析
此方式会使用一个硬盘的容量来存储同位校验码,因此数据浪费率少于Linear及RAID-0。在不使用备用硬盘的情况下,如果RAID-5阵列是由N台硬盘所组成,且每台硬盘的容量为S,则此阵列的容量为(N-1)xS
4、 读写性能分析
此方式由于读写数据时是将一个文件夹切割成小区块,由于可同步从N-1台硬盘读写数据,因此理想上存取速率可变成N-1倍。但实际上,由于必须耗费系统资源在计算同位校验码上,因此不会达到这么高的传输效率。