RAID配置实例

      低版本的linux中是使用RAIDtools工具来管理软件RAID,因为RAIDtools要手工编辑配置文件,所以使用起来很不方便。目前各种较新的linux版本中管理软件RAID已不再使用RAIDtools工具,而改用mdadm工具。mdadm工具功能强大,用命令行就可以完成配置软RAID的大部分工作。下面以使用mdadm工具配置RAID5为例来进行演示。

    1.使用mdadm工具配置RAID5

      在实验用计算机安装5块大小均为15G的SCSI磁盘,其中一块磁盘安装linux操作系统,利用剩下的4块盘做一个有一个备用盘的RAID5.因为RAID5要求加入RAID的分区大小相同,所以从这4块磁盘上各分出10GB空间的分区来加入RAID,每个磁盘剩余6GB空间可以另作用。当然实际应用中我们经常会把整个磁盘格式化为一个分区俩加入RAID,具体采用什么方式则要根据需要而定。 我们来看下例的命令操作、讲解及结果:

①由于我是在vmware workstation 9.0上演示的。linux操作系统:asianux 3.0 sp4 硬盘4个15G的SCSI接口的。

  

②在每个磁盘上新建分区

在设备/dev/sdb上新建一个大小为10gb的分区并将其标识为raid类型:

 

  
  
  
  
  1. [root@db8 ~]# fdisk /dev/sdb  
  2.  
  3. The number of cylinders for this disk is set to 1958.  
  4. There is nothing wrong with that, but this is larger than 1024,  
  5. and could in certain setups cause problems with:  
  6. 1) software that runs at boot time (e.g., old versions of LILO)  
  7. 2) booting and partitioning software from other OSs  
  8.    (e.g., DOS FDISK, OS/2 FDISK)  
  9.  
  10. Command (m for help): d  
  11. Selected partition 1  
  12.  
  13. Command (m for help): p  
  14.  
  15. Disk /dev/sdb: 16.1 GB, 16106127360 bytes  
  16. 255 heads, 63 sectors/track, 1958 cylinders  
  17. Units = cylinders of 16065 * 512 = 8225280 bytes  
  18.  
  19.    Device Boot      Start         End      Blocks   Id  System  
  20.  
  21. Command (m for help): d^H^H^H  
  22. No partition is defined yet!  
  23.  
  24. Command (m for help): n  
  25. Command action  
  26.    e   extended  
  27.    p   primary partition (1-4)  
  28. p  
  29. Partition number (1-4): 1  
  30. First cylinder (1-1958, default 1):   
  31. Using default value 1  
  32. Last cylinder or +size or +sizeM or +sizeK (1-1958, default 1958): +10240M  
  33.  
  34. Command (m for help): p  
  35.  
  36. Disk /dev/sdb: 16.1 GB, 16106127360 bytes  
  37. 255 heads, 63 sectors/track, 1958 cylinders  
  38. Units = cylinders of 16065 * 512 = 8225280 bytes  
  39.  
  40.    Device Boot      Start         End      Blocks   Id  System  
  41. /dev/sdb1               1        1246    10008463+  83  Linux  
  42.  
  43. Command (m for help): t  
  44. Selected partition 1  
  45. Hex code (type L to list codes): fd  
  46. Changed system type of partition 1 to fd (Linux raid autodetect)  
  47.  
  48. Command (m for help): p  
  49.  
  50. Disk /dev/sdb: 16.1 GB, 16106127360 bytes  
  51. 255 heads, 63 sectors/track, 1958 cylinders  
  52. Units = cylinders of 16065 * 512 = 8225280 bytes  
  53.  
  54.    Device Boot      Start         End      Blocks   Id  System  
  55. /dev/sdb1               1        1246    10008463+  fd  Linux raid autodetect  
  56.  
  57. Command (m for help): w  
  58. The partition table has been altered!  
  59.  
  60. Calling ioctl() to re-read partition table.  
  61. Syncing disks.  
  62. [root@db8 ~]# partprobe  

