Soft RAID
时间:2006-05-28 来源:rickyweiwei
RAID简介
磁盘阵列根据其使用的技术不同而划分了等级,称为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。
配置条件:最低三块硬盘,且分区大小尽量相同。
应用领域:适合于事务处理环境,例如民航售票处、销售系统等。
实现过程
1、创建分区-------》fdisk---{n---size---t---fd}---p---w
2、格式化 -------》mkfs.type /dev/hdxy
3、创建RAID------》mdadm
4、查看RAID------》
more /proc/mdstat
mdadm -D /dev/mdx
5、生成配置文件
#mdadm -Ds > /etc/mdadm.conf
#vi /etc/mdadm.conf
DEVICE /dev/hdxy /dev/hdwq /dev/hd..
ARRAY /dev/mdx level=raidx num-devices=y UUID:*:*:*
6、格式化RAID
#mkfs.type /dev/mdx
7、挂载到相应工作目录 OR 修为/etc/fstab相应内容
#mount /dev/mdx /data
8、维护RAID
A. 启动RAID #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文件则可以采用上面这种启动方式。
B.停止阵列
# mdadm -S /dev/md0
C.显示指定阵列的详细信息
# mdadm -D /dev/md0
9、磁盘故障恢复
查看RAID现状:
# 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个。
经过几分钟后,再次查看当前阵列状态。
9.1 将/dev/sdb1标记为已损坏的设备
# mdadm /dev/md0 -f /dev/sdb1
9.2 # more /proc/mdstat
9.3 移除损坏的设备 # mdadm /dev/md0 -r /dev/sdb1
9.4 # 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已经从阵列中移掉。
9.6将新设备添加到阵列中
下面的命令再次将/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作为备份设备再次出现在阵列中
10、实例:
/dev/hda6 1666 1690 200781 fd Linux raid autodetect
/dev/hda7 1691 1715 200781 fd Linux raid autodetect
/dev/hda8 1716 1740 200781 fd Linux raid autodetect
/dev/hda9 1741 1765 200781 fd Linux raid autodetect
# mdadm -Cv /dev/md0 -l5 -n3 -x1 /dev/hda[6-9]
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/hda6 appears to contain an ext2fs file system
size=200780K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda7 appears to contain an ext2fs file system
size=200780K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda8 appears to contain an ext2fs file system
size=200780K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/hda9 appears to contain an ext2fs file system
size=200780K mtime=Thu Jan 1 08:00:00 1970
mdadm: size set to 200704K
Continue creating array? y
mdadm: array /dev/md0 started.
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[3] hda9[4] hda7[1] hda6[0]
401408 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[=======>.............] recovery = 37.0% (74752/200704) finish=0.7min spe
ed=2875K/sec
unused devices: <none>
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[2] hda9[3] hda7[1] hda6[0]
401408 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Sun May 28 22:34:38 2006
Raid Level : raid5
Array Size : 401408 (392.00 MiB 411.04 MB)
Device Size : 200704 (196.00 MiB 205.52 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sun May 28 22:35:47 2006
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
0 3 6 0 active sync /dev/hda6
1 3 7 1 active sync /dev/hda7
2 3 8 2 active sync /dev/hda8
3 3 9 -1 spare /dev/hda9
UUID : a1d02f29:69e997bf:63ad3900:052261bc
# mkfs.ext3 /dev/md0
mke2fs 1.35 (28-Feb-2004)
max_blocks 411041792, rsv_groups = 50176, rsv_gdb = 256
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
100352 inodes, 401408 blocks
20070 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
49 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185
Writing inode tables: done
inode.i_blocks = 4098, i_size = 67383296
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information:
done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md0 /data
# cp /sbin/* /data
# mdadm /dev/md0 -f /dev/hda6
mdadm: set /dev/hda6 faulty in /dev/md0
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 hda8[2] hda9[3] hda7[1] hda6[4](F)
401408 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
[=====>...............] recovery = 28.4% (58112/200704) finish=0.8min spe
ed=2905K/sec
unused devices: <none>
# mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 7 1 active sync /dev/hda7
2 3 8 2 active sync /dev/hda8
3 3 6 -1 faulty /dev/hda6
UUID : a1d02f29:69e997bf:63ad3900:052261bc
Events : 0.18
# mdadm /dev/md0 -r /dev/hda6
mdadm: hot removed /dev/hda6
# mdadm -D /dev/md0
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 7 1 active sync /dev/hda7
2 3 8 2 active sync /dev/hda8
UUID : a1d02f29:69e997bf:63ad3900:052261bc
# mdadm /dev/md0 -a /dev/hda6
mdadm: hot added /dev/hda6
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 7 1 active sync /dev/hda7
2 3 8 2 active sync /dev/hda8
3 3 6 -1 spare /dev/hda6
即:
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
另生成CONF:
# mdadm -Ds > /etc/mdadm.conf
# vi /etc/mdadm.conf
DEVICE /dev/hda9 /dev/hda7 /dev/hda8 /dev/hda6
ARRAY /dev/md0 level=raid5 num-devices=3 UID=a1d02f29:69e997bf:63ad3900:052261bc
附:以下内容来自 manpage 页:
基本语法 : mdadm [mode] [options]
[mode] 有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes. 缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用 device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device 创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}: