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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章