天天看點

RIAD的實作,以及mdadm指令的基本用法

注  :這個博文是軟RAID的實作過程,在實際生産中主要是硬來實作磁盤備援。本博文僅供學習,和硬RAID不能實作中使用。

(1)常用RAID級别的介紹(隻介紹級别,原理及raid曆史自行學習)

   1,RAID0:條帶化,沒有備援功能,磁盤的磁盤的讀寫速率為n倍 使用率為100%。實作條件最少2塊盤

   2, RAID1:鏡像技術,有備援功能,磁盤的寫速率變慢,讀的速率變快,使用率為1/2。實作條件最少2塊盤

   3, RAID4:校驗碼技術,有備援功能,磁盤的使用率為n-1倍 ,使用率為n-1/n。實作條件最少3塊盤.

有個巨大的缺點,校驗盤成為速度評定标準

    4,RAID5和RAID4不同一處 :RAID5校驗碼不放在固定一個盤。實作條件最少3塊盤.

    5,RAID10 先做鏡像,再做條帶。有錢的企業,會選擇這種方式。使用率為1/2。實作條件最少4塊盤.

    6,RAID5先做RAID5.再做RAID0

介紹一個特殊的jbod:實作多個小盤合并成一個大空間磁盤,多用于hadoop.

準備過程,vmware虛拟機,redhat6 ,兩塊磁盤(準備好3塊磁盤,為2G,2G ,2G)在虛拟機中添加好,開機。如果開機添加的,需要重新開機。#:reboot

(2)RAID的實作過程

     1,RAID0實作過程

1):用指令fdisk  -l 可以檢視到我們添加的/dev/sdb   ,/dev/sdc   ,/dev/sdd  三塊磁盤

            [root@localhost ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0002980c

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          64      512000   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 2147 MB, 2147483648 bytes

Disk /dev/sdc: 2147 MB, 2147483648 bytes

Disk /dev/sdd: 8589 MB, 8589934592 bytes

        2)用fdisk /dev/sdb 對sdb進行分區

[root@localhost ~]# fdisk /dev/sdb------>對/dev/sdb分區指令

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x21b0103d.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

Command (m for help): n  ----->指令n建立一個分區

Command action

   e   extended                  ----->選項e為擴充分區

   p   primary partition (1-4)   ----->選項p為主分區

p                                             ----->這裡我選擇主分區(實際操作中根據實際情況而定)

Partition number (1-4): 1   ----->分區編号選擇範圍1-4

First cylinder (1-261, default 1): ----->起始柱面 預設為1

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): ----->結束柱面 可以用+#G定義分區大小

Using default value 261

Command (m for help): t------>指令t改變分區類型

Selected partition 1----->我們這裡隻有一個分區,隻能選擇1,如果你們有很多分區可用根據需要選擇

Hex code (type L to list codes): fd----->RAID支援的fd類型(注意下面一條資訊)

Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w--------->指令w   儲存退出

The partition table has been altered!

Calling ioctl() to re-read partition table.

這樣,我們就把/dev/sdb磁盤分好區了,以同樣的方法,我們對/dev/sdc和/dev/sdd分區,我這裡就不示範了

#現在我們再來fdisk -l 看一下

/dev/sdb1               1         261     2096451   fd  Linux raid autodetect

 Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         261     2096451   fd  Linux raid autodetect

可以看到這兩個分區類型沒有問題。

     2)指令partprobe /dev/sdb 和partprobe /dev/sdc重新讀取分區表(或者指令partx /dev/sdb 和 part /dev/sdc)

     3)檢視系統有沒有讀取分區表 cat /proc/partitions

     [root@localhost ~]# cat /proc/partitions

major minor  #blocks  name

   8        0   20971520 sda

   8        1     512000 sda1

   8        2   20458496 sda2

   8       16    2097152 sdb

   8       17    2096451 sdb1

   8       32    2097152 sdc

   8       33    2096451 sdc1

   8       48    8388608 sdd

 253        0   18358272 dm-0

 253        1    2097152 dm-1

确定,都讀取了

  4)建立RAID0

            mdadm raid 管理器  mdadm 可以将任何兩個塊裝置做成raid

    -C    建立模式         

             專用選項

                -l :  級别

                -n#:  裝置個數

                -a{yes|no} : 是否 自動為其建立裝置檔案

                -c --chunk  條帶大小redhat5預設為64k redhat7預設512k

                -x #指定空白盤 (-n#+ -x#)要等于後面的裝置數

        mdadm  -C  /dev/md0   -l 0 -a yes -n 2 /dev/sdb1  /dev/sdc1 注:/dev/md0 為RAID裝置名。

    -l  0  為條帶。

    -a yes ;自動為其建立裝置檔案

   -n  2 : 為兩個裝置組成RAID

[root@localhost ~]#  mdadm  -C /dev/md0  -l 0 -a yes -n 2 /dev/sdb1  /dev/sdc1    

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started。

現在我們已經成功建立RAID0了

現在我們就可以格式化RAID0 :mke2fs j /dev/md0

        格式化完成後,就可以挂載使用:mount  /dev/md0   /mnt

