【原】Linux Raid 实验

时间:2022-09-22 18:25:20

本文参照以下两个链接,将实验重做了一遍,目的就是加深印象及提升实操能力

参照链接:http://www.opsers.org/base/learning-linux-the-day-that-the-system-configuration-in-the-rhel6-disk-array-raid.html

参照链接:http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html

Linux之在CENTOS系统上配置磁盘阵列(RAID)

实验环境

虚拟机:Oracle VM 5.0.10 r104061
系统平台:CentOS Linux release 7.2.1511 (Core)
mdadm版本:mdadm - v3.3.2 - 21st August 2014

磁盘阵列全名是Redundant Arrays of Inexpensive Disks, RAID ,大概的意思是:廉价的磁盘冗余阵列。 RAID 可以通过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘设备,而这个较大的磁盘不但扩展了储存空间,而且还有数据保护的功能。RAID会根据等级 (level) 的不同,而使得整合后的磁盘具有不同的功能,基本常见的 level 有以下这几种

RAID级别划分

RAID 0:磁盘叠加

这种模式一般是使用相同型号与容量的磁盘来组成。这种模式的 RAID 会将磁盘先切出等量的区块, 然后当一个文件需要要写入 RAID 设备时,该文件就会依据区块的大小切割好,然后再依次放到各个磁盘里。由于每个磁盘会交错的存放数据, 因此数据要写入 RAID 时,会被等量的放在各个磁盘上面。 
所以说,RAID 0,他的特点就是: 
1、磁盘越多RAID设备的容量就越大。 
2、容量的总大小是多个硬盘的容量的总和。 
3、磁盘越多,写入的效能就越高。 
4、如果使用非等大的硬盘,那么当小的磁盘写满后,就直接向空间大的磁盘中写数据了。 
5、最少的磁盘数是2个,而且磁盘使用率为100% 
他的致使之处就是:万一其中一个磁盘有问题,那么数据就会全部出问题。因为数据是分开存储的。

RAID 1:镜像备份

这种模式主要是让同一份数据,完整的保存在不同的磁盘上。由于同一份数据会被分别写入到其他不同磁盘。因此在大量写入 RAID 1 设备的情况下,写入的效能会变的非常差。但如果你使用的是硬件 RAID (磁盘阵列卡) 时,磁盘阵列卡会主动的复制一份而不使用系统的 I/O总线,这对效能影响是不大的。 如果使用软件磁盘阵列,效能就会明显下降了。 
RAID 1,他的特点是: 
1、保证了数据的安全, 
2、RAID 1设备的容量是所有磁盘容量总和的一半 
3、在多个磁盘组成RAID 1设备的时候,总容量将以最小的那一颗磁盘为主 
4、读取的效能相对增加。这是因为数据在不同的磁盘上面,如果多个进程在读取同一笔数据时,RAID 会自行取得最佳的读取平衡。 
5、磁盘数必需是2的整数倍。磁盘利用率为50% 
不足之处就是:写入的效能会降低

RAID 5:效能与数据备份的均衡考虑

RAID 5:至少需要三个以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似 RAID 0, 不过每个循环的写入过程中,在每颗磁盘还加入一个校验数据(Parity),这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。

特点: 
1、当任何一个磁盘损坏时,都能够通过其他磁盘的检查码来重建原本磁盘内的数据,安全性明显增强。 
2、由于有同位检查码的存在,因此 RAID 5 的总容量会是整个磁盘数量减一个。 
3、当损毁的磁盘数量大于等于两颗时,那么 RAID 5 的资料就损坏了。 因为 RAID 5 预设只能支持一颗磁盘的损坏情况。 
4、在读写效能上与 RAID-0 差不多。 
5、最少磁盘是3块,磁盘利用率N-1块 
不足:数据写入的效能不一定增加,因为要写入 RAID 5 的数据还得要经过计算校验码 (parity)。所以写入的效能与系统的硬件关系较大。尤其当使用软件磁盘阵列时,校验码 (parity)是通过 CPU 去计算而非专职的磁盘阵列卡, 因此在数据校验恢复的时候,硬盘的效能会明显下降。 
RAID0 RAID1 RAID5三个级别的数据存储流程,大家可以参考下图

【原】Linux Raid 实验

图片来自:http://www.opsers.org/base/learning-linux-the-day-that-the-system-configuration-in-the-rhel6-disk-array-raid.html

RAID 01或RAID 10

这个RAID级别就是针对上面的特点与不足,把RAID 0和RAID 1这两个结合起来了。 
所谓的RAID 01就是:

1.先让组成 RAID 0

2.再组成 RAID 1,这就是 RAID 0+1

所谓的RAID 10就是:
1.先组成 RAID 1

2.再组成 RAID 0,这就是RAID 1+0 
特点与不足:由于具有 RAID 0 的优点,所以效能得以提升,由于具有 RAID 1 的优点,所以数据得以备份。 但是也由于 RAID 1 的缺点,所以总容量会少一半用来做为备份。

RAID10级别的数据存储流程,大家可以参考下图 
【原】Linux Raid 实验

图片来自:http://www.opsers.org/base/learning-linux-the-day-that-the-system-configuration-in-the-rhel6-disk-array-raid.html

由于 RAID5 仅能支持一颗磁盘的损毁,因此还有发展出另外一种等级,就是 RAID 6 ,这个 RAID 6 则使用两颗磁盘的容量作为 parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗,也就是在 RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以恢复回来的。而此级别的RAID磁盘最少是4块,利用率为 N-2。

Spare Disk:热备磁盘

他的作用就是:当磁盘阵列中的磁盘有损毁时,这个热备磁盘就能立刻代替损坏磁盘的位置,这时候我们的磁盘阵列就会主动重建。然后把所有的数据自动恢复。而这个或多个热备磁盘是没有包含在原本磁盘阵列等级中的磁盘,只有当磁盘阵列有任何磁盘损毁时,才真正的起作用。

关于理论知识我们就只介绍到这里,当然还可以延伸出多种组合,只要理解了上面的内容,那么其他级别就不难了,无非是多种组合而已。通过上面的讲解,我相信大家也知道了做磁盘阵列的优点了:1、数据的安全性明显增强,2、读写的效能明显提高,3、磁盘的容量有效扩展。但也别忘记了他的缺点就是成本提高。但相对于数据而言,我想这点成本也不算什么吧!

设置磁盘

在Oracle VM VirtualBox 里模拟物理增加磁盘,在这篇文章中,我们将创建RAID0, RAID1, RAID5分区,RAID0 需要两块硬盘,RAID1 需要两块硬盘,RAID5需要四块硬盘,所以在这里添加了八块物理硬盘,每块5.00 GB.

【原】Linux Raid 实验

mdadm 是multiple devices admin 的简称,它是Linux下的一款标准的软件RAID 管理工具

开始安装


先安装mdadm,yum install mdadm

[root@raid]# rpm -qa | grep mdadm
mdadm-3.3.-.el7.x86_64

查看新增加的物理磁盘

[root@raid]# fdisk -l

Disk /dev/sdb:  MB,  bytes,  sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdc: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdd: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sde: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdf: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdh: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdi: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes Disk /dev/sdg: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes

一、

Raid0实验:使用Disk /dev/sdb Disk /dev/sdc两块盘

1.对磁盘分区

