最好复制内容到Typora打开

构建软RAID磁盘阵列

一、前置知识

RAID基础

RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同 时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就 是:安全性高、速度快、数据容量大。

磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。

1、RAID 0

特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。

磁盘利用数:n(假设有n个磁盘)。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。

2、RAID 1

特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。

磁盘利用数:n/2。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。

3、RAID 5

特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。

磁盘利用数:n-1。

配置条件:最低三块硬盘,且分区大小尽量相同。

应用领域:适合于事务处理环境,例如民航售票处、销售系统等。

二、上机实验

1、实验环境

公司视频监控服务器使用一段时间后,存储视频的分区空间不足,公司又购置了4块SCSI硬盘,增大存储空间的同时希望提高磁盘存储的性能和可靠性

2、需求描述

为Linux服务器添加4块SCSI硬盘

使用mdadm软件包,构建RAID5磁盘阵列

三、实现步骤

1. 安装mdadm

2. 准备用于RAID阵列的分区

为Linux服务器添加4块SCSI硬盘,并使用fdisk工具各划分出一块2GB的分区,依次为

/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1

将其类型ID更改为“fd”,对应为“Linux raid autodetect”,表示支持用于RAID磁盘阵列

3. 创建RAID设备并建立文件系统

4. 挂载并使用文件系统

1、安装mdadm

查看mdadm工具是否安装

[root@192 ~]# rpm -qa | grep mdadm

mdadm-4.1-rc1_2.el7.x86_64

2、准备用于RAID阵列的分区

(1)查看磁盘分区

[root@192 ~]# fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x00023ad3

设备 Boot Start End Blocks Id System

/dev/sda1 * 2048 2099199 1048576 83 Linux

/dev/sda2 2099200 41943039 19921920 8e Linux LVM

磁盘 /dev/sdb:3221 MB, 3221225472 字节,6291456 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/sdc:3221 MB, 3221225472 字节,6291456 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/sde:3221 MB, 3221225472 字节,6291456 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/sdd:3221 MB, 3221225472 字节,6291456 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

(2)给磁盘进行分区

执行分区命令:

# fdisk /dev/磁盘标识

# /dev/sdc /dev/sdd /dev/sde 以此类推

fdisk /dev/sdb

按m键显示命令列表,如下所示:

命令(输入 m 获取帮助): m

命令操作

a toggle a bootable flag

b edit bsd disklabel

c toggle the dos compatibility flag

d delete a partition

g create a new empty GPT partition table

G create an IRIX (SGI) partition table

l list known partition types

m print this menu

n add a new partition

o create a new empty DOS partition table

p print the partition table

q quit without saving changes

s create a new empty Sun disklabel

t change a partition's system id

u change display/entry units

v verify the partition table

w write table to disk and exit

x extra functionality (experts only)

所有操作步骤如下所示:

[root@192 ~]# fdisk /dev/sdb

欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。

使用写入命令前请三思。

Device does not contain a recognized partition table

使用磁盘标识符 0x56e95307 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): p

分区号 (1-4,默认 1):

起始 扇区 (2048-6291455,默认为 2048):

将使用默认值 2048

Last 扇区, +扇区 or +size{K,M,G} (2048-6291455,默认为 6291455):+2G

分区 1 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):t

已选择分区 1

Hex 代码(输入 L 列出所有代码):fd

已将分区“Linux”的类型更改为“Linux raid autodetect”

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:3221 MB, 3221225472 字节,6291456 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x56e95307

设备 Boot Start End Blocks Id System

/dev/sdb1 2048 4196351 2097152 fd Linux raid autodetect

命令(输入 m 获取帮助):q

[root@192 ~]#

(3)查看磁盘

[root@192 ~]# fdisk -l | grep '/dev'

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区

/dev/sda1 * 2048 2099199 1048576 83 Linux

/dev/sda2 2099200 41943039 19921920 8e Linux LVM

磁盘 /dev/sdb:3221 MB, 3221225472 字节,6291456 个扇区

磁盘 /dev/sdd:3221 MB, 3221225472 字节,6291456 个扇区

磁盘 /dev/sde:3221 MB, 3221225472 字节,6291456 个扇区

磁盘 /dev/sdc:3221 MB, 3221225472 字节,6291456 个扇区

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区

磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区

3、创建RAID设备并格式化

(1)参数说明

大写C 相当于 create

v 把创建位置信息显示出来

/dev/md0 创建RAID5的名称

-a 后面跟yes 代表如果有什么设备文件存在的话自动创建

-n4 小写n 创建RAID用了几块硬盘

-l RAID的级别 5

/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 四块磁盘分区

(2)创建RAID设备

[root@192 ~]# mdadm -Cv /dev/md0 -a yes -n4 -l5 /dev/sd[bcde]

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 512K

mdadm: size set to 3142656K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

