layout: post
title: 软raid实现
date: 2017-12-06
tags: [“Linux”,”磁盘管理”]


几种raid类型,我就不在这里赘述了,企业一般都是用raid卡,所以一般使用软raid的非常少,但是也有用的,所以就写一个软raid的实验吧,其实用处不大。

实验环境:centos6.9

需要的硬件:5块硬盘,或者5个分区勉强当做试验也行。

添加两个小技巧

测试磁盘读速
dd if=a_big_file of=/dev/null bs=1M count=2048 可以测试每秒的读速度
dd if=/dev/zero of=a_big_file bs=1M count=2048 可以测试每秒的写速度

一、我们先做创建raid10的试验

1、创建raid设备

注意:在创建raid前,应该先查看磁盘是否被识别,如果内核还为识别,创建Raid时会报错:

cat /proc/partitions


如果没有被识别,可以执行命令:
kpartx /dev/sdb或者partprobe/dev/sdb

  1. [root@joker-7-01 ~]# mdadm -C /dev/md0 -a yes -l 10 -n 4 -x 1 /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
  2. mdadm: Defaulting to version 1.2 metadata
  3. mdadm: array /dev/md0 started.

上面命令 -a 表示”自动创建目标RAID设备的设备文件” yes表示创建,no表示不创建

-l 表示要创建的raid的类型,我们使用的是10。

-n表示使用几个磁盘来创建raid,我们raid10最少4块,我们就使用4块

-x表示备用磁盘的个数, 备用磁盘的用处是,当有raid磁盘损坏时,备用磁盘会自动添补上损坏磁盘的空缺,确保系统的健壮。

创建raid设备md0成功。

2、查看一下我们刚刚创建的md0设备信息

  1. [root@joker-7-01 ~]# mdadm -D /dev/md0
  2. /dev/md0:
  3. Version : 1.2
  4. Creation Time : Wed Dec 6 19:49:33 2017
  5. Raid Level : raid10
  6. Array Size : 10477568 (9.99 GiB 10.73 GB)
  7. Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
  8. Raid Devices : 4
  9. Total Devices : 5
  10. Persistence : Superblock is persistent
  11.  
  12. Update Time : Wed Dec 6 19:50:26 2017
  13. State : clean
  14. Active Devices : 4
  15. Working Devices : 5
  16. Failed Devices : 0
  17. Spare Devices : 1
  18.  
  19. Layout : near=2
  20. Chunk Size : 512K
  21.  
  22. Consistency Policy : resync
  23.  
  24. Name : joker-7-01:0 (local to host joker-7-01)
  25. UUID : c7b0daed:33040e1e:24afaba0:f4162d26
  26. Events : 17
  27.  
  28. Number Major Minor RaidDevice State
  29. 0 8 32 0 active sync set-A /dev/sdc
  30. 1 8 48 1 active sync set-B /dev/sdd
  31. 2 8 64 2 active sync set-A /dev/sde
  32. 3 8 80 3 active sync set-B /dev/sdf
  33.  
  34. 4 8 96 - spare /dev/sdg
由以上信息可见"Raid Level : raid10" 咱们创建的是raid10,。 0 8 32 0 active sync set-A /dev/sdc 1 8 48 1 active sync set-B /dev/sdd 2 8 64 2 active sync set-A /dev/sde 3 8 80 3 active sync set-B /dev/sdf sdc、sdd、sde、sdf四个磁盘都是激活状态 sdg状态为备份磁盘 #cat /proc/mdstat 查看阵列状态 3、生成软raid配置文件 mdadm -Ds /dev/md0 >/etc/mdadm.conf #如果不生成配置文件,当已经组好的raid停止工作后,将不能被再次启动。所以如果确定使用软raid技术,创建完raid之后,一定要创建配置文件 4、已经创建好了raid,但是还不能使用,因为还没有创建文件系统,现在创建文件系统
  1. [root@joker-7-01 ~]# mkfs.ext4 /dev/md0
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. 文件系统标签=
  4. OS type: Linux
  5. 块大小=4096 (log=2)
  6. 分块大小=4096 (log=2)
  7. Stride=128 blocks, Stripe width=256 blocks
  8. 655360 inodes, 2619392 blocks
  9. 130969 blocks (5.00%) reserved for the super user
  10. 第一个数据块=0
  11. Maximum filesystem blocks=2151677952
  12. 80 block groups
  13. 32768 blocks per group, 32768 fragments per group
  14. 8192 inodes per group
  15. Superblock backups stored on blocks:
  16. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
  17.  
  18. Allocating group tables: 完成
  19. 正在写入inode表: 完成
  20. Creating journal (32768 blocks): 完成
  21. Writing superblocks and filesystem accounting information: 完成
