1. 程式人生 > >軟raid實現

軟raid實現

-s layout 查看 inode 兩個 store 可見 實驗吧 影響

幾種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. Update Time : Wed Dec 6 19:50:26 2017
  12. State : clean
  13. Active Devices : 4
  14. Working Devices : 5
  15. Failed Devices : 0
  16. Spare Devices : 1
  17. Layout : near=2
  18. Chunk Size : 512K
  19. Consistency Policy : resync
  20. Name : joker-7-01:0 (local to host joker-7-01)
  21. UUID : c7b0daed:33040e1e:24afaba0:f4162d26
  22. Events : 17
  23. Number Major Minor RaidDevice State
  24. 0 8 32 0 active sync set-A /dev/sdc
  25. 1 8 48 1 active sync set-B /dev/sdd
  26. 2 8 64 2 active sync set-A /dev/sde
  27. 3 8 80 3 active sync set-B /dev/sdf
  28. 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. Allocating group tables: 完成
  18. 正在寫入inode表: 完成
  19. Creating journal (32768 blocks): 完成
  20. 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. Update Time : Wed Dec 6 20:26:02 2017
  14. State : clean, degraded, recovering #raid狀態發生了變化,表示正在修復
  15. Active Devices : 3
  16. Working Devices : 4
  17. Failed Devices : 1
  18. Spare Devices : 1
  19. Layout : near=2
  20. Chunk Size : 512K
  21. Consistency Policy : resync
  22. Rebuild Status : 50% complete #修復進度
  23. Name : joker-7-01:0 (local to host joker-7-01)
  24. UUID : c7b0daed:33040e1e:24afaba0:f4162d26
  25. Events : 27
  26. Number Major Minor RaidDevice State
  27. 0 8 32 0 active sync set-A /dev/sdc
  28. 4 8 96 1 spare rebuilding /dev/sdg #使用備用的sdg磁盤來填充陣列
  29. 2 8 64 2 active sync set-A /dev/sde
  30. 3 8 80 3 active sync set-B /dev/sdf
  31. 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

軟raid實現