(3)查看 RAID5 是否存在

1)普通方法

[root@192 ~]# ll /dev/md0

brw-rw----. 1 root disk 9, 0 3月 31 10:38 /dev/md0

2)查看proc文件系统

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde[4] sdd[2] sdc[1] sdb[0]

9427968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

unused devices:

(4)创建RAID设备并建立文件系统

[root@192 ~]# mkfs -t ext4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

文件系统标签=

OS type: Linux

块大小=4096 (log=2)

分块大小=4096 (log=2)

Stride=128 blocks, Stripe width=384 blocks

589824 inodes, 2356992 blocks

117849 blocks (5.00%) reserved for the super user

第一个数据块=0

Maximum filesystem blocks=2151677952

72 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, 1605632

Allocating group tables: 完成

正在写入inode表: 完成

Creating journal (32768 blocks): 完成

Writing superblocks and filesystem accounting information: 完成

4、挂载并使用文件系统

(1)临时挂载

[root@192 ~]# mkdir /hello

[root@192 ~]# mount /dev/md0 /hello/

[root@192 ~]# df -hT

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root xfs 17G 6.8G 11G 40% /

devtmpfs devtmpfs 470M 0 470M 0% /dev

tmpfs tmpfs 487M 0 487M 0% /dev/shm

tmpfs tmpfs 487M 8.6M 478M 2% /run

tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup

/dev/sda1 xfs 1014M 166M 849M 17% /boot

tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42

tmpfs tmpfs 98M 28K 98M 1% /run/user/0

/dev/md0 ext4 8.8G 37M 8.3G 1% /hello

(2)永久挂载

1)编辑/etc/fstab文件

[root@192 ~]# cp /etc/fstab /etc/fstab.bak

[root@192 ~]# vim /etc/fstab

#

# /etc/fstab

# Created by anaconda on Sun Feb 2 00:01:20 2020

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root / xfs defaults 0 0

UUID=9db7f33b-ec07-4aa9-97f1-1561f7bee865 /boot xfs defaults 0 0

/dev/mapper/centos-swap swap swap defaults 0 0

# 添加RAID5设备信息

/dev/md0 /hello ext4 defaults 0 0

2)进行查验

[root@192 ~]# umount /hello

[root@192 ~]# df -hT

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root xfs 17G 6.8G 11G 40% /

devtmpfs devtmpfs 470M 0 470M 0% /dev

tmpfs tmpfs 487M 0 487M 0% /dev/shm

tmpfs tmpfs 487M 8.6M 478M 2% /run

tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup

/dev/sda1 xfs 1014M 166M 849M 17% /boot

tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42

tmpfs tmpfs 98M 28K 98M 1% /run/user/0

[root@192 ~]# mount -a

[root@192 ~]# df -hT

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root xfs 17G 6.8G 11G 40% /

devtmpfs devtmpfs 470M 0 470M 0% /dev

tmpfs tmpfs 487M 0 487M 0% /dev/shm

tmpfs tmpfs 487M 8.6M 478M 2% /run

tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup

/dev/sda1 xfs 1014M 166M 849M 17% /boot

tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42

tmpfs tmpfs 98M 28K 98M 1% /run/user/0

/dev/md0 ext4 8.8G 37M 8.3G 1% /hello

(3)扩展知识

/etc/fstab文件的作用

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

/etc/fstab文件说明

该文件共有六列,各列作用如下所示:

第一列:Device

磁盘设备文件或者该设备的Label或者UUID

第二列:Mount point

设备的挂载点,就是你要挂载到哪个目录下。

第三列:filesystem

磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等

第四列:parameters

defaults具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置

第五列:能否被dump备份命令作用

dump是一个用来作为备份的命令。通常这个参数的值为0或者1

0:代表不要做dump备份

1:代表要每天进行dump的操作

2:代表不定日期的进行dump操作

第六列:是否检验扇区

开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。

0:不要检验

1:最早检验(一般根目录会选择)

2:1级别检验完成之后进行检验

5、RAID阵列的管理及设备恢复

1. 扫描或查看磁盘阵列信息

2. 启动/停止RAID阵列

3. 设备恢复操作

(1)模拟阵列设备故障

(2)更换故障设备,并恢复数据

参数说明

Mdadm –V 执行信息怎么样显示出来

s是扫描 对linux系统下面冗余阵列啊 阵列怎么样显示出来

(1)扫描或查看磁盘阵列信息

方法一

[root@192 ~]# mdadm -vDs

ARRAY /dev/md0 level=raid5 num-devices=4 metadata=1.2 name=192.168.79.152:0 UUID=c387dc63:62e7aeb5:b561a5bf:d781237f

devices=/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde

方法二

