通过将各个磁盘组合到特定配置的虚拟存储设备中,RAID阵列可提供更高的性能和冗余。在Linux中,该mdadm
实用程序可以轻松创建和管理软件RAID阵列。
要完成本指南,您需要访问非root 具有sudo
权限的用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
如上所述,本指南将介绍RAID阵列管理。在本指南开始之前,请按照腾讯云+社区中的相关指南,了解如何使用mdadm
在Ubuntu 16.04上创建RAID阵列以创建一个或多个阵列。本指南假设您有一个或多个要操作的阵列。
正确管理的最基本要求之一是能够查找有关阵列的结构,组件设备和当前状态的信息。
要获取有关RAID设备的详细信息,请使用-D
或--detail
选项将RAID设备传递给mdadm
:
sudo mdadm -D /dev/md0
下面将显示有关阵列的重要信息:
Output/dev/md0:
Version : 1.2
Creation Time : Mon Aug 8 21:19:06 2016
Raid Level : raid10
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Aug 8 21:36:36 2016
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : mdadmwrite:0 (local to host mdadmwrite)
UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
Events : 18
Number Major Minor RaidDevice State
0 8 0 0 active sync set-A /dev/sda
1 8 16 1 active sync set-B /dev/sdb
2 8 32 2 active sync set-A /dev/sdc
3 8 48 3 active sync set-B /dev/sdd
从该视图中,您可以看到RAID级别,阵列大小,各个部分的运行状况,阵列的UUID以及组件设备及其角色。此视图中提供的信息都标注得很好。
要获取适合添加到/dev/mdadm/mdadm.conf
文件的数组的缩短详细信息,可以使用详细信息视图传入--brief
或-b
标志:
sudo mdadm -Db /dev/md0
ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d
要获得RAID设备的快速人工可读摘要,请使用该-Q
选项进行查询:
sudo mdadm -Q /dev/md0
/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
这可用于一目了然地查找有关RAID设备的关键信息。
您还可以使用mdadm
查询单个组件设备。
该-Q
选项与组件设备一起使用时,将告诉您它所属的数组及其作用:
sudo mdadm -Q /dev/sdc
/dev/sdc: is not an md array
/dev/sdc: device 2 in 4 device active raid10 /dev/md0. Use mdadm --examine for more detail.
您可以使用-E
或--examine
选项获取更多详细信息:
sudo mdadm -E /dev/sdc
Output/dev/sdc:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
Name : mdadmwrite:0 (local to host mdadmwrite)
Creation Time : Mon Aug 8 21:19:06 2016
Raid Level : raid10
Raid Devices : 4
Avail Dev Size : 209584128 (99.94 GiB 107.31 GB)
Array Size : 209584128 (199.88 GiB 214.61 GB)
Data Offset : 131072 sectors
Super Offset : 8 sectors
Unused Space : before=130984 sectors, after=0 sectors
State : active
Device UUID : b0676ef0:73046e93:9d9c7bde:c80352bb
Update Time : Mon Aug 8 21:36:36 2016
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 8be1be96 - correct
Events : 18
Layout : near=2
Chunk Size : 512K
Device Role : Active device 2
Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
此信息类似于-D
在阵列设备中使用该选项时显示的信息,但侧重于组件设备与阵列的关系。
要获取有关服务器上每个已组装阵列的详细信息,请检查该/proc/mdstat
文件。这通常是查找系统上活动阵列当前状态的最佳方法:
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
这里的输出非常密集,在很小的空间内提供了大量的信息。
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
. . .
该“ 个性”行描述了内核当前支持的不同RAID级别和配置。
以md0开头的行描述了RAID设备描述的开始。后面的缩进行也描述了这个设备。
. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .
第一行表示阵列处于活动状态(没有故障)并配置为RAID 10.之后,将列出用于构建阵列的组件设备。括号中的数字描述了设备在阵列中的当前“角色”(这会影响设备的数据副本)。
. . .
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .
此示例中显示的第二行给出了虚拟设备提供的块数,元数据版本(本例中为1.2)以及数组的块大小。由于这是一个RAID 10阵列,它还包括有关阵列布局的信息(此示例已配置为在“近”布局中存储每个数据块的两个副本)。
方括号中的最后一项表示当前集中的可用的健康设备。数字括号中的第一个数字表示正常数组的大小,而第二个数字表示当前可用的设备数量。其他括号是阵列运行状况的可视指示,“U”表示健康设备,“_”表示故障设备。
如果您的阵列当前正在组装或恢复,您可能还有另一行显示进度。它看起来像这样:
. . .
[>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .
这描述了当前正在应用的操作以及当前以多种不同方式的进展。它还提供当前的速度和预计的完成时间。
在您清楚了解系统上当前正在运行的阵列之后,您可以采取许多操作。
要停止阵列,第一步是卸载它。
退出已挂载的目录,然后键入以下命令将其卸载:
cd ~
sudo umount /mnt/md0
您可以键入以下命令来停止所有活动阵列
sudo mdadm --stop --scan
如果要停止特定阵列,请将其传递给mdadm --stop
命令:
sudo mdadm --stop /dev/md0
这将停止阵列。您将不得不重新组装阵列以再次访问它。
要启动配置文件或/proc/mdstat
中定义的所有阵列,请键入:
sudo mdadm --assemble --scan
要启动特定数组,可以将其作为参数传递给mdadm --assemble
:
sudo mdadm --assemble /dev/md0
如果在配置文件中定义了数组,则此方法有效。
如果配置文件中缺少对阵列的正确定义,则仍可以通过传入组件设备来启动阵列:
sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd
阵列组装完成后,可以照常安装:
sudo mount /dev/md0 /mnt/md0
现在可以在挂载点访问该数组。
备用设备可以添加到任何提供冗余的阵列(例如RAID 1,5,6或10)。除非活动设备发生故障,否则阵列不会主动使用备用。发生这种情况时,阵列会将数据重新同步到备用驱动器,以将阵列修复到完全健康状态。备用磁盘无法添加到非冗余阵列(RAID 0),因为阵列无法承受驱动器故障。
要添加备用,只需将数组和新设备传递给mdadm --add
命令:
sudo mdadm /dev/md0 --add /dev/sde
如果阵列未处于降级状态,则新设备将作为备用添加。如果设备当前降级,则重新同步操作将立即开始使用备用驱动器来更换故障驱动器。
添加备用磁盘后,请更新配置文件以反映新的设备方向:
sudo nano /etc/mdadm/mdadm.conf
删除或注释掉与数组定义对应的当前行:
. . .
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294
然后,附加您当前的配置:
sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf
mdadm
实用程序将使用新信息来组装阵列。
可以通过增加组件中的活动设备的数量来增长阵列。确切的过程略微取决于您使用的RAID级别。
首先将新设备添加为备用设备,如上一节所示:
sudo mdadm /dev/md0 --add /dev/sde
找出阵列中当前的RAID设备数量:
sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 15:29:26 2016
Raid Level : raid1
Array Size : 104792064 (99.94 GiB 107.31 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
. . .
我们可以看到,在此示例中,阵列配置为主动使用两个设备,并且阵列可用的设备总数为三(因为我们添加了备用)。
现在,重新配置阵列以使其具有其他活动设备。备件将用于满足额外的驱动器要求:
sudo mdadm --grow --raid-devices=3 /dev/md0
阵列将开始使用额外的活动磁盘进行重新配置。要查看同步数据的进度,请键入:
cat /proc/mdstat
您可以在流程完成时继续使用该设备。
首先将新设备添加为备用设备,如上一节所示:
sudo mdadm /dev/md0 --add /dev/sde
找出阵列中当前的RAID设备数量:
sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 18:38:51 2016
Raid Level : raid5
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
. . .
我们可以看到,在此示例中,阵列配置为主动使用三个设备,并且阵列可用的设备总数为四(因为我们添加了备用)。
现在,重新配置阵列以使其具有其他活动设备。备件将用于满足额外的驱动器要求。在增长RAID 5或RAID 6阵列时,重要的是要包含一个名为--backup-file
的附加选项。这应该指向的位置离其中包含关键信息的备份文件将被存储在数组。
注意
备份文件仅在此过程中用于非常短但非常关键的时间,之后将自动删除。因为需要的时间非常短暂,所以您可能永远不会在磁盘上看到该文件,但是如果出现问题,可以使用它来重建阵列。
sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0
以下输出表明将备份临界区:
mdadm: Need to backup 3072K of critical section..
阵列将开始使用额外的活动磁盘进行重新配置。要查看同步数据的进度,请键入:
cat /proc/mdstat
此过程完成后,您可以继续使用该设备。
重塑完成后,您需要扩展阵列上的文件系统以利用额外的空间:
sudo resize2fs /dev/md0
您的阵列现在应该具有与其容量匹配的文件系统。
由于RAID 0阵列不能有备用驱动器(备用磁盘不可能重建损坏的RAID 0阵列),因此我们必须在生成阵列的同时添加新设备。
首先,找出阵列中当前的RAID设备数量:
sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 19:17:14 2016
Raid Level : raid0
Array Size : 209584128 (199.88 GiB 214.61 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
. . .
我们现在可以在与新驱动器添加相同的操作中增加RAID设备的数量:
sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc
您将看到输出,指示阵列已更改为RAID 4:
mdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc
这是正常的和预期的。当数据重新分发到所有现有磁盘时,阵列将转换回RAID 0。
您可以通过键入以下内容来检查操作的进度:
cat /proc/mdstat
同步完成后,调整文件系统的大小以使用额外的空间:
sudo resize2fs /dev/md0
您的阵列现在应该具有与其容量匹配的文件系统。
如果出现故障或需要切换磁盘,有时需要从RAID阵列中卸下驱动器。
对于要移除的设备,必须首先在阵列中将其标记为“失败”。您可以使用mdadm --detail
检查是否存在故障设备:
sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 21:42:12 2016
Raid Level : raid5
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Aug 11 14:10:43 2016
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Name : mdadmwrite:0 (local to host mdadmwrite)
UUID : bf7a711b:b3aa9440:40d2c12e:79824706
Events : 144
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 0 1 active sync /dev/sda
2 8 16 2 active sync /dev/sdb
0 8 32 - faulty /dev/sdc
突出显示的行都表示驱动器不再起作用(/dev/sdc
在此示例中)。
如果您需要删除没有问题的驱动器,可以使用 --fail
选项手动将其标记为失败:
sudo mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
如果查看 mdadm --detail
的输出,您应该看到设备现在标记有问题。
设备出现故障后,您可以使用mdadm --remove
命令将其从阵列中删除:
sudo mdadm /dev/md0 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
然后,您可以使用用于添加备用的相同mdadm --add
命令将其替换为新驱动器:
sudo mdadm /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
通过将数据复制到新驱动器,阵列将开始恢复。
要销毁一个数组,包括其中包含的所有数据,请按照我们用来停止数组的过程来开始。
首先,卸载文件系统:
cd ~
sudo umount /mnt/md0
接下来,停止数组:
sudo mdadm --stop /dev/md0
然后,使用针对RAID设备的--remove
命令删除阵列本身:
sudo mdadm --remove /dev/md0
删除阵列本身后,您应该在每个组件设备上使用mdadm --zero-superblock
。这将擦除md
超级块,该超级块是被mdadm
用来组装和管理组件设备作为阵列一部分的标头。如果该超级块仍然存在,则在尝试将磁盘重用于其他目的时可能会导致问题。
通过检出输出中的FSTYPE
列,您可以看到超级块仍然存在于数组lsblk --fs
中:
lsblk --fs
NAME FSTYPE LABEL UUID MOUNTPOINT
sda linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdb linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdc linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdd
vda
├─vda1 ext4 DOROOT 4f8b85db-8c11-422b-83c4-c74195f67b91 /
└─vda15
在这个例子中,/dev/sda
,/dev/sdb
,和/dev/sdc
都是为阵列的所有部分,但仍如此标记。
键入以下内容删除标签:
sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc
接下来,确保删除或注释掉/etc/fstab
文件中对数组的任何引用:
sudo nano /etc/fstab
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
完成后保存并关闭文件。
从/etc/mdadm/mdadm.conf
文件中删除或注释掉对数组的任何引用:
nano /etc/mdadm/mdadm.conf
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706
完成后保存并关闭文件。
键入以下命令更新initramfs:
sudo update-initramfs -u
这应该从早期启动环境中删除设备。
一旦您了解了它使用的约定以及可以查找信息的位置,Linux的mdadm
实用程序就可以很容易地管理数组。本指南绝不是详尽无遗的,但可以介绍您可能需要在日常工作中执行的一些管理任务。
一旦您熟悉了怎么使用mdadm
创建和管理RAID阵列,接下来您可以探索许多不同的方向。像LVM这样的卷管理层与RAID紧密集成,允许您灵活地将空间划分为逻辑卷。类似地,LUKS和dm-crypt加密通常用于在写入文件系统之前加密RAID设备。Linux允许所有这些技术一起使用,以增强您的存储功能。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Manage RAID Arrays with mdadm on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。