Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158279
  • 博文数量: 126
  • 博客积分: 1073
  • 博客等级: 上尉
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 00:32
文章分类

全部博文(126)

文章存档

2018年(56)

2013年(1)

2012年(8)

2011年(61)

分类: LINUX

2011-01-24 20:36:19

关于linux下面创建软件RAID的讨论,

 

RAID介绍

RAID就是廉价冗余磁盘阵列

常用的级别是RAID0   RAID1   RAID5

RAID分为软RAID和硬件RAID 

软件RAID是基于系统的软件工作
优点:廉价
缺点:不稳定,如果系统坏了,RAID整列也就损坏,容易造成数据丢失

硬件RAID,这就是各大厂商提供的,存储解决方案。有专门的设备负责处理磁盘间的数据流。相对于软件RAID
优点:可靠性高,易管理。稳定
缺点:成本过高

RAID0 最少由两块硬盘组成,优点是大大的提高了硬盘的读写性能,缺点是没有冗余机制,一旦一块硬盘坏了,将无法恢复。

可用空间   n

RAID1 必须是2的倍数组成,优点是可以完全的备份数据,有冗余机制,缺点是降低了写入的性能,而且成本最高。

可用空间   n/2

RAID5:  最少由三块硬盘组成,raid5整合了raid1raid0的优点,既有冗余机制,而且提升了读写的性能,一旦一块硬盘坏了,可以恢复数据。

可用空间   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”来转换分区类型,raididfd

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   8      Linux

/dev/sda4            1058        1958     7237282+  5     Extended

/dev/sda5            1058        1188      1052226  82     Linux swap / Solari s

/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下面去了

 

linux下面创建RAID的讨论就到这里了。

阅读(615) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~