介绍
RAID阵列通过将单个磁盘组合到特定配置中的虚拟存储设备来提高性能和冗余性。 在Linux中mdadm
工具可以很容易地创建和管理软件RAID阵列。
在先前的指导,我们介绍了如何使用创建RAID阵列mdadm
在Ubuntu 16.04 。 在本指南中,我们将演示如何在Ubuntu 16.04服务器上管理RAID阵列。 在大多数情况下管理RAID阵列非常简单。
先决条件
要完成本指南,您将需要访问非root sudo
用户。 您可以按照我们的Ubuntu 16.04服务器初始设置向导来设置相应的用户。
如上所述,本指南将介绍RAID阵列管理。 按照我们的指导如何创建RAID阵列, mdadm
在Ubuntu 16.04开始本指南之前创建一个或多个阵列。 本指南假设您有一个或多个数组要操作。
查询有关RAID设备的信息
正确管理的最基本的要求之一是能够找到关于结构,组件设备和阵列的当前状态的信息。
要获得有关RAID设备的详细信息,通过与RAID设备-D
或--detail
选项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
OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d
为了得到一个RAID设备的快速可读总结,使用-Q
选项进行查询:
sudo mdadm -Q /dev/md0
Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
这可以用来一目了然地找到关于RAID设备的关键信息。
获取有关组件设备的信息
您还可以使用mdadm
查询单个组件的设备。
在-Q
选项,与组件设备使用时,会告诉你该数组是的一部分,它的作用:
sudo mdadm -Q /dev/sdc
Output/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信息
为了让您的服务器上的每个组装阵列的详细信息,请检查/proc/mdstat
文件。 这通常是找到系统上活动阵列的当前状态的最佳方法:
cat /proc/mdstat
OutputPersonalities : [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阵列,它还包括有关数组布局的信息(此示例已配置为在“near”布局中存储每个数据块的两个副本)。
方括号中的最后一个项目表示当前可用的设备在健康集合中。 数字括号中的第一个数字表示健康阵列的大小,而第二个数字表示当前可用的设备数。 其他括号是阵列运行状况的可视指示,其中“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级别。
使用RAID 1或10
首先,将新设备作为备用设备添加,如上一部分所示:
sudo mdadm /dev/md0 --add /dev/sde
查找阵列中当前RAID设备的数量:
sudo mdadm --detail /dev/md0
Output/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
在过程完成后,您可以继续使用设备。
使用RAID 5或6
首先,将新设备作为备用设备添加,如上一部分所示:
sudo mdadm /dev/md0 --add /dev/sde
查找阵列中当前RAID设备的数量:
sudo mdadm --detail /dev/md0
Output/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
以下输出表示将备份临界段:
Outputmdadm: Need to backup 3072K of critical section..
阵列将开始使用额外的活动磁盘重新配置。 要查看同步数据的进度,请键入:
cat /proc/mdstat
此过程完成后,您可以继续使用设备。
重整完成后,您将需要展开阵列上的文件系统以利用额外的空间:
sudo resize2fs /dev/md0
您的数组现在应该具有与其容量相匹配的文件系统。
使用RAID 0
因为RAID 0阵列不能有备用驱动器(备份没有机会重建损坏的RAID 0阵列),我们必须在增加阵列的同时添加新设备。
首先,了解阵列中当前的RAID设备数量:
sudo mdadm --detail /dev/md0
Output/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的输出:
Outputmdadm: 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
Output/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
Outputmdadm: set /dev/sdc faulty in /dev/md0
如果你看一下输出mdadm --detail
,您应该看到该设备已被标记故障。
一旦设备失败,你可以从阵列中删除mdadm --remove
:
sudo mdadm /dev/md0 --remove /dev/sdc
Outputmdadm: hot removed /dev/sdc from /dev/md0
然后,您可以用新的驱动器来替换它,使用相同mdadm --add
您使用添加备用的命令:
sudo mdadm /dev/md0 --add /dev/sdd
Outputmdadm: added /dev/sdd
通过将数据复制到新驱动器,阵列将开始恢复。
删除数组
要破坏数组,包括其中包含的所有数据,请按照我们用于停止数组的过程开始。
首先,卸载文件系统:
cd ~
sudo umount /mnt/md0
接下来,停止数组:
sudo mdadm --stop /dev/md0
随后,删除阵列本身带有--remove
命令针对RAID设备:
sudo mdadm --remove /dev/md0
一旦阵列本身被删除,您应该使用mdadm --zero-superblock
在每个组件设备。 这将清除md
超级块,使用一个头mdadm
组装和作为阵列的一部分管理元器件。 如果仍然存在,当尝试将磁盘重新用于其他目的时,可能会导致问题。
你可以看到,超级块仍存在通过检查出数组中FSTYPE
列lsblk --fs
输出:
lsblk --fs
OutputNAME 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
效用使得它一旦你了解它使用的约定和地方,你可以寻找信息很容易管理阵列。 本指南并不详尽,但用于介绍您可能需要在日常基础上执行的一些管理任务。
一旦你有舒适的创建和管理RAID阵列mdadm
,有许多不同的方向可以下一个探索。 像LVM这样的卷管理层与RAID紧密集成,并允许您灵活地将空间分区为逻辑卷。 类似地,LUKS和dm-crypt加密通常用于在写入文件系统之前加密RAID设备。 Linux允许所有这些技术一起使用来增强您的存储功能。