首頁 > 軟體

RIAD的實現及mdadm命令的基本用法

2020-06-16 17:18:23

註  :這篇文章是軟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 看一下

  Device Boot      Start        End      Blocks  Id  System
/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:
    level=raid0 devices=2 ctime=Sun Mar 26 23:31:54 2017
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
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


    Number  Major  Minor  RaidDevice State
      2      8      49        0      active sync  /dev/sdd1
      1      8      33        1      active sync  /dev/sdc1

      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
9)格式化,掛載使用
  格式化:mke2fs /dev/md1
  掛載:mount /dev/md1 /mnt

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-03/142219.htm


IT145.com E-mail:sddin#qq.com