[root@192 ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue Mar 31 10:38:40 2020

Raid Level : raid5

Array Size : 9427968 (8.99 GiB 9.65 GB)

Used Dev Size : 3142656 (3.00 GiB 3.22 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue Mar 31 10:50:05 2020

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Layout : left-symmetric

Chunk Size : 512K

Consistency Policy : resync

Name : 192.168.79.152:0 (local to host 192.168.79.152)

UUID : c387dc63:62e7aeb5:b561a5bf:d781237f

Events : 18

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

4 8 64 3 active sync /dev/sde

方法三

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde[4] sdd[2] sdc[1] sdb[0]

9427968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

unused devices:

# 说明:

# sdd[2]:此设备在RAID中的次序。

# [4/4]:RAID使用3个设备,当前有3个设备正常运行。当某一个设备出错时将会显示[3/2]。

# [UUUU]:RAID中所有磁盘运转正常。如果出错则显示[_UUU],则说明RAID中第一磁盘fail。

(2)启动/停止RAID阵列

1)mdadm配置文件

mdadm的缺省配置文件为/etc/mdadm.conf。对于阵列而言不是必须的,主要是为了方便阵列的日常管理。

使用配置文件后,我们每次启动RAID时,就不需要再次输入建立RAID时的一大堆的参数。

mdadm.conf文件中要包含两行:

第一行是以DEVICE开头的行,它指明在阵列中的设备列表。

第二行是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。

一般会有如下格式:

#cat /etc/mdadm.conf

DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde

ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=b5e3276f:ab97e843:e601b1a4:46720384

生成方法:

echo 'DEVICE /dev/sd[bcde]' > /etc/mdadm.conf

mdadm -Ds >> /etc/mdadm.conf

echo 'DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde' > /etc/mdadm.conf

mdadm -Ds >> /etc/mdadm.conf

2)配置mdadm开机自启动

使用配置文件后,RAID设备在重启后也可以正常的自动加载,因为系统在开机启动时会自动加载RAID。

3)停止与开启RAID设备

停止:

[root@192 ~]# umount /dev/md0

[root@192 ~]# mdadm -S /dev/md0

mdadm: stopped /dev/md0

# -S停止 –A 激活

开启:

# 使用配置文件时:

[root@192 ~]# mdadm -As /dev/md0

mdadm: /dev/md0 has been started with 4 drives.

# 没有使用配置文件时:

[root@192 ~]# mdadm -A /dev/md0 /dev/sd[bcde]

mdadm: /dev/md0 has been started with 4 drives.

(3)设备恢复操作

1)模拟阵列设备故障

将一个磁盘标记为faulty,模拟硬盘坏损

[root@192 ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

查看完成坏损设备后的RAID状态

# 方法一:

[root@192 ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue Mar 31 10:38:40 2020

Raid Level : raid5

Array Size : 9427968 (8.99 GiB 9.65 GB)

Used Dev Size : 3142656 (3.00 GiB 3.22 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue Mar 31 15:43:15 2020

State : clean, degraded

Active Devices : 3

Working Devices : 3

Failed Devices : 1

Spare Devices : 0

Layout : left-symmetric

Chunk Size : 512K

Consistency Policy : resync

Name : 192.168.79.152:0

UUID : c387dc63:62e7aeb5:b561a5bf:d781237f

Events : 20

Number Major Minor RaidDevice State

- 0 0 0 removed

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

4 8 64 3 active sync /dev/sde

0 8 16 - faulty /dev/sdb

#方法二:

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sdb[0](F) sde[4] sdd[2] sdc[1]

9427968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]

unused devices:

2)更换故障设备,并恢复数据

移除坏损设备

[root@192 ~]# mdadm /dev/md0 -r /dev/sdb

mdadm: hot removed /dev/sdb from /dev/md0

添加新的设备

[root@192 ~]# mdadm /dev/md0 -a /dev/sdb

mdadm: added /dev/sdb

查看最终状态

# 方法一:

[root@192 ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue Mar 31 10:38:40 2020

Raid Level : raid5

Array Size : 9427968 (8.99 GiB 9.65 GB)

Used Dev Size : 3142656 (3.00 GiB 3.22 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue Mar 31 15:49:25 2020

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Layout : left-symmetric

Chunk Size : 512K

Consistency Policy : resync

Name : 192.168.79.152:0

UUID : c387dc63:62e7aeb5:b561a5bf:d781237f

Events : 40

Number Major Minor RaidDevice State

5 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

4 8 64 3 active sync /dev/sde

# 方法二:

[root@192 ~]# mdadm /dev/md0 -a /dev/sdb

mdadm: added /dev/sdb

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sdb[5] sde[4] sdd[2] sdc[1]

9427968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]

[=======>.............] recovery = 39.9% (1254656/3142656) finish=0.1min speed=179236K/sec

unused devices:

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sdb[5] sde[4] sdd[2] sdc[1]

9427968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

unused devices: