概述
目标:
- 将两个,或两个以上的磁盘,创建 RAID 1 磁盘阵列
前置条件:
- Ubuntu 20.04
- 两个或以上物理硬盘,所有硬盘的容量最好保持一致
创建磁盘阵列
- 使用 fdisk 工具分别格式化这些硬盘(本例里,是 sdb 和 sdc)
# 列出所有磁盘信息
$ sudo fdisk -l
# 建立分区
$ sudo fdisk /dev/sdb
# 然后依次输入
$ n (新建分区表)
$ p (主分区,然后根据提示操作)
$ w (保存分区信息)
- 创建 RAID1
使用 mdadm 工具创建 RAID 陈列
$ sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
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
mdadm: size set to 20953088K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
命令解释:
-
--create
: 创建阵列 -
--verbose
: 输入详细信息 -
/dev/md0
: 创建后的阵列的设备名 -
level
: 要创建的 RAID 的级别,这里使用模式 1 -
raid-devices
: 指定 RAID 副本的磁盘数,在这里指定了 2 ,意思是平时有两个磁盘在工作。如果以后添加了第三块硬盘,那么第三块硬盘将作为备用磁盘。当工作中的两块磁盘有一块坏了,第三块将立刻启动,并将完好的一块的内容复制到新的盘中。
更多命令的参数,可以参考文件[链接]
以上命令完成磁盘阵列的创建。可以通过以下命令查看创建的进度:
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[1] sdb1[0]
20953088 blocks super 1.2 [2/2] [UU]
[=======>.............] resync = 35.3% (7397120/20953088) finish=1.1min speed=195512K/sec
unused devices: <none>
创建完毕后,信息如下,sdb1、sdc1 两个都在工作中。
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[1] sdb1[0]
20953088 blocks super 1.2 [2/2] [UU]
unused devices: <none>
也可以通过以下命令查看工作状态:
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Dec 2 16:11:51 2020
Raid Level : raid1
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Dec 2 16:13:40 2020
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : raid:0 (local to host raid)
UUID : f326d47f:8b40c971:b1f17002:afe3a918
Events : 17
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
- 创建文件系统并挂载
使用上面的命令创建完阵列了之后,就可以当普通存储使用了。
# 创建文件系统
$ sudo mkfs.ext4 -F /dev/md0
# 挂载存储到 /opt/data 目录
$ sudo mount /dev/md0 /opt/data
- 保存阵列布局
完成以上步骤后,将阵列保存下来,在下次启动的时候自动加载,因此需要将阵列信息保存到 /etc/mdadm/mdadm.conf 文件中。可以通过以下命令来自动扫描活动阵列并追加文件:
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
更新初始RAM文件系统(initramfs)
$ sudo update-initramfs -u
- 保存挂截信息,修改
/etc/fstab
文件,在文件最后加入以下内容:
/dev/md0 /opt/data ext4 defaults 0 0
更换磁盘阵列硬盘
一般情况下,如果磁盘阵列坏了一块,那么另一块的寿命应该也不长了,因此最好两块都换。更换的过程如下:
- 查看磁盘工作状态
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[1]
20953088 blocks super 1.2 [2/1] [_U]
unused devices: <none>
可以看到,原本 sdb1、sdc1 两个磁盘,只有 sdc1 在工作了。
为了演示,可以通过命令
sudo mdadm --manage /dev/md0 --fail /dev/sdb1
将指定的磁盘设为已失败。
- 删除损坏硬盘
$ sudo mdadm --manage /dev/md0 --remove /dev/sdb1
- 添加新硬盘
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1
添加完新硬盘之后,RAID 会将原来完好的那块硬盘的所有资料镜像拷贝到新的硬盘,组成新 RAID。这个过程可能比较长,可以通过以下命令查看进度:
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[2] sdc1[1]
20953088 blocks super 1.2 [2/1] [_U]
[===================>.] recovery = 99.6% (20883392/20953088) finish=0.0min speed=59703K/sec
等待同步完毕后,再次查看状态,可以看到两个已经在工作了:
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[2] sdc1[1]
20953088 blocks super 1.2 [2/2] [UU]
- 继续添加新硬盘
可以向这个阵列布局再添加一块新硬盘:
$ sudo mdadm --manage /dev/md0 --add /dev/sdb1
此时阵列的工作状态如下:
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[3](S) sdd1[2] sdc1[1]
20953088 blocks super 1.2 [2/2] [UU]
unused devices: <none>
或者通过以下命令查看更详细的状态:
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Nov 30 14:22:01 2020
Raid Level : raid1
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Mon Nov 30 23:43:58 2020
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : raid:0 (local to host raid)
UUID : 2cd8dc59:68e81ae4:7b2635e8:096721b5
Events : 65
Number Major Minor RaidDevice State
2 8 49 0 active sync /dev/sdd1
3 8 17 1 active sync /dev/sdc1
4 8 33 - spare /dev/sdb1
可以看到 sdb1 处于 spare
状态,也就是备用状态。平时向 md0 写入数据的时候,只会备份到 sdc1、sdd1 里,不会写入到 sdb1 里。当 sdc1 和 sdd1 其中有一块硬盘损坏时,系统会自动启用 sdb1,并将所有资料同步到 sdb1 里。
迁移阵列
如果新组装了一台服务器,想将上一个服务器的阵列迁移到新服务器里,可以通过以下方法完成。
- 将硬件添加到新服务器上,然后使用 fdisk 查看磁盘状态。
$ sudo fdisk -l
Disk /dev/md127: 19.101 GiB, 21455962112 bytes, 41906176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
可以看到系统已经识别了磁盘阵列信息,但是阵列的标识不对。
- 保存磁盘阵列信息
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md/raid:0 metadata=1.2 name=raid:0 UUID=6b08dfa9:ece3957c:f92bcf78:fd2f450f
修改 /etc/mdadm/mdadm.conf
文件,把 /dev/md/raid:0
改成 /dev/md0
,保存。
- 更新初始RAM文件系统(initramfs)
$ sudo update-initramfs -u
- 挂载磁盘
保存挂截信息,修改 /etc/fstab
文件,在文件最后加入以下内容:
/dev/md0 /opt/data ext4 defaults 0 0
网友评论