5、挂载raid设备
  1. [root@joker-7-01 ~]# mount /dev/md0 /mnt
  2. [root@joker-7-01 ~]# lsblk
  3. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  4. sda 8:0 0 200G 0 disk
  5. ├─sda1 8:1 0 1G 0 part /boot
  6. └─sda2 8:2 0 72G 0 part
  7. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
  8. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
  9. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
  10. sdb 8:16 0 20G 0 disk
  11. ├─sdb1 8:17 0 3G 0 part
  12. ├─sdb2 8:18 0 3G 0 part
  13. └─sdb3 8:19 0 3G 0 part
  14. sdc 8:32 0 5G 0 disk
  15. └─md0 9:0 0 10G 0 raid10 /mnt
  16. sdd 8:48 0 5G 0 disk
  17. └─md0 9:0 0 10G 0 raid10 /mnt
  18. sde 8:64 0 5G 0 disk
  19. └─md0 9:0 0 10G 0 raid10 /mnt
  20. sdf 8:80 0 5G 0 disk
  21. └─md0 9:0 0 10G 0 raid10 /mnt
  22. sdg 8:96 0 5G 0 disk
  23. └─md0 9:0 0 10G 0 raid10 /mnt
  24. sr0 11:0 1 1024M 0 rom
已经可以正常使用了 二、现在我们来做一个测试,看看如果有磁盘损坏备用磁盘能否替补  
  1. [root@joker-7-01 ~]# mdadm -f /dev/md0 /dev/sdd #-f 表示标记磁盘为损坏
  2. mdadm: set /dev/sdd faulty in /dev/md0
  3. [root@joker-7-01 ~]# mdadm -D /dev/md0
  4. /dev/md0:
  5. Version : 1.2
  6. Creation Time : Wed Dec 6 19:49:33 2017
  7. Raid Level : raid10
  8. Array Size : 10477568 (9.99 GiB 10.73 GB)
  9. Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
  10. Raid Devices : 4
  11. Total Devices : 5
  12. Persistence : Superblock is persistent
  13.  
  14. Update Time : Wed Dec 6 20:26:02 2017
  15. State : clean, degraded, recovering #raid状态发生了变化,表示正在修复
  16. Active Devices : 3
  17. Working Devices : 4
  18. Failed Devices : 1
  19. Spare Devices : 1
  20.  
  21. Layout : near=2
  22. Chunk Size : 512K
  23.  
  24. Consistency Policy : resync
  25.  
  26. Rebuild Status : 50% complete #修复进度
  27.  
  28. Name : joker-7-01:0 (local to host joker-7-01)
  29. UUID : c7b0daed:33040e1e:24afaba0:f4162d26
  30. Events : 27
  31.  
  32. Number Major Minor RaidDevice State
  33. 0 8 32 0 active sync set-A /dev/sdc
  34. 4 8 96 1 spare rebuilding /dev/sdg #使用备用的sdg磁盘来填充阵列
  35. 2 8 64 2 active sync set-A /dev/sde
  36. 3 8 80 3 active sync set-B /dev/sdf
  37.  
  38. 1 8 48 - faulty /dev/sdd #标记的sdd磁盘
mdadm -G /dev/md0 -n4 -a /dev/sdh /dev/sdj #为设备添加备用磁盘 三、实验已经完成了,现在来拆除raid磁盘 1、第一步就是先取消md0的挂载,很简单umount就ok umount /mnt 如果取消挂载出错,使用fuser -km /mnt 来关闭使用使用挂载点的进程,然后再umount 2、禁用md0设备 mdadm -S /dev/md0 #相对的 mdadm -A -s /dev/md0 表示启用设备 mdadm -R /dev/md0 强制启动raid 3、删除md0配置文件 rm -rf /etc/mdadm.conf 4、因为在raid设备上创建了文件系统,取消磁盘,为了不对以后的操作产生影响,我们需要把md0的超级块抹除 mdadm --zero-superblock /dev/sdb1 #清除超级块  
  1. [root@joker-7-01 dev]# mdadm --zero-superblock /dev/sdc
  2. [root@joker-7-01 dev]# mdadm --zero-superblock /dev/sdd
  3. [root@joker-7-01 dev]# mdadm --zero-superblock /dev/sde
  4. [root@joker-7-01 dev]# mdadm --zero-superblock /dev/sdf
  5. [root@joker-7-01 dev]# mdadm --zero-superblock /dev/sdg
文档更新时间: 2018-12-13 18:02   作者:张尚