免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1256 | 回复: 0
打印 上一主题 下一主题

RHEL5.4下创建RAID [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-20 13:54 |只看该作者 |倒序浏览

E-mail: rhroot1112@163.com                               2010-2-5
                      RHCE学习笔记

关于linux下面软件RAID的创建

RAID介绍,
RAID就是廉价冗余磁盘阵列
常用的级别是RAID0   RAID1   RAID5
RAID分为软RAID和硬件RAID
软件RAID是基于系统的软件工作
优点:廉价
缺点:不稳定,如果系统坏了,RAID整列也就损坏,容易造成数据丢失
硬件RAID,这就是各大厂商提供的,存储解决方案。有专门的设备负责处理磁盘间的数据流。相对于软件RAID
优点:可靠性高,易管理。稳定
缺点:成本过高
RAID0: 最少由两块硬盘组成,优点是大大的提高了硬盘的读写性能,缺点是没有冗余机制,一旦一块硬盘坏了,将无法恢复。
可用空间   n
RAID1: 必须是2的倍数组成,优点是可以完全的备份数据,有冗余机制,缺点是降低了写入的性能,而且成本最高。
可用空间   n/2
RAID5:  最少由三块硬盘组成,raid5整合了raid1和raid0的优点,既有冗余机制,而且提升了读写的性能,一旦一块硬盘坏了,可以恢复数据。
可用空间   n-1
(ps:  n为硬盘总大小)
热备盘
热备盘只在有冗余机制的raid的里面,当raid里面的成员down掉了,热备盘会立即的提升成raid成员,保证raid正常工作。

现在开始实战
题目:建立一个RAID5 级别的分区使用一个分区给这个RAID做热备份,并挂在到本地的/mnt/raid 目录。
1.    创建物理分区
首先创建四个分区,三块做raid5,一块做热备盘。
[root@localhost ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 1958.
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): n
First cylinder (1316-1958, default 1316):
Using default value 1316
Last cylinder or +size or +sizeM or +sizeK (1316-1958, default 1958): +100M

Command (m for help): n
First cylinder (1329-1958, default 1329):
Using default value 1329
Last cylinder or +size or +sizeM or +sizeK (1329-1958, default 1958): +100M

Command (m for help): n
First cylinder (1342-1958, default 1342):
Using default value 1342
Last cylinder or +size or +sizeM or +sizeK (1342-1958, default 1958): +100M

Command (m for help): n
First cylinder (1355-1958, default 1355):
Using default value 1355
Last cylinder or +size or +sizeM or +sizeK (1355-1958, default 1958): +100M

然后在分区主界面按“t”来转换分区类型,raid的id为fd
Command (m for help): t
Partition number (1-11): 8
Hex code (type L to list codes): fd
Changed system type of partition 8 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-11): 9
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-11): 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-11): 11
Hex code (type L to list codes): fd
Changed system type of partition 11 to fd (Linux raid autodetect)

Command (m for help):

完成分区后,按“p”来查看我们做的操作是否正确。
Command (m for help): p

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks      Id     System
/dev/sda1   *           1          13         104391     83     Linux
/dev/sda2              14         535        4192965   83     Linux
/dev/sda3             536        1057      4192965   83     Linux
/dev/sda4            1058        1958     7237282+   5     Extended
/dev/sda5            1058        1188     1052226   82     Linux swap / Solaris
/dev/sda6            1189        1253     522081     83     Linux
/dev/sda7            1254        1315     497983+   83     Linux
/dev/sda8            1316        1328     104391     fd      Linux raid autodetect
/dev/sda9            1329        1341     104391     fd      Linux raid autodetect
/dev/sda10           1342        1354    104391     fd      Linux raid autodetect
/dev/sda11           1355        1367    104391     fd      Linux raid autodetect

Command (m for help):

确定没有问题后,按“wq”保存并退出。
Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@localhost ~]#

退出后一定要用partprobe工具来让刚才的操作立即生效。
[root@localhost ~]# partprobe /dev/sda
[root@localhost ~]#
创建分区到这里就结束了,
下面开始创建设备文件。