---------------------------------------------------------------------------------------------------------

現在我們删了RAID0建立RAID1:

1先解除安裝/dev/md0 :umount /dev/md0

2停用md0  : mdadm -S  /dev/md0

3删除/dev/md0 :rm -f  /dev/md0

4--建立RAID1

  mdadm -C /dev/md1  -a yes -l 1 -n 2 /dev/sdb1     /dev/sdc1

unused devices: <none>

[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb1 /dev/sdc1

mdadm: /dev/sdb1 appears to be part of a raid array:

    level=raid0 devices=2 ctime=Sun Mar 26 23:31:54 2017

mdadm: Note: this array has metadata at the start and

    may not be suitable as a boot device.  If you plan to

    store '/boot' on this device please ensure that

    your boot-loader understands md/v1.x metadata, or use

    --metadata=0.90

mdadm: /dev/sdc1 appears to be part of a raid array:

Continue creating array? y

mdadm: array /dev/md1 started.

5)檢視RAID1

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid0] [raid1]

md1 : active raid1 sdc1[1] sdb1[0]

      2095360 blocks super 1.2 [2/2] [UU]

6)RIAD管理模式

    mdadm  

          -a  /--add  添加磁盤

         -r  /--remove 删除磁盤

          -f /--fail  模拟一塊磁盤損壞 如:mdadm  -f  /dev/md#   /dev/sd#

例如   ## 模拟一塊磁盤損壞:如,我們讓RAID1中/dev/sdb1損壞

(mdadm  -f  /dev/md1   /dev/sdb1)

[root@localhost ~]# mdadm  -f  /dev/md1   /dev/sdb1

mdadm: set /dev/sdb1 faulty in /dev/md1

  ##RAID的檢視mdadm -D /dev/md1

   [root@localhost ~]# mdadm -D /dev/md1

/dev/md1:

        Version : 1.2

  Creation Time : Mon Mar 27 00:12:42 2017

     Raid Level : raid1

     Array Size : 2095360 (2046.59 MiB 2145.65 MB)

  Used Dev Size : 2095360 (2046.59 MiB 2145.65 MB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

    Update Time : Mon Mar 27 00:33:48 2017

          State : clean, degraded

 Active Devices : 1

Working Devices : 1

 Failed Devices : 1

  Spare Devices : 0

           Name : localhost:1  (local to host localhost)

           UUID : 5e187c59:ab9f8970:a941e8f4:3f5f0feb

         Events : 19

    Number   Major   Minor   RaidDevice State

       0       0        0        0      removed

       1       8       33        1      active sync   /dev/sdc1

       0       8       17        -      faulty   /dev/sdb1

##現在  0       8       17        -      faulty   /dev/sdb1可以看出/dev/sdb1損壞了,我們移除,換塊新的

##移除/dev/sdb1

     (mdadm -r /dev/md1   /dev/sdb1)

[root@localhost ~]# mdadm -r /dev/md1  /dev/sdb1

mdadm: hot removed /dev/sdb1 from /dev/md1

##添加新磁盤/dev/sdd1

(mdadm -a /dev /md1   /dev/sdd1)

[root@localhost ~]# mdadm -a /dev/md1 /dev/sdd1

mdadm: added /dev/sdd1

##在添加空閑磁盤把/dev/sdb1添加上

[root@localhost ~]# mdadm -a /dev/md1 /dev/sdb1

mdadm: added /dev/sdb1

##檢視一下md1詳細情況

[root@localhost ~]#mdadm -d  /dev/md1

       2       8       49        0      active sync   /dev/sdd1

       3       8       17        -      spare   /dev/sdb1

##這種屬于後面添加空閑磁盤。建立md的時候,可以一起建立空閑磁盤如

  mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdc1 /dev/sdd1  -x 1 /dev/sdb1

 這樣就可以把/dev/sdb1添加為空閑磁盤

-----------------------------------------------------------

7)RAID的停用和重新裝配

  1,RAID的停用

          mdadm -S /dev/md#

[root@localhost ~]# mdadm -S /dev/md1

mdadm: stopped /dev/md1

   2,RAID重新裝配 (本來有幾塊就要裝配幾塊)

      mdadm -A /dev/md1  /dev/sdb1 /dev/sdd1  /dev/sdc1

[root@localhost ~]# mdadm -A /dev/md1  /dev/sdb1 /dev/sdd1  /dev/sdc1

mdadm: /dev/md1 has been started with 2 drives and 1 spare.

8)RAID 的掃描系統上raid

   mdadm  -D -scan

[root@localhost ~]# mdadm -D -scan

ARRAY /dev/md1 metadata=1.2 spares=1 name=localhost:1 UUID=5e187c59:ab9f8970:a941e8f4:3f5f0feb

 ###mdadm  -D -scan > /etc/mdadm.conf

把掃描的儲存到mdadm配置檔案中,重新裝置就不要添加那些磁盤裝置

##如:mdadm -S /dev/md1   停止md1

   重新裝配:mdadm -A  /dev/md1