[root@raid ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.). Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd7c6c9b7. Command (m for help): m
Command action
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) Command (m for help): n
Partition type:
p primary ( primary, extended, free)
e extended
Select (default p): p
Partition number (-, default ):
First sector (-, default ):
Using default value
Last sector, +sectors or +size{K,M,G} (-, default ):
Using default value
Partition of type Linux and of size GiB is set Command (m for help): t
Selected partition
Hex code (type L to list all codes): L Empty NEC DOS Minix / old Lin bf Solaris
FAT12 Hidden NTFS Win Linux swap / So c1 DRDOS/sec (FAT-
XENIX root Plan Linux c4 DRDOS/sec (FAT-
XENIX usr 3c PartitionMagic OS/ hidden C: c6 DRDOS/sec (FAT-
FAT16 <32M Venix Linux extended c7 Syrinx
Extended PPC PReP Boot NTFS volume set da Non-FS data
FAT16 SFS NTFS volume set db CP/M / CTOS / .
HPFS/NTFS/exFAT 4d QNX4.x Linux plaintext de Dell Utility
AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
AIX bootable 4f QNX4.x 3rd part Amoeba e1 DOS access
a OS/ Boot Manag OnTrack DM Amoeba BBT e3 DOS R/O
b W95 FAT32 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
OPUS EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
Hidden FAT12 Golden Bow a8 Darwin UFS f1 SpeedStor
Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
Hidden FAT16 < SpeedStor ab Darwin boot f2 DOS secondary
Hidden FAT16 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
Hidden HPFS/NTF Novell Netware b7 BSDI fs fc VMware VMKCORE
AST SmartSleep Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 Old Minix
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): p Disk /dev/sdb: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0xd7c6c9b7 Device Boot Start End Blocks Id System
/dev/sdb1 fd Linux raid autodetect Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.

注:同方法对/dev/sdc分区

使kernel重新读取分区表

[root@raid ~]# partprobe

查看一下状态

[root@raid ~]# fdisk -l /dev/sdb /dev/sdc

Disk /dev/sdb:  MB,  bytes,  sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0xd7c6c9b7 Device Boot Start End Blocks Id System
/dev/sdb1 fd Linux raid autodetect Disk /dev/sdc: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0x7fd6e126 Device Boot Start End Blocks Id System
/dev/sdc1 fd Linux raid autodetect

开始创建Raid0

[root@raid ~]# mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[b,c]1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

说明:

-C  --create  创建阵列;
-a  --auto   同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;
-l  --level   阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
-n --raid-devices 阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
/dev/md0     阵列的设备名称;
/dev/sd{b,c}1   参与创建阵列的磁盘名称;

查看raid状态

[root@raid ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc1[] sdb1[]
blocks super 1.2 512k chunks unused devices: <none> [root@raid ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid0
Array Size : (9.99 GiB 10.73 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1100e7ee:d40cbdc2:21c359b3:b6b966b6
Events : Number Major Minor RaidDevice State
active sync /dev/sdb1
active sync /dev/sdc1

说明:Raid Level : 阵列级别;
   Array Size : 阵列容量大小;
   Raid Devices : RAID成员的个数;
   Total Devices : RAID中下属成员的总计个数,因为还有冗余硬盘或分区,也就是spare,为了RAID的正常运珩,随时可以推上去加入RAID的;
   State : clean, degraded, recovering 状态,包括三个状态,clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建;
   Active Devices : 被激活的RAID成员个数;
   Working Devices : 正常的工作的RAID成员个数;
   Failed Devices : 出问题的RAID成员;
   Spare Devices : 备用RAID成员个数,当一个RAID的成员出问题时,用其它硬盘或分区来顶替时,RAID要进行构建,在没构建完成时,这个成员也会被认为是spare设备;
   UUID : RAID的UUID值,在系统中是唯一的;

创建RAID配置文件/etc/mdadm.conf,默认是不存在的,需要手工创建。该配置文件的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理。但不是必须的,推荐对该文件进行配置。我们这里需要创建这个文件,测试中发现,如果没有这个文件,则reboot 后,已经创建好的md0 会自动变成md127。

/etc/mdadm.conf 文件内容包括:
由DEVICE 选项指定用于软RAID的所有设备,和ARRAY 选项所指定阵列的设备名、RAID级别、阵列中活动设备的数目以及设备的UUID号。

创建/etc/mdadm.conf

echo DEVICE /dev/sd{b,c} >> /etc/mdadm.conf
mdadm -Ds >> /etc/mdadm.conf

当前生成的/etc/mdadm.conf 文件内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:

[root@raid ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid0 num-devices= UUID=1100e7ee:d40cbdc2:21c359b3:b6b966b6

格式化磁盘阵列

[root@raid ~]# mkfs.ext4 /dev/md0
mke2fs 1.42. (-Dec-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , , Allocating group tables: done
Writing inode tables: done
Creating journal ( blocks): done
Writing superblocks and filesystem accounting information: done

建立挂载点并挂载

[root@raid ~]# mkdir -p /raid0
mount /dev/md0 /raid0

查看磁盘状态

[root@raid ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 46G .1G 42G % /
devtmpfs devtmpfs .0G .0G % /dev
tmpfs tmpfs .0G 144K .0G % /dev/shm
tmpfs tmpfs .0G 8.8M .0G % /run
tmpfs tmpfs .0G .0G % /sys/fs/cgroup
/dev/sda1 xfs 497M 140M 358M % /boot
tmpfs tmpfs 396M 16K 396M % /run/user/
/dev/md0 ext4 .8G 37M .2G % /raid0

写入/etc/fstab

[root@raid ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Dec ::
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(), findfs(), mount() and/or blkid() for more info
#
/dev/mapper/centos-root / xfs defaults
UUID=5ea4bc6c--41c6--8a273e36a0f0 /boot xfs defaults
/dev/mapper/centos-swap swap swap defaults
/dev/md0 /raid0 ext4 defaults

然后reboot 测试开机是否自动挂载,raid0 创建完毕。

磁盘I/O测试,测试文件应大约内存,避免write cache,这里使用dd命令,该命令只能提供一个大概的测试结果,而且是连续IO,而不是随机IO

写测试
[root@raid ~]# time dd if=/dev/zero of=/raid0/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (5.4 GB) copied, 26.4606 s, MB/s real 0m26.466s
user 0m0.425s
sys 0m23.814s [root@raid ~]# time dd if=/dev/zero of=/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (5.4 GB) copied, 30.9296 s, MB/s real 0m30.932s
user 0m0.080s
sys 0m3.623s 一个写在raid0上,一个写在根目录下,速度分别是203 MB/s, MB/s,耗时分别是0m26.466s,0m30.932s,可见raid0的速度获胜 读测试
[root@raid]# time dd if=/raid0/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (5.4 GB) copied, 3.98003 s, 1.3 GB/s real 0m3.983s
user 0m0.065s
sys 0m3.581s [root@raid raid0]# time dd if=/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (5.4 GB) copied, 6.81647 s, MB/s real 0m6.819s
user 0m0.020s
sys 0m4.975s 一个读取/raid0/iotest,一个读取/iotest,速度分别是1. GB/s, MB/s,耗时分别是0m3.983s,0m6.819s,可见raid0的读几乎是2倍普通分区 读写测试
[root@raid ~]# time dd if=/raid0/iotest of=/raid0/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 7.04209 s, MB/s real 0m7.045s
user 0m0.073s
sys 0m3.984s [root@raid ~]# time dd if=/iotest of=/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 21.2412 s, MB/s real 0m21.244s
user 0m0.051s
sys 0m2.954s 一个读写/raid0/iotest,/raid0/iotest1,一个读写/iotest,/iotest1,速度分别是381 MB/s, MB/s,耗时分别是0m7.045s,0m21.244s,可见raid0的读写是普通分区2倍还不止

二、

Raid1实验:使用Disk /dev/sdd Disk /dev/sde两块盘

对磁盘分区并修改分区类型

[root@raid ~]# fdisk /dev/sdd
Welcome to fdisk (util-linux 2.23.). Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x686f5801. Command (m for help): n
Partition type:
p primary ( primary, extended, free)
e extended
Select (default p): p
Partition number (-, default ):
First sector (-, default ):
Using default value
Last sector, +sectors or +size{K,M,G} (-, default ):
Using default value
Partition of type Linux and of size GiB is set Command (m for help): t
Selected partition
Hex code (type L to list all codes): L Empty NEC DOS Minix / old Lin bf Solaris
FAT12 Hidden NTFS Win Linux swap / So c1 DRDOS/sec (FAT-
XENIX root Plan Linux c4 DRDOS/sec (FAT-
XENIX usr 3c PartitionMagic OS/ hidden C: c6 DRDOS/sec (FAT-
FAT16 <32M Venix Linux extended c7 Syrinx
Extended PPC PReP Boot NTFS volume set da Non-FS data
FAT16 SFS NTFS volume set db CP/M / CTOS / .
HPFS/NTFS/exFAT 4d QNX4.x Linux plaintext de Dell Utility
AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
AIX bootable 4f QNX4.x 3rd part Amoeba e1 DOS access
a OS/ Boot Manag OnTrack DM Amoeba BBT e3 DOS R/O
b W95 FAT32 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
OPUS EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
Hidden FAT12 Golden Bow a8 Darwin UFS f1 SpeedStor
Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
Hidden FAT16 < SpeedStor ab Darwin boot f2 DOS secondary
Hidden FAT16 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
Hidden HPFS/NTF Novell Netware b7 BSDI fs fc VMware VMKCORE
AST SmartSleep Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 Old Minix
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): p Disk /dev/sdd: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0x686f5801 Device Boot Start End Blocks Id System
/dev/sdd1 fd Linux raid autodetect Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks. [root@raid ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.). Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe0cce225. Command (m for help): n
Partition type:
p primary ( primary, extended, free)
e extended
Select (default p): p
Partition number (-, default ):
First sector (-, default ):
Using default value
Last sector, +sectors or +size{K,M,G} (-, default ):
Using default value
Partition of type Linux and of size GiB is set Command (m for help): t
Selected partition
Hex code (type L to list all codes): L Empty NEC DOS Minix / old Lin bf Solaris
FAT12 Hidden NTFS Win Linux swap / So c1 DRDOS/sec (FAT-
XENIX root Plan Linux c4 DRDOS/sec (FAT-
XENIX usr 3c PartitionMagic OS/ hidden C: c6 DRDOS/sec (FAT-
FAT16 <32M Venix Linux extended c7 Syrinx
Extended PPC PReP Boot NTFS volume set da Non-FS data
FAT16 SFS NTFS volume set db CP/M / CTOS / .
HPFS/NTFS/exFAT 4d QNX4.x Linux plaintext de Dell Utility
AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
AIX bootable 4f QNX4.x 3rd part Amoeba e1 DOS access
a OS/ Boot Manag OnTrack DM Amoeba BBT e3 DOS R/O
b W95 FAT32 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
OPUS EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
Hidden FAT12 Golden Bow a8 Darwin UFS f1 SpeedStor
Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
Hidden FAT16 < SpeedStor ab Darwin boot f2 DOS secondary
Hidden FAT16 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
Hidden HPFS/NTF Novell Netware b7 BSDI fs fc VMware VMKCORE
AST SmartSleep Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 Old Minix
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect' Command (m for help): p Disk /dev/sde: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0xe0cce225 Device Boot Start End Blocks Id System
/dev/sde1 fd Linux raid autodetect Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.

开始创建Raid1

[root@raid ~]# mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]
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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

查看raid1状态

[root@raid ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sde1[] sdd1[]
blocks super 1.2 [/] [UU]
[================>....] resync = 84.0% (/) finish=.0min speed=209615K/sec md0 : active raid0 sdb1[] sdc1[]
blocks super 1.2 512k chunks unused devices: <none>
[root@raid ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid1
Array Size : (5.00 GiB 5.36 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Name : raid: (local to host raid)
UUID : 5ac9846b:2e04aea8:4399404c:5c2b96cb
Events : Number Major Minor RaidDevice State
active sync /dev/sdd1
active sync /dev/sde1

说明:Used Dev Size ,raid成员容量大小,也就是构成raid的成员硬盘或分区的容量的大小,可以看到,raid1 正在创建,待创建完毕,状态如下:

[root@raid ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sde1[] sdd1[]
blocks super 1.2 [/] [UU] md0 : active raid0 sdb1[] sdc1[]
blocks super 1.2 512k chunks unused devices: <none>
[root@raid ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid1
Array Size : (5.00 GiB 5.36 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Name : raid: (local to host raid)
UUID : 5ac9846b:2e04aea8:4399404c:5c2b96cb
Events : Number Major Minor RaidDevice State
active sync /dev/sdd1
active sync /dev/sde1

添加raid1 到RAID 配置文件/etc/mdadm.conf 并修改

[root@raid ~]# echo DEVICE /dev/sd{d,e} >> /etc/mdadm.conf
[root@raid ~]# mdadm -Ds >> /etc/mdadm.conf

修改/etc/mdadm.conf文件如下格式:

[root@raid ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=1100e7ee:d40cbdc2:21c359b3:b6b966b6
DEVICE /dev/sdd1 /dev/sde1
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=5ac9846b:2e04aea8:4399404c:5c2b96cb

格式化磁盘阵列

[root@raid ~]# mkfs.ext4 /dev/md1
mke2fs 1.42. (-Dec-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , Allocating group tables: done
Writing inode tables: done
Creating journal ( blocks): done
Writing superblocks and filesystem accounting information: done

建立挂载点并挂载

[root@raid ~]# mkdir -p /raid1
[root@raid ~]# mount /dev/md1 /raid1

查看磁盘大小

[root@raid ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 46G .1G 42G % /
devtmpfs devtmpfs .0G .0G % /dev
tmpfs tmpfs .0G 88K .0G % /dev/shm
tmpfs tmpfs .0G 8.9M .0G % /run
tmpfs tmpfs .0G .0G % /sys/fs/cgroup
/dev/md0 ext4 .8G 37M .2G % /raid0
/dev/sda1 xfs 497M 140M 358M % /boot
tmpfs tmpfs 396M 12K 396M % /run/user/
/dev/md1 ext4 .8G 20M .6G % /raid1

写入/etc/fstab

[root@raid ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Dec ::
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(), findfs(), mount() and/or blkid() for more info
#
/dev/mapper/centos-root / xfs defaults
UUID=5ea4bc6c--41c6--8a273e36a0f0 /boot xfs defaults
/dev/mapper/centos-swap swap swap defaults
/dev/md0 /raid0 ext4 defaults
/dev/md1 /raid1 ext4 defaults

然后reboot 测试开机是否自动挂载,raid1 创建完毕
重启后,自动挂载了

[root@raid ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 46G .1G 42G % /
devtmpfs .0G .0G % /dev
tmpfs .0G 88K .0G % /dev/shm
tmpfs .0G 8.9M .0G % /run
tmpfs .0G .0G % /sys/fs/cgroup
/dev/md0 .8G 37M .2G % /raid0
/dev/md1 .8G 20M .6G % /raid1
/dev/sda1 497M 140M 358M % /boot
tmpfs 396M 12K 396M % /run/user/

磁盘IO测试,测试文件应大于内存,避免write cache

写测试
[root@raid ~]# time dd if=/dev/zero of=/raid1/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 6.65744 s, MB/s real 0m6.667s
user 0m0.086s
sys 0m4.236s [root@raid ~]# time dd if=/dev/zero of=/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (5.4 GB) copied, 30.9296 s, MB/s real 0m30.932s
user 0m0.080s
sys 0m3.623s 一个写在raid1上,一个写在根目录下,速度分别是403 MB/s, MB/s,耗时分别是0m6.667s,0m30.932s,可见raid1的写速度几乎是普通分区的2倍多(理论上raid1写是要慢的,这个很奇怪?) 读测试
[root@raid ~]# time dd if=/raid1/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (2.7 GB) copied, 0.445192 s, 6.0 GB/s real 0m0.446s
user 0m0.026s
sys 0m0.420s [root@raid ~]# time dd if=/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (2.7 GB) copied, 1.52405 s, 1.8 GB/s real 0m1.534s
user 0m0.036s
sys 0m1.194s 一个读取/raid1/iotest,一个读取/iotest,速度分别是6. GB/s,1.8 GB/s,耗时分别是0m0.446s,0m1.534s,可见raid1的读几乎是普通分区3倍多(理论上raid1读与普通山区差不多,这个很奇怪?) 读写测试
[root@raid ~]# time dd if=/raid1/iotest of=/raid1/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (1.3 GB) copied, 3.47 s, MB/s real 0m3.472s
user 0m0.036s
sys 0m2.340s [root@raid ~]# time dd if=/iotest of=/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 21.2412 s, MB/s real 0m21.244s
user 0m0.051s
sys 0m2.954s 一个读写/raid1/iotest,/raid1/iotest1,一个读写/iotest,/iotest1,速度分别是387 MB/s, MB/s,耗时分别是0m3.472s,0m21.244s,可见raid1的读写是普通分区2倍还不止(理论上raid1写是要慢的,这个很奇怪?)

三、

Raid5实验:使用Disk /dev/sdf Disk /dev/sdg Disk /dev/sdh Disk /dev/sdi四块盘,三块做为活动盘,另一块做为热备盘

1. 新建分区并修改分区类型
fdisk /dev/sdf
fdisk /dev/sdg
fdisk /dev/sdh
fdisk /dev/sdi
详细步骤同上,此处忽略
分区结果如下:

[root@raid ~]# fdisk -l /dev/sd[f,g,h,i]

Disk /dev/sdf:  MB,  bytes,  sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0x8a6a4f75 Device Boot Start End Blocks Id System
/dev/sdf1 fd Linux raid autodetect Disk /dev/sdg: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0xcd98bef8 Device Boot Start End Blocks Id System
/dev/sdg1 fd Linux raid autodetect Disk /dev/sdh: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0xf4d754a4 Device Boot Start End Blocks Id System
/dev/sdh1 fd Linux raid autodetect Disk /dev/sdi: MB, bytes, sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk label type: dos
Disk identifier: 0x62fb90d1 Device Boot Start End Blocks Id System
/dev/sdi1 fd Linux raid autodetect

开始创建Raid5

[root@raid ~]# mdadm -C /dev/md5 -ayes -l5 -n3 -x1 /dev/sd[f,g,h,i]
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

说明:"-x1" 或"--spare-devices=1" 表示当前阵列中热备盘只有一块,若有多块热备盘,则将"--spare-devices" 的值设置为相应的数目。

查看raid5 状态

[root@raid ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdh1[] sdi1[](S) sdg1[] sdf1[]
blocks super 1.2 level , 512k chunk, algorithm [/] [UUU] md1 : active raid1 sde1[] sdd1[]
blocks super 1.2 [/] [UU] md0 : active raid0 sdc1[] sdb1[]
blocks super 1.2 512k chunks unused devices: <none>
[root@raid ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid5
Array Size : (9.99 GiB 10.73 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1bafff7f:f8993ec9:553cd4f7:31ae4f91
Events : Number Major Minor RaidDevice State
active sync /dev/sdf1
active sync /dev/sdg1
active sync /dev/sdh1 - spare /dev/sdi1

说明:Rebuild Status : RAID 的构建进度;类似如下
        4 8 113 2 spare rebuilding /dev/sdh1 注:未被激活,正在构建中的成员,正在传输数据;
        3 8 129 - spare /dev/sdi1 热备盘

添加raid5 到RAID配置文件/etc/mdadm.conf 并修改

[root@raid ~]# echo DEVICE /dev/sd{f,g,h,i} >> /etc/mdadm.conf
[root@raid ~]# mdadm -Ds >> /etc/mdadm.conf
[root@raid ~]# cat /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid0 num-devices= UUID=1100e7ee:d40cbdc2:21c359b3:b6b966b6
DEVICE /dev/sdd1 /dev/sde1
ARRAY /dev/md1 level=raid1 num-devices= UUID=5ac9846b:2e04aea8:4399404c:5c2b96cb
DEVICE /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1
ARRAY /dev/md5 level=raid5 num-devices= UUID=1bafff7f:f8993ec9:553cd4f7:31ae4f91

格式化磁盘阵列

[root@raid ~]# mkfs.ext4 /dev/md5
mke2fs 1.42. (-Dec-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , , Allocating group tables: done
Writing inode tables: done
Creating journal ( blocks): done
Writing superblocks and filesystem accounting information: done

建立挂载点并挂载

[root@raid ~]# mkdir -p /raid5
[root@raid ~]# mount /dev/md5 /raid5
[root@raid ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 46G .1G 42G % /
devtmpfs devtmpfs .0G .0G % /dev
tmpfs tmpfs .0G 88K .0G % /dev/shm
tmpfs tmpfs .0G 8.9M .0G % /run
tmpfs tmpfs .0G .0G % /sys/fs/cgroup
/dev/md0 ext4 .8G 37M .2G % /raid0
/dev/md1 ext4 .8G .6G .1G % /raid1
/dev/sda1 xfs 497M 140M 358M % /boot
tmpfs tmpfs 396M 16K 396M % /run/user/
/dev/md5 ext4 .8G 37M .2G % /raid5

注:raid5 的可用大小为9.2G,即(3-1)x 5G.

写入 /etc/fstab

[root@raid ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Dec ::
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(), findfs(), mount() and/or blkid() for more info
#
/dev/mapper/centos-root / xfs defaults
UUID=5ea4bc6c--41c6--8a273e36a0f0 /boot xfs defaults
/dev/mapper/centos-swap swap swap defaults
/dev/md0 /raid0 ext4 defaults
/dev/md1 /raid1 ext4 defaults
/dev/md5 /raid5 ext4 defaults

然后reboot 测试开机是否自动挂载,raid5 创建完毕,重启测试自动挂载

[root@raid ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 46G .1G 42G % /
devtmpfs .0G .0G % /dev
tmpfs .0G 88K .0G % /dev/shm
tmpfs .0G 8.9M .0G % /run
tmpfs .0G .0G % /sys/fs/cgroup
/dev/md0 .8G 37M .2G % /raid0
/dev/md1 .8G .6G .1G % /raid1
/dev/md5 .8G 37M .2G % /raid5
/dev/sda1 497M 140M 358M % /boot
tmpfs 396M 12K 396M % /run/user/

磁盘I/O测试,

写测试
[root@raid ~]# time dd if=/dev/zero of=/raid5/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 10.2333 s, MB/s real 0m10.236s
user 0m0.049s
sys 0m2.603s [root@raid ~]# time dd if=/dev/zero of=/iotest bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (5.4 GB) copied, 30.9296 s, MB/s real 0m30.932s
user 0m0.080s
sys 0m3.623s 一个写在raid5上,一个写在根目录下,速度分别是262 MB/s, MB/s,耗时分别是0m10.236s,0m30.932s,可见raid5的写速度几乎与普通分区差不多,略快一点 读测试
[root@raid ~]# time dd if=/raid5/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (2.7 GB) copied, 0.443526 s, 6.1 GB/s real 0m0.451s
user 0m0.029s
sys 0m0.416s [root@raid ~]# time dd if=/iotest of=/dev/null bs=8k count=
+ records in
+ records out
bytes (2.7 GB) copied, 1.52405 s, 1.8 GB/s real 0m1.534s
user 0m0.036s
sys 0m1.194s 一个读取/raid5/iotest,一个读取/iotest,速度分别是6. GB/s,1.8 GB/s,耗时分别是0m0.451s,0m1.534s,可见raid5的读几乎是普通分区3倍多 读写测试
[root@raid ~]# time dd if=/raid5/iotest of=/raid5/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (1.3 GB) copied, 5.55382 s, MB/s real 0m5.561s
user 0m0.041s
sys 0m1.288s [root@raid ~]# time dd if=/iotest of=/iotest1 bs=8k count= conv=fdatasync
+ records in
+ records out
bytes (2.7 GB) copied, 21.2412 s, MB/s real 0m21.244s
user 0m0.051s
sys 0m2.954s 一个读写/raid5/iotest,/raid5/iotest1,一个读写/iotest,/iotest1,速度分别是242 MB/s, MB/s,耗时分别是0m5.561s,0m21.244s,可见raid5的读写比普通分区略快

四、

Raid维护

1.模拟磁盘损坏
在实际中,当软RAID 检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作。在这里我们将/dev/sdh1 模拟为出现故障的磁盘,命令如下:

[root@raid ~]# mdadm /dev/md5 -f /dev/sdh1
mdadm: set /dev/sdh1 faulty in /dev/md5

查看重建状态
在上面创建RAID5过程中,我们设置了一个热备盘,所以当有标记为故障磁盘的时候,热备盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过查看"/proc/mdstat" 文件可以看到当前阵列的状态,如下:

[root@raid ~]# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid1 sdd1[] sde1[]
blocks super 1.2 [/] [UU] md5 : active raid5 sdh1[](F) sdg1[] sdf1[] sdi1[]
blocks super 1.2 level , 512k chunk, algorithm [/] [UU_]
[==>...................] recovery = 11.7% (/) finish=2min speed=1854k/sec md0 : active raid0 sdc1[] sdb1[]
blocks super 1.2 512k chunks unused devices: <none>
[root@raid ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid5
Array Size : (9.99 GiB 10.73 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1bafff7f:f8993ec9:553cd4f7:31ae4f91
Events : Number Major Minor RaidDevice State
active sync /dev/sdf1
active sync /dev/sdg1
spare rebuilding /dev/sdi1 - faulty /dev/sdh1

以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如 "sdh1[4](F)"。其中 "[3/2]" 的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;而 "[UU_]" 表示当前阵列可以正常使用的设备是/dev/sdf1 和/dev/sdg1,如果是设备 “/dev/sdf1” 出现故障时,则将变成[_UU]。

查看之前写入的测试数据是否还在

[root@raid raid5]# cat /raid5/.txt
ldjaflajfdlajf

数据正常,未丢失。

重建完毕后查看阵列状态

[root@raid ~]# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid1 sdd1[] sde1[]
blocks super 1.2 [/] [UU] md5 : active raid5 sdh1[](F) sdg1[] sdf1[] sdi1[]
blocks super 1.2 level , 512k chunk, algorithm [/] [UUU] md0 : active raid0 sdc1[] sdb1[]
blocks super 1.2 512k chunks unused devices: <none>

当前的RAID 设备又恢复了正常。

移除损坏的磁盘

移除刚才模拟出现故障的/dev/sdh1,操作如下:

[root@raid ~]# mdadm /dev/md5 -r /dev/sdh1
mdadm: hot removed /dev/sdh1 from /dev/md5

再次查看md5的状态

[root@raid ~]#  cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid1 sdd1[] sde1[]
blocks super 1.2 [/] [UU] md5 : active raid5 sdg1[] sdf1[] sdi1[]
blocks super 1.2 level , 512k chunk, algorithm [/] [UUU] md0 : active raid0 sdc1[] sdb1[]
blocks super 1.2 512k chunks unused devices: <none>
[root@raid ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid5
Array Size : (9.99 GiB 10.73 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1bafff7f:f8993ec9:553cd4f7:31ae4f91
Events : Number Major Minor RaidDevice State
active sync /dev/sdf1
active sync /dev/sdg1
active sync /dev/sdi1

/dev/sdh1 已经移除了

新加热备磁盘

如果是实际生产中添加新的硬盘,同样需要对新硬盘进行创建分区的操作,这里我们为了方便,将刚才模拟损坏的硬盘再次新加到raid5 中。

[root@raid ~]# mdadm /dev/md5 -a /dev/sdh1
mdadm: added /dev/sdh1

查看raid5 阵列状态

[root@raid ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid5
Array Size : (9.99 GiB 10.73 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1bafff7f:f8993ec9:553cd4f7:31ae4f91
Events : Number Major Minor RaidDevice State
active sync /dev/sdf1
active sync /dev/sdg1
active sync /dev/sdi1 - spare /dev/sdh1

/dev/sdh1 已经变成了热备盘。

查看测试数据

[root@raid ~]# cat /raid5/.txt

ldjaflajfdlajf

数据正常,未丢失。故障切换测试完毕。

五、

向RAID中增加存储硬盘

如果现在已经做好的RAID 空间还是不够用的话,那么我们可以向里面增加新的硬盘,来增加RAID 的空间。

在虚拟机中添加物理硬盘,上面我们已经在虚拟机中添加了八块硬盘,这里需要模拟新增硬盘,所以首先将虚拟机关闭,然后在存储里再次新增一块5GB的硬盘。然后分区等等操作,这里不再赘述。

向RAID 中新加一块硬盘

[root@raid ~]# mdadm /dev/md5 -a /dev/sdj1
mdadm: added /dev/sdj1

查看此时的RAID 状态

[root@raid ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Dec ::
Raid Level : raid5
Array Size : (9.99 GiB 10.73 GB)
Used Dev Size : (5.00 GiB 5.36 GB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Mon Dec ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : raid: (local to host raid)
UUID : 1bafff7f:f8993ec9:553cd4f7:31ae4f91
Events : Number Major Minor RaidDevice State
active sync /dev/sdf1
active sync /dev/sdg1
active sync /dev/sdi1 - spare /dev/sdh1
- spare /dev/sdj1

默认情况下,我们向RAID 中增加的磁盘,会被默认当作热备盘,我们需要把热备盘加入到RAID 的活动盘中。

热备盘转换成活动盘

【原】Linux Raid 实验的更多相关文章

  1. 第8天【文件系统挂载、ext文件系统及read命令、Linux RAID、lvm应用】

    文件系统挂载与管理工具(01)_recv 文件系统管理: 将额外文件系统与根文件系统某现存的目录建立关联关系,进而使得此目录作为其他文件访问入口的行成为挂载: 解除此关联关系的过程 吧设备关联挂载点: ...

  2. 原 Linux搭建SVN 服务器2

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  3. 原 Linux搭建SVN 服务器

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  4. linux raid技术

    一.概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意.是为了提高文件在磁盘上的读写速度而研究出来的. ...

  5. Linux RAID 磁盘管理

    Linux RAID 磁盘管理 RAID工作模式介绍:https://www.cnblogs.com/xiangsikai/p/8441440.html 本章主要讲解 Linux下 RAID5 与 R ...

  6. Linux系统实验

    前言:怎么感觉Linux运维和Linux系统实验没什么关系?该不会的还是不会(@@).记录一下几个实验吧. 本篇目录: 实验一 编程环境 实验二 文件读写 实验三 进程通信 实验一 编程环境√ 实验步 ...

  7. LINUX基础实验报告

    实验一:主要是介绍Linux系统概况,无运行代码. 实验二:Linux的基本操作 重要知识点 [Tab] 使用Tab键来进行命令补全,Tab键一般键盘是在字母Q旁边,这个技巧给你带来的最大的好处就是当 ...

  8. 5233杨光--Linux第一次实验

    学习计时:共14小时 读书:2小时 代码:7小时 作业:2小时 博客:3小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Li ...

  9. VirtualBox双网卡搭建Linux虚拟实验环境

    VirtualBox中有如下几种网络连接方式: NAT(NAT到宿主机IP地址) NAT Network (NAT到宿主机所在的网段,即使用相同的网关和掩码) Bridged Adapter Inte ...

随机推荐

  1. C&num;属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  2. Go实现基于WebSocket的弹幕服务

    拉模式和推模式 拉模式 1.数据更新频率低,则大多数请求是无效的 2.在线用户量多,则服务端的查询负载高 3.定时轮询拉取,实时性低 推模式 1.仅在数据更新时才需要推送 2.需要维护大量的在线长连接 ...

  3. &lbrack;CocoaPods&rsqb;入门

    什么是CocoaPods? CocoaPods管理Xcode项目的库依赖项. 项目的依赖项在名为Podfile的单个文本文件中指定.CocoaPods将解析库之间的依赖关系,获取生成的源代码,然后在X ...

  4. Linux硬盘的检测&lpar;原创&rpar;

    http://czmmiao.iteye.com/blog/1058215 概述 随着硬盘容量.速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非 ...

  5. numpy&comma; pandas&comma; matplotlib等常用库的学习手册

    pandas介绍: 待续 参考资料: 中文:https://www.cnblogs.com/skying555/p/5914391.html 英文:http://www.datadependence. ...

  6. flask文件上传

    #coding=utf-8 import os from flask import Flask from flask import request from flask import redirect ...

  7. Cacti部署

    1>监控概述   通常运维人员在一个企业当中所需要管理一台或者多台服务器,或者甚至更多,特别是BAT公司或者门户级别的公司,一个人管理的服务器可能上百甚至上千台                  ...

  8. shell-005:备份。

    #  这个案例感觉有点绕,如果是本地机器备份完全没必要.下面带颜色的写法值得我们借鉴,所以还是做下笔记吧 #!/bin/bash # 找出//目录下所有txt结尾的文件,且形成一个列表清单的文件 fi ...

  9. &lbrack;LeetCode 题解&rsqb;&colon; Permutations

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  10. Cesium&period;js学习第三天(模型展示)

    var viewer = new Cesium.Viewer('cs'); viewer.scene.primitives.add(Cesium.Model.fromGltf({ url : '/Ce ...