对设备/dev/sdc、/dev/sdd和/dev/sde做同样的分区操作(具体步骤已经省略)

  
  
  
  
  1. [root@db8 ~]# fdisk /dev/sdc 
  
  
  
  
  1. [root@db8 ~]# fdisk /dev/sdd 
  
  
  
  
  1. [root@db8 ~]# fdisk /dev/sde 
  
  
  
  
  1. [root@db8 ~]# partprobe  

 

  
  
  
  
  1. [root@db8 ~]# fdisk -l   
  2.  
  3. Disk /dev/sda: 16.1 GB, 16106127360 bytes  
  4. 255 heads, 63 sectors/track, 1958 cylinders  
  5. Units = cylinders of 16065 * 512 = 8225280 bytes  
  6.  
  7.    Device Boot      Start         End      Blocks   Id  System  
  8. /dev/sda1   *           1          25      200781   83  Linux  
  9. /dev/sda2              26         280     2048287+  82  Linux swap / Solaris  
  10. /dev/sda3             281        1958    13478535   83  Linux  
  11.  
  12. Disk /dev/sdb: 16.1 GB, 16106127360 bytes  
  13. 255 heads, 63 sectors/track, 1958 cylinders  
  14. Units = cylinders of 16065 * 512 = 8225280 bytes  
  15.  
  16.    Device Boot      Start         End      Blocks   Id  System  
  17. /dev/sdb1               1        1246    10008463+  fd  Linux raid autodetect  
  18.  
  19. Disk /dev/sdc: 16.1 GB, 16106127360 bytes  
  20. 255 heads, 63 sectors/track, 1958 cylinders  
  21. Units = cylinders of 16065 * 512 = 8225280 bytes  
  22.  
  23.    Device Boot      Start         End      Blocks   Id  System  
  24. /dev/sdc1               1        1246    10008463+  fd  Linux raid autodetect  
  25.  
  26. Disk /dev/sdd: 16.1 GB, 16106127360 bytes  
  27. 255 heads, 63 sectors/track, 1958 cylinders  
  28. Units = cylinders of 16065 * 512 = 8225280 bytes  
  29.  
  30.    Device Boot      Start         End      Blocks   Id  System  
  31. /dev/sdd1               1        1246    10008463+  fd  Linux raid autodetect  
  32.  
  33. Disk /dev/sde: 16.1 GB, 16106127360 bytes  
  34. 255 heads, 63 sectors/track, 1958 cylinders  
  35. Units = cylinders of 16065 * 512 = 8225280 bytes  
  36.  
  37.    Device Boot      Start         End      Blocks   Id  System  
  38. /dev/sde1               1        1246    10008463+  fd  Linux raid autodetect  
  39.  

 

③使用mdadm工具将多个新建分区组成RAID5

    使用mdadm创建RAID5,其中,选项-C表示创建RAID,选项-l5表示建立RAID为级别5,选项-n3表示参与构建RAID5的工作分区有3个,选项为-x1则表示另有一个磁盘分区做为备份分区,当三个工作分区的其中一个出错时,备用分区可以代替损坏的分区以保证数据及时恢复和系统继续可用。

 

  
  
  
  
  1. [root@db8 ~]#  mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd[b-e]1  
  2. mdadm: another array by this name is already running. 

RAID建立后,使用以下命令查看RAID的基本信息:
 

 

  
  
  
  
  1. [root@db8 ~]# mdadm -D /dev/md0   
  2. /dev/md0:  
  3.         Version : 0.90  
  4.   Creation Time : Fri Oct  5 10:22:16 2012  
  5.      Raid Level : raid5  
  6.      Array Size : 20016768 (19.09 GiB 20.50 GB)  
  7.   Used Dev Size : 10008384 (9.54 GiB 10.25 GB)  
  8.    Raid Devices : 3  
  9.   Total Devices : 4  
  10. Preferred Minor : 0  
  11.     Persistence : Superblock is persistent  
  12.  
  13.     Update Time : Fri Oct  5 11:05:36 2012  
  14.           State : clean  
  15.  Active Devices : 3  
  16. Working Devices : 4  
  17.  Failed Devices : 0  
  18.   Spare Devices : 1  
  19.  
  20.          Layout : left-symmetric  
  21.      Chunk Size : 64K  
  22.  
  23.            UUID : c35752f4:2dcfbbd3:5c82bbfc:ac099425  
  24.          Events : 0.12  
  25.  
  26.     Number   Major   Minor   RaidDevice State  
  27.        0       8       65        0      active sync   /dev/sde1  
  28.        1       8       17        1      active sync   /dev/sdb1  
  29.        2       8       49        2      active sync   /dev/sdd1  
  30.  
  31.        3       8       33        -      spare   /dev/sdc1 