2.    创建阵列设备
系统默认有个md0可以给我使用,如果要多个raid的话,就需要自己去创建。
创建md1这个设备文件
创建设备文件用mknod命令
#mknod /dev/md1 b 9 1
Mknod 是命令   /dev/md1是设备名称  
后面得b代表是创建的是个设备
9 是主设备号    1代表从设备号
主设备号不能改,从设备号是系统中唯一的。
创建好了之后,可以使用ls  /dev/md1来查看
[root@localhost ~]# mknod /dev/md1 b 9 1
[root@localhost ~]#
[root@localhost ~]# ls /dev/md0
/dev/md0
[root@localhost ~]# ls /dev/md1
/dev/md1
[root@localhost ~]#
当然也可以不需要去创建这个阵列设备,可以在创建raid的时候加上-a  yes ,系统自动的创建设备文件,可以看到,md0这个设备文件,我们没有去创建,这个系统默认就有的。
创建设备文件到这里就结束了,
下面开始创建raid设备。

3.      创建raid设备
使用mdadm工具来创建raid5
#mdadm –C  /dev/md1  -a  yes  -l  5  -n  3  -x  1  /dev/sda8 /dev/sda9 /dev/sda10 /dev/sda11
[root@localhost ~]#
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 5 -n3 -x 1 /dev/sda8 /dev/sda9 /dev/sda10 /dev/sda11
mdadm: array /dev/md1 started.
[root@localhost ~]#
raid5就已经创建成功了,就是/dev/md1
关于创建raid里面的参数意义
/dev/md1                  raid设备的名字
-a yes                       创建raid的时候同时创建raid的设备文件
-l  5                          raid设备的级别
-n  3                         raid设备的磁盘的数量
-x  1                         热备盘数量
/dev/sda8,9,10,11    raid是由哪些盘组成的
Raid的设备就创建成功了,下面来查看下刚才创建的raid5


可以使用#mdadm –D  /dev/md0来查询raid的信息
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
   Version : 0.90
   Creation Time : Sat Feb 20 12:24:09 2010
   Raid Level : raid5
   Array Size : 208640 (203.78 MiB 213.65 MB)
   Used Dev Size : 104320 (101.89 MiB 106.82 MB)
   Raid Devices : 3
   Total Devices : 4
Preferred Minor : 1
   Persistence : Superblock is persistent

   Update Time : Sat Feb 20 12:24:10 2010
   State : clean
   Active Devices : 3
Working Devices : 4
Failed Devices : 0
   Spare Devices : 1

   Layout : left-symmetric
   Chunk Size : 64K

   UUID : ea1f12df:849bd58d:5c766fdc:5dccd818
   Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        8        0      active sync   /dev/sda8
       1       8        9        1      active sync   /dev/sda9
       2       8       10        2      active sync   /dev/sda10

       3       8       11        -      spare   /dev/sda11
[root@localhost ~]#
通过mdadm –D /dev/md1命令,可以看到关于raid的很多信息
可以看到mdadm的版本,什么时候创建的,raid的级别,raid的大小,每个设备的大小,raid的组成成员,总共有几个设备,raid的状态,等等很多信息。
还可以看到刚才创建raid5的可用空间是200MB
创建raid设备就到这里了,
下面开始格式化raid设备

4. 要想去使用raid,还是先得格式化
#mkfs.ext3 /dev/md1
[root@localhost ~]# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
52208 inodes, 208640 blocks
10432 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
26 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801

Writing inode tables: done                           
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]#
格式化成功,接下来就是要挂载了。

