一、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-1: 鏡像卷(Mirror)
RAID-1需要2塊及以上磁盤, 具有磁盤冗餘能力, 提升了磁盤的讀性能, 寫性能略有下降; 可用空間爲“Nx最小磁盤空間/2”.
RAID-1示意圖如下:
RAID-5: 分佈式奇偶校驗的獨立磁盤結構
RAID-5需要3塊及以上磁盤, 其中一塊磁盤做爲冗餘磁盤, 提升了讀寫性能, 可用空間爲“(N-1)x最小磁盤空間”.
RAID-5示意圖:
RAID-6: 帶有兩種分佈式存儲的奇偶校驗碼的獨立磁盤結構
RAID-6需要4塊及以上磁盤, 其中兩塊磁盤做爲冗餘磁盤, 提升了讀寫性能, 可用空間爲“Nx最小磁盤空間/2”.
RAID-10
RAID1和RAID0的結合.
示意圖如下:
其他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