使用下面的命令查看当前系统正在使用的RAID设备的相关信息:

  
  
  
  
  1. [root@db8 ~]# cat /proc/mdstat   
  2. Personalities : [raid6] [raid5] [raid4]   
  3. md0 : active raid5 sde1[0] sdd1[2] sdc1[3](S) sdb1[1]  
  4.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]  
  5.         
  6. unused devices: <none> 

④格式化RAID5并挂载使用

在使用RAID之前,还需要先将其格式化:

  
  
  
  
  1. [root@db8 ~]# mkfs.ext3 /dev/md0   
  2. mke2fs 1.39 (29-May-2006)  
  3. Filesystem label=  
  4. OS type: Linux  
  5. Block size=4096 (log=2)  
  6. Fragment size=4096 (log=2)  
  7. 2506752 inodes, 5004192 blocks  
  8. 250209 blocks (5.00%) reserved for the super user  
  9. First data block=0  
  10. Maximum filesystem blocks=0  
  11. 153 block groups  
  12. 32768 blocks per group, 32768 fragments per group  
  13. 16384 inodes per group  
  14. Superblock backups stored on blocks:   
  15.         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,   
  16.         4096000  
  17.  
  18. Writing inode tables: done                              
  19. Creating journal (32768 blocks): done  
  20. Writing superblocks and filesystem accounting information: done  
  21.  
  22. This filesystem will be automatically checked every 33 mounts or 
  23. 180 days, whichever comes first.  Use tune2fs -c or -i to override. 

 和使用分区一样,需要将RAID挂载到挂载点后才能正常使用。

  
  
  
  
  1. [root@db8 ~]# mkdir /RAIDmnt  
  2. [root@db8 ~]# mount /dev/md0 /RAIDmnt/  
  3. [root@db8 ~]# df -h   
  4. ��浠剁郴缁�              瀹归��  宸茬�� ���� 宸茬��% ��杞界�  
  5. /dev/sda3              13G  5.7G  6.2G  48% /  
  6. /dev/sda1             190M   15M  166M   9% /boot  
  7. tmpfs                 252M     0  252M   0% /dev/shm  
  8. /dev/md0               19G  173M   18G   1% /RAIDmnt 

本例的RAID5由4个分区组成,每个分区为10GB,其中有效的工作分区为3个,另一个味备用分区(未启用)。而在这个3个有效的10GB工作分区中,有三分之一的空间是用来村中校验信息的,所以实际能使用的空间只有20GB,上面的df -h 命令的结果证实了这一点。

对RAID设备的操作和对分区的操作一样,如下面的复制文件操作:

  
  
  
  
  1. [root@db8 ~]# cp Asianux-30-SP4-i386-tools-rc-20120614.iso  /RAIDmnt/  
  2. [root@db8 ~]# df -h   
  3. ��浠剁郴缁�              瀹归��  宸茬�� ���� 宸茬��% ��杞界�  
  4. /dev/sda3              13G  5.7G  6.2G  48% /  
  5. /dev/sda1             190M   15M  166M   9% /boot  
  6. tmpfs                 252M     0  252M   0% /dev/shm  
  7. /dev/md0               19G  1.3G   17G   7% /RAIDmnt 

2、RAID5数据恢复实例

    假设在系统工作正常的时候将设备/dev/sdb从系统中热拔出,再使用下面的命令查看,可以发现在设备拔出后,备用的磁盘会立即替代被拔掉的磁盘并开始进行恢复工作。也可以使用mdadm命令模拟磁盘突然损坏或突然被热拔出时的情形。

①一块磁盘损坏的情况

 

  
  
  
  
  1. [root@db8 ~]# mdadm  /dev/md0 -f /dev/sdb1
  2. #模拟磁盘损坏 
  3. mdadm: set /dev/sdb1 faulty in /dev/md0  
  4. [root@db8 ~]# mdadm /dev/md0 -r /dev/sdb1  
  5. #移除(热拔出)磁盘
  6. mdadm: hot removed /dev/sdb1  
  7. [root@db8 ~]# cat /proc/mdstat   
  8. Personalities : [raid6] [raid5] [raid4]   
  9. md0 : active raid5 sde1[0] sdd1[2] sdc1[3]  
  10.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]  
  11.       [>....................]  recovery =  4.4% (441344/10008384) finish=10.4min speed=15218K/sec  
  12.         
  13. unused devices: <none> 

过了一段时间,磁盘数据恢复结束,系统恢复正常。

  
  
  
  
  1. [root@db8 ~]# cat /proc/mdstat   
  2. Personalities : [raid6] [raid5] [raid4]   
  3. md0 : active raid5 sde1[0] sdd1[2] sdc1[1]  
  4.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]  
  5.         
  6. unused devices: <none> 

 

 ②第二块磁盘损坏的情况

 假设再拔掉设备/dev/sdc.这时查看RAID信息会发现RAID已经不能正常工作,因为现在RAID中只有两块磁盘时正常的,而RAID5中有两块磁盘是不能工作,这个过程也可以用mdadm命令来进行模拟的。

  
  
  
  
  1. [root@db8 ~]# mdadm /dev/md0 -r /dev/sdc1  
  2. mdadm: hot removed /dev/sdc1  
  3. [root@db8 ~]# cat /proc/mdstat   
  4. Personalities : [raid6] [raid5] [raid4]   
  5. md0 : active raid5 sde1[0] sdd1[2]  
  6.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]  
  7.         
  8. unused devices: <none> 

③插回一块正常磁盘的情况

  这个时候,如果把第一次拔掉的设备/dev/sdb 重新插回到系统,则再查看RAID状态时,将会发现RAID立刻开始进行恢复工作直至恢复正常。这个过程同样也可以用 mdadm命令来模拟。

  
  
  
  
  1. [root@db8 ~]# mdadm /dev/md0 -a /dev/sdb1  
  2. mdadm: re-added /dev/sdb1  
  3. [root@db8 ~]# cat /proc/mdstat   
  4. Personalities : [raid6] [raid5] [raid4]   
  5. md0 : active raid5 sdb1[1] sde1[0] sdd1[2]  
  6.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]  
  7.       [>....................]  recovery =  2.8% (281856/10008384) finish=6.3min speed=25623K/sec  
  8.         
  9. unused devices: <none> 

过了一段时间,磁盘数据恢复结束,系统恢复正常。

  
  
  
  
  1. [root@db8 ~]# cat /proc/mdstat   
  2. Personalities : [raid6] [raid5] [raid4]   
  3. md0 : active raid5 sdb1[1] sde1[0] sdd1[2]  
  4.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]  
  5.         
  6. unused devices: <none> 

 

④插回第二块正常磁盘的情况

如果再把第二次拔掉的设备/dev/sdc重新插回到系统,则会发现它成了备用磁盘。可以使用mdadm 命令来模拟此操作。

  
  
  
  
  1. [root@db8 ~]# mdadm /dev/md0 -a /dev/sdc1  
  2. mdadm: added /dev/sdc1  
  3. [root@db8 ~]# cat /proc/mdstat   
  4. Personalities : [raid6] [raid5] [raid4]   
  5. md0 : active raid5 sdc1[3](S) sdb1[1] sde1[0] sdd1[2]  
  6.       20016768 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]  
  7.         
  8. unused devices: <none> 

3.设置开机自动启动raid

如果是手工创建raid,但没有生成相关的配置文件,那么系统重启后raid是不会自动启动的,需要使用类似于下面的命令手工启动它:

 

  
  
  
  
  1. [root@db8 ~]# mdadm -A /dev/md0  /dev/sd[b-e]1  
  2. mdadm: device /dev/md0 already active - cannot assemble it 

也可以把上面的命令写入到rc.local文件中以使系统每次启动时都会执行这个命令。

如果希望系统启动时自动启动原来设置好的RAID,那么在重新启动计算机之前应该做好以下工作。首先需要生产RAID相关的配置文件:

 

  
  
  
  
  1. [root@db8 ~]# cat /etc/mdadm.conf   
  2. ARRAY /dev/md0 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=c35752f4:2dcfbbd3:5c82bbfc:ac099425  
  3. device /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 

然后在/etc/fstab文件中加以下行,使系统启动时能自动将raid挂载到/RAIDmnt:

 

  
  
  
  
  1. [root@db8 ~]# cat /etc/fstab   
  2. LABEL=/                 /                       ext3    defaults        1 1  
  3. LABEL=/boot             /boot                   ext3    defaults        1 2  
  4. tmpfs                   /dev/shm                tmpfs   defaults        0 0  
  5. devpts                  /dev/pts                devpts  gid=5,mode=620  0 0  
  6. sysfs                   /sys                    sysfs   defaults        0 0  
  7. proc                    /proc                   proc    defaults        0 0  
  8. LABEL=SWAP-sda2         swap                    swap    defaults        0 0  
  9. /dev/md0                /RAIDmnt                auto    defaults        0 0  

你可能感兴趣的:(raid,配置文件,工具,实际应用)