首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上使用mdadm管理RAID阵列

如何在Ubuntu 16.04上使用mdadm管理RAID阵列

原创
作者头像
GeekZ
修改2018-10-22 11:29:32
4.3K0
修改2018-10-22 11:29:32
举报

介绍

通过将各个磁盘组合到特定配置的虚拟存储设备中,RAID阵列可提供更高的性能和冗余。在Linux中,该mdadm实用程序可以轻松创建和管理软件RAID阵列。

课程准备

要完成本指南,您需要访问非root 具有sudo权限的用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

如上所述,本指南将介绍RAID阵列管理。在本指南开始之前,请按照腾讯云+社区中的相关指南,了解如何使用mdadm在Ubuntu 16.04上创建RAID阵列以创建一个或多个阵列。本指南假设您有一个或多个要操作的阵列。

查询有关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信息

要获取有关服务器上每个已组装阵列的详细信息,请检查该/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级别。

使用RAID 1或10

首先将新设备添加为备用设备,如上一节所示:

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

您可以在流程完成时继续使用该设备。

使用RAID 5或6

首先将新设备添加为备用设备,如上一节所示:

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 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 课程准备
  • 查询有关RAID设备的信息
  • 获取有关组件设备的信息
  • 读取/ proc / mdstat信息
  • 停止数组
  • 启动数组
  • 将备用设备添加到阵列
  • 增加阵列中的活动设备数量
    • 使用RAID 1或10
      • 使用RAID 5或6
        • 使用RAID 0
        • 从阵列中删除设备
        • 删除数组
        • 结论
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档