Linux RAID

一、RAID是什麼

RAID(Redundant Arrays of Independent Disks)的全稱叫做獨立磁盤冗餘陣列, 見名知意, 就是使用多塊獨立的磁盤(可以是普通的機械硬盤, 也可以是固態硬盤)構成一個磁盤組, 從而提升磁盤讀寫性能, 磁盤冗餘的能力.

二、常用的RAID級別

多個磁盤有不同的方式來組成陣列, 稱之爲RAID級別; 不同級別的工作方式也有所不同.

RAID-0: 條帶卷(Strip)

RAID-0, 最少需要2塊磁盤, 多則不限, 其主要作用是提升磁盤的IO能力, 五冗餘能力; 可用空間爲“N(磁盤數)x最小磁盤空間”, 比如說有4快磁盤, 其中一塊磁盤的空間只有20GB, 其他爲40GB, 那麼可用空間爲“4x20”.
RAID-0示意圖如下:

RAID-0

RAID-1: 鏡像卷(Mirror)

RAID-1需要2塊及以上磁盤, 具有磁盤冗餘能力, 提升了磁盤的讀性能, 寫性能略有下降; 可用空間爲“Nx最小磁盤空間/2”.
RAID-1示意圖如下:

RAID-1

RAID-5: 分佈式奇偶校驗的獨立磁盤結構

RAID-5需要3塊及以上磁盤, 其中一塊磁盤做爲冗餘磁盤, 提升了讀寫性能, 可用空間爲“(N-1)x最小磁盤空間”.
RAID-5示意圖:

RAID-5

RAID-6: 帶有兩種分佈式存儲的奇偶校驗碼的獨立磁盤結構

RAID-6需要4塊及以上磁盤, 其中兩塊磁盤做爲冗餘磁盤, 提升了讀寫性能, 可用空間爲“Nx最小磁盤空間/2”.

RAID-10

RAID1和RAID0的結合.
示意圖如下:

RAID-10

其他RAID級別請參考維基百科

三、Linux下RAID管理命令

RAID的實現方式通常是通過磁盤陣列卡, 有外接式的, 也有主板自帶的, 不過Linux提供了一個軟件的RAID實現方式. 該實現方式是通過md(multi devices)模塊實現的, 命令爲mdadm, 支持raid級別有raid0, raid1, raid4, raid5, raid6, raid10; 具體操作如下:

# 命令用法: mdadm [mode] <raid-device> [options] <component-devices>
# mode:
    # 創建: -C
        # -n N: 使用N個塊設備來創建次RAID
        # -l raidlevel: 指明要創建的raid級別
        # -a {yes|no}: 是否自動創建目標raid設備的設備文件
        # -c CHUNK_SIZE: 指明CHUNK大小
        # -x N: 指明空閒盤個數

    # 顯示raid詳細信息: -D
    # 裝配: -A
    # 監控: -F
    # 管理: 
        # -f: 標記指定磁盤爲損壞
        # -r: 移除磁盤
        # -a: 添加磁盤
# <raiddevice>: /dev/mdN
# <component-devices>: 任意塊設備

# 創建一個RAID-0
[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes -c 128K /dev/md0 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

# 觀察md的狀態:
[root@zabbix ~]# cat /proc/mdstat
Personalities : [raid0] 
md0 : active raid0 sdc[1] sdb[0]
      4190208 blocks super 1.2 128k chunks

unused devices: <none>

# 顯示raid的詳細信息
[root@zabbix ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan  5 16:21:15 2018
        Raid Level : raid0
        Array Size : 4190208 (4.00 GiB 4.29 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jan  5 16:21:15 2018
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 128K

Consistency Policy : unknown

              Name : zabbix.leistudy.com:0  (local to host zabbix.leistudy.com)
              UUID : 76b65754:84b7728f:e83f8c0c:b8d25a39
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

# 創建文件系統及是掛載使用
[root@zabbix ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=32 blocks, Stripe width=64 blocks
262144 inodes, 1047552 blocks
52377 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 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

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@zabbix ~]# mkdir /backup
[root@zabbix ~]# mount /dev/md0 /backup/
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/mapper/centos_docker--package-root   18G  2.5G   15G  15% /
devtmpfs                                 903M     0  903M   0% /dev
tmpfs                                    913M     0  913M   0% /dev/shm
tmpfs                                    913M  8.7M  904M   1% /run
tmpfs                                    913M     0  913M   0% /sys/fs/cgroup
/dev/sda1                                497M  124M  373M  25% /boot
tmpfs                                    183M     0  183M   0% /run/user/0
/dev/md0                                 3.9G   16M  3.7G   1% /backup
[root@zabbix ~]# mkdir /backup/testfolder
[root@zabbix ~]# touch /backup/file1

# 創建一個RAID-5
[root@zabbix ~]# mdadm -C -n 3 -l raid5 -a yes -c 128K /dev/md1 /dev/sdd /dev/sde /dev/sdf 
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@zabbix ~]# cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md1 : active raid5 sdf[3] sde[1] sdd[0]
      4190208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/2] [UU_]
      [=================>...]  recovery = 88.5% (1856376/2095104) finish=0.0min speed=206265K/sec

md0 : active raid0 sdc[1] sdb[0]
      4190208 blocks super 1.2 128k chunks

# 創建一個RAID-10
[root@zabbix ~]# mdadm -C -n 2 -l raid1 -a yes -c 128K /dev/md0 /dev/sdb /dev/sdc
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@zabbix ~]# mdadm -C -n 2 -l raid1 -a yes -c 128K /dev/md1 /dev/sdd /dev/sde
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes -c 128k /dev/md2 /dev/md0 /dev/md1
mdadm: invalid chunk/rounding value: 128k
[root@zabbix ~]# mdadm -C -n 2 -l raid0 -a yes /dev/md2 /dev/md0 /dev/md1        
mdadm: /dev/md0 appears to contain an ext2fs file system
       size=4190208K  mtime=Fri Jan  5 16:27:35 2018
Continue creating array? y     
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.

[root@zabbix ~]# mdadm -D /dev/md2 
/dev/md2:
           Version : 1.2
     Creation Time : Fri Jan  5 16:33:52 2018
        Raid Level : raid0
        Array Size : 4188160 (3.99 GiB 4.29 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Jan  5 16:33:52 2018
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : unknown

              Name : zabbix.leistudy.com:2  (local to host zabbix.leistudy.com)
              UUID : 7a0186ef:7281a804:78aece49:20d0f0ae
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       9        0        0      active sync   /dev/md0
       1       9        1        1      active sync   /dev/md1

# 測試是否成功, 略去創建文件系統和掛載步驟      
[root@zabbix ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/mapper/centos_docker--package-root   18G  2.5G   15G  15% /
devtmpfs                                 903M     0  903M   0% /dev
tmpfs                                    913M     0  913M   0% /dev/shm
tmpfs                                    913M  8.7M  904M   1% /run
tmpfs                                    913M     0  913M   0% /sys/fs/cgroup
/dev/sda1                                497M  124M  373M  25% /boot
tmpfs                                    183M     0  183M   0% /run/user/0
/dev/md2                                 3.9G   16M  3.7G   1% /mnt/raid10
[root@zabbix ~]# touch /mnt/raid10/file2; mkdir /mnt/raid10/testfoulder

# 停止md設備: mdadm -S /dev/mdN
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章