5.      挂载raid设备
挂载raid的命令是
#mount  /dev/md1 /mnt/raid5
[root@localhost ~]#
[root@localhost ~]# mount /dev/md1 /mnt/raid5/
[root@localhost ~]# df
Filesystem           1K-blocks      Used         Available         Use%      Mounted on
/dev/sda3               4061572     2311856     1540068         61%         /
/dev/sda6               505604      10565          468935           3%          /home
/dev/sda2               4061572    1856572      1995352         49%        /var
/dev/sda1               101086      13588          82279             15%        /boot
tmpfs                     192132       0                 192132           0%          /dev/shm
/dev/hdc                2935370    2935370      0                    100%       /media/RHEL_5.4 i386 DVD
/dev/md1               202047      5920        185695               4%          /mnt/raid5
[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# ls
lost+found
[root@localhost raid5]#
挂载成功
整个raid的创建和使用就是这么多了。
复制一些数据到/mnt/raid5里面去,方便等下做实验。
[root@localhost ~]# cp /boot/* /mnt/raid5/
cp: omitting directory `/boot/grub'
cp: omitting directory `/boot/lost+found'
[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# ls
config-2.6.18-164.el5           symvers-2.6.18-164.el5.gz
initrd-2.6.18-164.el5.img       System.map-2.6.18-164.el5
initrd-2.6.18-164.el5kdump.img  vmlinuz-2.6.18-164.el5
lost+found
[root@localhost raid5]#

下面是关于软件raid的测试和修复
首先模拟磁盘故障
将raid5中的一个成员给down掉,试试热备盘能不能主动的成为热raid中的成员。
模拟磁盘故障的命令
#mdadm  /dev/md1 –f /dev/sda10
[root@localhost ~]#
[root@localhost ~]# mdadm /dev/md1 -f /dev/sda10
mdadm: set /dev/sda10 faulty in /dev/md1
[root@localhost ~]#
已经模拟一块磁盘故障了
在使用mdadm –D /dev/md1来查询raid的状态
#mdadm –D /dev/md1
[root@localhost ~]#
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sat Feb 20 12:24:09 2010
Raid Level : raid5
Array Size : 208640 (203.78 MiB 213.65 MB)
Used Dev Size : 104320 (101.89 MiB 106.82 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Sat Feb 20 12:41:56 2010
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 64K

UUID : ea1f12df:849bd58d:5c766fdc:5dccd818
Events : 0.6

    Number   Major   Minor   RaidDevice State
       0       8        8        0      active sync   /dev/sda8
       1       8        9        1      active sync   /dev/sda9
       2       8       11        2      active sync   /dev/sda11

       3       8       10        -      faulty spare   /dev/sda10
[root@localhost ~]#
可以看到raid5以前里面的成员/dev/sda10已经坏掉了,热备盘很快的成为了raid5里面的成员,继续工作。
[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# ls
config-2.6.18-164.el5           symvers-2.6.18-164.el5.gz
initrd-2.6.18-164.el5.img       System.map-2.6.18-164.el5
initrd-2.6.18-164.el5kdump.img  vmlinuz-2.6.18-164.el5
lost+found
[root@localhost raid5]#
可以看到,raid5里面的数据都没有丢失。
刚才只是将raid5里面的一个成员给down掉了,由于有热备盘给自动的顶了上去,其实的raid5根本就没有什么问题,如果现在将raid5里面的另外一个成员也给down掉,raid5还可以正常工作吗。
在来模拟其中一块盘坏掉了
#mdadm /dev/md1 –f /dev/sda8
[root@localhost ~]# mdadm /dev/md1 -f /dev/sda8
mdadm: set /dev/sda8 faulty in /dev/md1
[root@localhost ~]#
在用mdadm –D /dev/md1来查看一下raid5的工作状态
#mdadm –D /dev/md1
[root@localhost ~]#
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sat Feb 20 12:24:09 2010
Raid Level : raid5
Array Size : 208640 (203.78 MiB 213.65 MB)
Used Dev Size : 104320 (101.89 MiB 106.82 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Sat Feb 20 12:49:17 2010
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 64K

UUID : ea1f12df:849bd58d:5c766fdc:5dccd818
Events : 0.10

    Number   Major   Minor   RaidDevice State
       0       0        0        0       removed
       1       8        9        1      active sync     /dev/sda9
       2       8       11        2      active sync    /dev/sda11

       3       8       10        -      faulty spare    /dev/sda10
       4       8        8         -       faulty spare   /dev/sda8
[root@localhost ~]#

可以看到,raid5的模式已经变了,现在raid5就只有两块磁盘在工作了
[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# ls
config-2.6.18-164.el5           symvers-2.6.18-164.el5.gz
initrd-2.6.18-164.el5.img       System.map-2.6.18-164.el5
initrd-2.6.18-164.el5kdump.img  vmlinuz-2.6.18-164.el5
lost+found
[root@localhost raid5]#
可以看到,raid5里面的数据还是没有丢失。

在raid里面如何去移除一块磁盘
#mdadm /dev/md1 –r /dev/sda10
[root@localhost ~]#
[root@localhost ~]# mdadm /dev/md1 -r /dev/sda10
mdadm: hot removed /dev/sda10
[root@localhost ~]#
在用mdadm –D /dev/md1来查看一下raid5的工作状态
#mdadm –D /dev/md1

    Number   Major   Minor   RaidDevice State
       0       0        0        0       removed
       1       8        9        1       active sync   /dev/sda9
       2       8       11        2      active sync   /dev/sda11

       3       8        8        -      faulty spare   /dev/sda8
[root@localhost ~]#
/dev/sda10已经被我们移除掉了。

在raid里面如何去添加一个新的磁盘
# mdadm /dev/md1 –a /dev/sda10
[root@localhost ~]#
[root@localhost ~]# mdadm /dev/md1 -a /dev/sda10
mdadm: added /dev/sda10
[root@localhost ~]#
可以看到,/dev/sda10又被添加进来了。
在用mdadm –D /dev/md1来查看一下raid5的工作状态
#mdadm –D /dev/md1
    Number   Major   Minor   RaidDevice    State
       0       8       10        0       active sync    /dev/sda10
       1       8        9        1        active sync    /dev/sda9
       2       8       11        2      active sync    /dev/sda11

       3       8        8        -        faulty spare   /dev/sda8
[root@localhost ~]#
可以看到,raid5又已经正常工作了,
所有的操作都是在线的,是不需要离线的。

关于如何在下次启动的时候再raid生效,当然如果是/dev/md0是不要去任何操作的,/dev/md0在下次启动是会自动激活。
我们知道raid是在/etc/rc.d/sysinit这个脚本激活的,现在来看看这个脚本
# RAID setup
update_boot_stage RCraid
[ -x /sbin/nash ] && echo "raidautorun /dev/md0" | nash --quiet
if [ -f /etc/mdadm.conf ]; then
    /sbin/mdadm -A -s
fi
这个raid在/etc/rc.d/rc.sysinit这个脚本里面的内容,在下次启动计算机的时候,系统会去读取/etc/mdadm.conf里面的文件,然后激活raid,如果没有这个文件raid级激活不了。
将这个文件手动敲出来,可以用这条命令
#mdadm –D –s > /etc/mdadm.conf
[root@localhost rc.d]# mdadm -D -s > /etc/mdadm.conf
[root@localhost rc.d]#
必须在/etc/mdadm.conf中加入auto=yes
ARRAY /dev/md1 level=raid5 num-devices=3 metadata=0.90 UUID=ea1f12df:849bd58d:5c766fdc:5dccd818 auto=yes
~  
那么这样,创建的raid在下次启动的时候,就可以自动激活了,刚才创建的是/dev/md1,如果是/dev/md0,就不需要去写这些东西。如果系统中还有其他的raid,都要手动的写出这个文件,每个raid都要写,只有/dev/md0不需要去做这个事情。

如果要想每次启动计算机,raid5都自动挂载,还是要进入/etc/fstab这个文件里面才可以。
/dev/md1                /mnt/raid5            ext3    defaults        0 0
~                                                                             
重启看下,能不能够raid能不能够自动激活和自动挂载上去。
[root@localhost ~]# df -h
Filesystem            Size         Used      Avail        Use%          Mounted on
/dev/sda3             3.9G       2.3G      1.5G        61%                /
/dev/sda6             494M     11M      458M       3%                 /home
/dev/sda2              3.9G     1.8G      2.0G        49%                /var
/dev/sda1              99M     14M       81M        15%                /boot
tmpfs                    188M     0         188M        0%                 /dev/shm
/dev/md1              198M    14M     174M        8%                 /mnt/raid5
/dev/hdc               2.8G      2.8G     0              100%              /media/RHEL_5.4 i386 DVD
[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# ls
config-2.6.18-164.el5           symvers-2.6.18-164.el5.gz
initrd-2.6.18-164.el5.img       System.map-2.6.18-164.el5
initrd-2.6.18-164.el5kdump.img  vmlinuz-2.6.18-164.el5
lost+found
[root@localhost raid5]#
Raid已经激活了而且也挂载到/mnt/raid5下面去了


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/111899/showart_2182831.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP