/** * 给主机添加5块SCSI硬盘,每个8GB。其中4块用作RAID5的active sync * [sdd、sde、sdf、sdg],1块用作RAID5的Spare Disk[sdh] */ oracle:/dev# ls -l sd sda sda1 sda2 sdb sdc sdd sde sdf sdg sdh
/** * 安装software RAID管理工具mdadm,这套软件可以让我们以软件的方式模拟很多高端磁盘 * 镜像系统才有的功能,比如热拔插等。所谓热拔插功能就是允许用户在不关闭系统,不切 * 断电源的情况下取出和更换坏掉的硬盘。现在的热拔插技术只要简单的打开链接开关或者 * 转动手柄就可以直接取出硬盘,而系统仍然可以不间断的正常运行。 * 值得注意的是用mdadm模拟出来的RAID阵列设备名称通常为/dev/md0,/dev/md1... */ apt-get install mdadm
// 通过mdadm来建立磁盘阵列 oracle:/dev# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 \ > --spare-devices=1 /dev/sd{d,e,f,g,h} mdadm: array /dev/md0 started.
/** * 磁盘阵列的建立相对比较慢,数分钟后,检查RADI的建立情况如下: * Chunk Size : 64K 表示带区大小为64K,合理的选择带区大小非常重要,如果噢带区过大 * 可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使得数据的读写只局限于一块 * 硬盘上,这便不能充分发挥RAID并发的优势;如果带区设置过小,任何很小的I/O指令都 * 可能引发大量的读写操作,占用过多的控制器总线带宽,也会影响阵列的性能。所以,在 * 创建带区时,我们应该根据实际应用的需要,合理且慎重的选择带区大小。 */ oracle:/dev# mdadm --detail /dev/md0 /dev/md0: // RAID设备名称 Version : 00.90 Creation Time : Sun Jun 27 02:42:33 2010 Raid Level : raid5 // RAID5噢:) Array Size : 25165632 (24.00 GiB 25.77 GB) // 阵列可用大小 Used Dev Size : 8388544 (8.00 GiB 8.59 GB) // 组成阵列的每个设备容量 Raid Devices : 4 // 当前处于活动状态的设备数量 Total Devices : 5 // 全部设备数量 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Jun 27 02:47:39 2010 State : clean Active Devices : 4 // 激活的磁盘数量 Working Devices : 5 // 工作的磁盘数量[Working=Active+Spare] Failed Devices : 0 // 出现错误的磁盘数量 Spare Devices : 1 // 备用磁盘数量 Layout : left-symmetric Chunk Size : 64K // RAID划分的小区块大小 UUID : dd191942:a9381905:b6641343:7cc40f45 (local to host oracle) Events : 0.24 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 1 8 64 1 active sync /dev/sde 2 8 80 2 active sync /dev/sdf 3 8 96 3 active sync /dev/sdg 4 8 112 - spare /dev/sdh // 也可以基于/proc文件系统来检查RAID的建立情况 oracle:/dev# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdg[3] sdh[4](S) sdf[2] sde[1] sdd[0] 25165632 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none>
// 格式化阵列为ext3文件系统 oracle:/dev# mkfs -t ext3 /dev/md0 mke2fs 1.41.3 (12-Oct-2008) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 1572864 inodes, 6291408 blocks 314570 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 192 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
// 将/dev/md0并挂在到/raid oracle:/# mkdir /raid oracle:/# mount /dev/md0 /raid/ oracle:/# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/oracle-root 329233 135760 176475 44% / tmpfs 258148 0 258148 0% /lib/init/rw udev 10240 668 9572 7% /dev tmpfs 258148 0 258148 0% /dev/shm /dev/sda1 233335 26271 194616 12% /boot /dev/mapper/oracle-home 2789856 69796 2578340 3% /home /dev/mapper/oracle-tmp 238003 6177 219538 3% /tmp /dev/mapper/oracle-usr 2822096 685372 1993364 26% /usr /dev/mapper/oracle-var 1350552 123468 1158476 10% /var /dev/mapper/optvg-optlv 8252856 2579504 5254128 33% /opt /dev/mapper/oradatavg-oradatalv 8252856 149624 7684008 2% /oradata /dev/md0 24770748 176196 23336272 1% /raid
/* * 模拟RAID5阵列的自动恢复与救援。 * 设定/dev/sdd这块磁盘为Fail */ oracle:/raid# mdadm --manage /dev/md0 --fail /dev/sdd mdadm: set /dev/sdd faulty in /dev/md0
/** * 检查阵列/dev/md0状态,我们发现/dev/sdd已经标识为faulty spare了,而/dev/sdh * 这块原先做Spare Disk的磁盘立马开始重建,正处于spare rebuilding状态。 */ oracle:/raid# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Sun Jun 27 02:42:33 2010 Raid Level : raid5 Array Size : 25165632 (24.00 GiB 25.77 GB) Used Dev Size : 8388544 (8.00 GiB 8.59 GB) Raid Devices : 4 Total Devices : 5 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Jun 27 04:36:19 2010 State : clean, degraded, recovering Active Devices : 3 Working Devices : 4 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K Rebuild Status : 2% complete UUID : dd191942:a9381905:bc444e69:8a5dd25b Events : 0.26 Number Major Minor RaidDevice State 5 8 112 0 spare rebuilding /dev/sdh 1 8 64 1 active sync /dev/sde 2 8 80 2 active sync /dev/sdf 3 8 96 3 active sync /dev/sdg 4 8 48 - faulty spare /dev/sdd
/** * 等待重建完毕再次检查阵列状态,发现/dev/sdh重建完毕。 */ oracle:/raid# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Sun Jun 27 02:42:33 2010 Raid Level : raid5 Array Size : 25165632 (24.00 GiB 25.77 GB) Used Dev Size : 8388544 (8.00 GiB 8.59 GB) Raid Devices : 4 Total Devices : 5 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Jun 27 04:41:25 2010 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : dd191942:a9381905:bc444e69:8a5dd25b Events : 0.34 Number Major Minor RaidDevice State 0 8 112 0 active sync /dev/sdh 1 8 64 1 active sync /dev/sde 2 8 80 2 active sync /dev/sdf 3 8 96 3 active sync /dev/sdg 4 8 48 - faulty spare /dev/sdd
// 加入新的磁盘,拔出有问题的磁盘 oracle:~# mdadm --manage /dev/md0 --add /dev/sdi --remove /dev/sdd mdadm: added /dev/sdi mdadm: hot removed /dev/sdd /** * 再次检查阵列,发现刚加入的/dev/sdi已成为了新的Spare Disk。 */ oracle:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Sun Jun 27 02:42:33 2010 Raid Level : raid5 Array Size : 25165632 (24.00 GiB 25.77 GB) Used Dev Size : 8388544 (8.00 GiB 8.59 GB) Raid Devices : 4 Total Devices : 5 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Jun 27 04:47:30 2010 State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K UUID : dd191942:a9381905:bc444e69:8a5dd25b Events : 0.36 Number Major Minor RaidDevice State 0 8 112 0 active sync /dev/sdh 1 8 64 1 active sync /dev/sde 2 8 80 2 active sync /dev/sdf 3 8 96 3 active sync /dev/sdg 4 8 128 - spare /dev/sdi