Linux中使用mdadm命令来操作RAID的基本教程

mdadm用于创建、管理和监控RAID阵列

用法:

mdadm--createdeviceoptions...

使用未使用的设备来创建raid选项,

mdadm--assembledeviceoptions...

合并之前创建的raid阵列。

mdadm--builddeviceoptions...

创建或合并没有元数据的raid。

mdadm--ownedeviceoptions...

对现有阵列进行更改

mdadm--misscopes...devices

报告或者改装各种MD相关的设备。

mdadm--growoptionsdevice

调整激活raid阵列

mdadm--incrementaldevice

在raid中添加/删除设备

mdadm--incrementaldevice

从raid中添加/删除设备

mdadm--monitoroptions...

监视一个或多个数组中的更改raid

mdadmdeviceoptions...

简写--manage

mdadm--create主要参数

--auto=yes:决定创建下一个磁盘阵列软件设备,即/dev/md0、/dev/md1...

--raid-devices=N:使用多个磁盘(分区)作为磁盘阵列设备

--raid-devices=N:使用多个磁盘(分区)作为磁盘阵列设备

--spare-devices=N:使用多个磁盘作为磁盘阵列的备用设备

--level=[015]:设置磁盘阵列级别,常用的是0、1.5

mdadm--管理主要参数

--add:将添加以下设备到此MD中!

--remove:将从本MD中删除下一个设备MD

--fail:将下一个设备设置为故障状态

1。
MD(MultipleDevices)虚拟块目前在Linux系统中使用。
软件RAID以设备的形式实现,利用多个底层块设备虚拟出一个新的虚拟设备,利用条带化技术将数据块均匀分布在多个磁盘上,以提高虚拟设备的读写性能。
多种数据冗余算法可保护用户数据不因块设备故障而完全损坏。
所有数据丢失,更换设备后可在新设备上恢复。

MD目前支持线性、多路径、raid0(剥离)、raid1(镜像)、raid4、raid5、raid6、raid10几种冗余级别和分类方法,当然还可以支持级联多个RAID阵列,形成raid10、raid51等类型的阵列。

本文主要讲解mdadm用户层如何管理软件RAID及其使用常见的系统中通常包含常见问题和解决方案。
驱动模块直接编译到内核中或者编译成可动态加载的驱动模块。
我们可以在机器启动后使用cat/proc/mdstat查看内核是否加载了MD驱动或者cat/proc/devices是否有md。
块设备,可以使用lsmod查看MD是否可以作为模块加载到系统中。

代码如下:

[root@testggv~]#cat/proc/mdstat

个性:

未使用的设备:

[root@testggv~]#

[root@testggv~]#cat/proc/devices|grepmd

1ramdisk

9md

254mdp

[root@testggv~]#mdadm--版本

[root@testggv~]#mdadm--版本

mdadm-v2.5.4-13October2006

[root@testggv~]#

2dadm管理软件raid显示

mdadm程序是一个独立的程序,可以完成所有软件raid管理功能。
它有7种主要使用模式:

创建

使用空闲设备创建新数组,每个设备都有元数据块

组装

将原本属于一个的每个块设备组装成一个数组数组

构建

创建或组装一个不需要每个设备元数据的数组没有元数据块

管理

管理已存在的设备在存储阵列中,例如添加热备盘或将磁盘设置为故障,然后从阵列中删除该磁盘

其他

报告或更改阵列中相关设备的信息,例如通过查询阵列状态或设备信息

增加

更改阵列中每个设备使用的容量或阵列数量

监控中的设备数量

<监控一个或多个阵列并报告指定事件

如果MD驱动程序被编译到内核中,当内核调用运行MD驱动程序时,它会自动搜索带有FD(linuxraid自动检测格式)的磁盘分区。
因此,一般使用fdisk工具对HD磁盘或SD磁盘进行分区,然后将其设置为FD磁盘。

代码如下:

[root@testggv~]#fdisk/dev/hdc

ThenumberofColumnsforthisdiskissetto25232。

那里就有这没有什么问题,但是这个大于1024,

并且某些设置可能会导致以下问题:

1)启动时运行的软件(例如旧版本的LILO)

2)从其他操作系统启动和适配软件

(例如DOSFDISK、OS/2FDISK)

Command(mforhelp):n

命令

扩展

第一个分区(1-4)

p

分区号(1-4)):1

第一圆柱(1-25232,default1):

使用defaultvalue1

最后一个圆柱rsizeorsizeMorsisizeK(1-25232,default25232):

使用defaultvalue25232

命令(mforhelp):t

选定分区1

十六进制代码(typeLtolistcodes):fd

更改分区1tofd的系统类型(LinuxraidautoDetect)

命令(mforhelp):w

分区表已更改!

调用ioctl()读取分区表。

警告:重新读取分区表失败,错误16:设备

忙。

内核仍在使用旧表。

下次启动时将使用新表。

磁盘同步。

[root@testggv~]#

如果MD驱动是一个模块正式加载需要一个用户级脚本来控制系统启动时RAID阵列的启动正在运行。
例如,在FedoraCore系统中,/etc/rc.d/rc中有一条启动软RAID阵列的指令。
.sysinit文件如果mdadm.confRAID配置文件存在,请调用mdadm验证配置文件中的选项,然后启动RAID阵列。

代码如下:

echo"raidaautorun/dev/md0"|nash--quiet

if[-f/etc/mdadm.conf];so

/sbin/mdadm-A-s

fi-A:指加载现有的显示-s:指在mdadm文件中查找配置信息。

手动停止显示:

代码如下:

#mdadm-S/dev/md0

新建一个查看

mdadm使用--create参数(或其缩写-C)创建一个新数组,并将一些重要的数组标识信息作为元数据写入到每个设备底层的指定范围

--级别(或其缩写-l)表示阵列的RAID级别

--chunk(或其缩写-c)表示每个条带单元的大小,单位为KB。
默认值为64KB。
条带驱动器大小的配置对阵列在不同负载下的读写性能影响较大。

--raid-devices(或其缩写-n)表示阵列中活动设备的数量数组

--spare-devices(或其缩写-x)表示阵列中热备盘的数量,当阵列中的某个盘出现故障时,MD内核驱动会自动添加热备盘阵列。
阵列,然后将丢失磁盘上的数据重建到热备盘上。

创建RAID0设备:

代码如下:

mdadm--create/dev/md0--level=0--chunk=32--raid-devices=3/dev/sdb1/dev/sdc1/dev/sdd1

创建raid1设备:

代码为以下:

mdadm--create/dev/md0--level=1--chunk=128--raid-devices=2--spare-devices=1/dev/sdb1/dev/sdc1/dev/sdd1

创建RAID5设备:

代码为以下:

mdadm--create/dev/md0--level=5--raid-devices=5/dev/sd[c-g]1--spare-devices=1/dev/sdb1

创建RAID10设备:

代码为以下:

mdadm-C/dev/md0-l10-n6/dev/sd[b-g]-x1/dev/sdh

创建RAID10设备:

代码如下:

mdadm-C/dev/md0-l1-n2/dev/sdb/dev/sdc

mdadm-C/dev/md1-l1-n2/dev/sdd/dev/sde

mdadm-C/dev/md2-l1-n2/dev/sdf/dev/sdg

mdadm-C/dev/md3-l0-n3/dev/md0/dev/md1/dev/md2

初始化时间的长短与磁盘阵列本身的性能以及应用程序的读写负载有关。
使用cat/proc/mdstat信息查询当前重建率和RAID阵列完成时间预期。

代码如下:

cat/proc/mdstat

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid10]

md0:activeraid10sdh[6](S)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]sdb[0]

3145536blocks64Kchunks2almost-copies[6/6][UUUUUU]

[===...........]重新同步=15.3%(483072/3145536)完成=0.3分钟速度=120768K/秒

未使用的设备:

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid10]

md0:activeraid10sdh[6](S)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]sdb[0]

3145536blocks64Kchunks2almost-copies[6/6][UUUUUU]

未使用的设备:

使用显示:

MD设备可以像普通块设备一样直接读写,也可以通过文件系统进行格式化。

代码如下:

#mke2fs-j/dev/md0

mkdir-p/mnt/md-test

#mount/dev/md0/mnt/md-test

停止正在运行的挂载:

当阵列没有文件系统或其他存储应用程序且使用高级设备时,你可以使用--stop(或其缩写-S)停止阵列;如果该命令返回设备或资源繁忙错误,则说明/dev/md0正在被上层应用程序使用,暂时无法停止。
必须先逮捕她。
更高级别的应用程序还可以确保阵列上的数据一致性。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm--stop/dev/md0

mdadm:failtostoparray/dev/md0:设备或资源繁忙

[root@fc5mdadm-2.6.3]#umount/dev/md0

[root@fc5mdadm-2.6.3]#./mdadm--stop/dev/md0

mdadm:stopped/dev/md02.3已assemble创建的数组模式-assemble或其缩写(-A)主要检查底层设备的元数据信息,然后组装成活动数组。
如果我们已经知道阵列由哪些设备组成,我们可以指定使用哪些设备来启动阵列。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm-A/dev/md0/dev/sd[b-h]

mdadm:/dev/md0hasbeenstartedwith6drivesand1spare如果有配置文件(/etc/mdadm.conf),可以使用该命令mdadm-As/dev/md0。
mdadm首先检查mdadm.conf中的DEVICE信息,然后读取每个设备的元数据信息并检查与ARRAY信息是否一致。
如果信息一致,则启动阵列。
如果/etc/mdadm.conf文件没有配置,并且不知道阵列由哪些磁盘组成,可以使用--examine命令(或其缩写-E)来检测是否有有关的元数据信息当前锁定设备磁盘上的阵列。
[root@fc5mdadm-2.6.3]#./mdadm-E/dev/sdi

代码如下:

mdadm:NomdsuperblockDetectedon/dev/sdi。

[root@fc5mdadm-2.6.3]#./mdadm-E/dev/sdb

/dev/sdb:

Magic:a92b4efc

版本:00.90.00

UUID:0cabc5e5:842d4baa:e3f6261b:a17a477a

创建时间:SunAug2217:49:531999

RaidLevel:raid10

UsedDevSize:1048512(1024.11MiB1073.68MB)

ArraySize:3145536(3.00GiB3.22G)B)

RaidDevices:6

TotalDevices:7

PreferredMinor:0

UpdateTime:SunAug2218:05:561999

状态:干净

ActiveDevices:6

工作设备:7

失败设备:0

备用设备:1

校验和:2f056516-正确

事件:0.4

布局:near=2,far=1

块大小:64K

NumberMajorMinorRaidDeviceState

this08160activesync/dev/sdb

008160activesync/dev/sdb

118321activesync/dev/sdc

228482activesync/dev/sdd

338643activesync/dev/sde

448804activesync/开发人员df

558965activesync/dev/sdg

6681126spare/dev/sdh

从上面命令的结果中,可以找到数组的唯一标识符UUID以及数组中包含的设备的名称。
然后使用前面的命令来组装数组,或者使用UUID来组装数组。
不具有一致元数据的信息设备(例如/dev/sda和/dev/sda1等)将被mdadm程序自动忽略。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm-Av--uuid=0cabc5e5:842d4baa:e3f6261b:a17a477a

/dev/md0/dev/sd*

mdadm:lookingfordevicesf或/dev/md0

mdadm:norecogniseablesuperblockon/dev/sda

mdadm:/dev/sdahaswronguuid。

mdadm:norecogniseablesuperblockon/dev/sda1

mdadm:/dev/sda1haswronguuid。

mdadm:noRAIDsuperblockon/dev/sdi

mdadm:/dev/sdihaswronguuid。

mdadm:/dev/sdi1haswronguuid。

爸爸m:noRAIDsuperblockon/dev/sdj

mdadm:/dev/sdjhaswronguuid。

mdadm:/dev/sdj1haswronguuid。

mdadm:noRAIDsuperblockon/dev/sdk

老妈:/dev/sdkhaswronguuid。

mdadm:/dev/sdk1haswronguuid。

mdadm:/dev/sdbisidentifiedasamemberof/dev/md0,slot0。

mdadm:/开发/sdciidentifedasamemberof/dev/md0,slot1。

mdadm:/dev/sddisidentifiedasamemberof/dev/md0,slot2。

mdadm:/dev/sdeisidentifiedasamemberof/dev/md0,slot3。

mdadm:/dev/sdeisidentifiedasamemberof/dev/md0,slot3。

mdadm:/dev/sdeisidentifiedasamemberof/dev/md0,slot3。

mdadm:/dev/sdfisidentifiedasamemberof/dev/md0,slot4。

mdadm:/dev/sdgisidentifiedasamemberof/dev/md0,slot5。

mdadm:/dev/sdhi标识符dasamemberof/dev/md0,slot6。

mdadm:已添加/dev/sdcto/dev/md0as1

mdadm:已添加/dev/sddto/dev/md0as2

mdadm:已添加/dev/sdeto/dev/md0as3

mdadm:已添加/dev/sdfto/dev/md0as4

mdadm:已添加/dev/sdgto/dev/md0as5

mdadm:已添加/dev/sdgto/dev/md0as5

mdadm:已添加/dev/sdhto/dev/md0as6

mdadm:已添加/dev/sdbto/dev/md0as0

mdadm:/dev/md0hasbeenstartedwith6drivesand1spare。

配置文件:

/etc/mdadm.conf是默认配置文件,其主要功能是方便跟踪您的软件RAID配置,尤其是配置备份选项的能力事件监控和报告。
Assemble命令还可以使用--config(或其缩写-c)来指定配置文件。
通常我们可以使用以下命令创建配置文件

代码如下:

#echoDEVICE/dev/sdc1/dev/sdb1/dev/sdd1/etc/mdadm。
conf

#mdadm--detail--scan/etc/mdadm.conf

使用配置文件时启动阵列时,mdadm将查询配置文件中的设备和阵列内容,然后启动并运行尽可能多的可运行的RAID阵列。
如果指定阵列的设备名称,则仅启动相应的阵列。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm-As

mdadm:/dev/md1hasbeenstartedwith3drives.

mdadm:/dev/md0已启动with6drivesand1spare。

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid0][raid10]

md0:activeraid10sdb[0]SDH[6](S)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]

3145536blocks64Kchunks2near-copys[6/6][UUUUUU]

md1:activeraid0sdi1[0]sdk1[2]sdj1[1]

7337664blocks32kchunk

未使用的设备:

[root@fc5mdadm-2.6.3]#./mdadm-S/dev/md0/dev/md1

mdadm:已停止/dev/md0

mdadm:stopped/dev/md1

[root@fc5mdadm-2.6.3]#./mdadm-As/dev/md0

mdadm:/dev/md0启动时有6个驱动器和1个备用驱动器。

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid0][raid10]

md0:activeraid10sdb[0]sdh[6](S)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]

3145536blocks64Kchunks2near-copys[6/6][UUUUUU]

未使用的设备:

查询阵列状态

unuseddevices:

查询数组的状态

我们可以通过信息查看cat/proc/mdstat所有正在运行的RAID阵列的状态第一行,第一个是MD的设备名称。
active和inactive选项表示阵列是否可以读写,后面是阵列的RAID级别,后面是属于该阵列的设备块,方括号[]里面的数字表示该设备在阵列中的序号,(S)表示为热备盘,(F)表示该盘处于坏状态。
第二行,首先是数组大小,单位是KB,然后是块大小,然后是布局类型。
不同RAID级别的布局类型不同[6/6]。
[UUUUUU]表示阵列有6块磁盘,且6块磁盘均正常工作,而[5/6]和[_UUUUU]表示阵列中6块磁盘中的5块磁盘工作正常且对应位置的磁盘下划线表示它处于故障状态。

代码如下:

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid6][raid5][突袭4][raid1]

md0:activeraid5sdh[6](S)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]sdb[0]

5242560blockslevel5,64kchunk,算法2[6/6][UUUUUU]

非设备使用:

[root@fc5mdadm-2.6.3]#./mdadm/dev/md0-f/dev/sdh/dev/sdb

mdadm:set/dev/sdhfaultyin/dev/md0

mdadm:set/dev/sdbfaultyin/dev/md0

[root@fc5mdadm-2.6.3]#cat/proc/mdstat

个性:[raid6][raid5][raid4][raid1]

md0:activeraid5sdh[6](F)sdg[5]sdf[4]sde[3]sdd[2]sdc[1]sdb[7](F)

5242560blockslevel5,64kchunk,算法2[6/5][_UUUUU]

unuseddevices:

我们还可以通过以下方式显示指定数组的简短信息mdadm命令(使用--query或其缩写-Q)和详细信息(使用--detail或其缩写-D)详细信息包括RAID版本、创建时间、RAID级别、阵列容量、可用空间、设备数量、超级块状态、更新时间、UUID信息、每个设备的状态、RAID算法级别类型以及布局模式和块大小等信息。
设备状态信息分为活动、同步、备用、缺陷、重建、删除等。

代码如下:

root@fc5mdadm-2.6.3]#./mdadm--query/dev/md0

/dev/md0:2.100GiBraid106个设备,1个备用。
使用mdadm--detailformoredetail。

[root@fc5mdadm-2.6.3]#./mdadm--detail/dev/md0

/dev/md0:

版本:00.90.03

创建时间:SunAug2217:49:531999

RaidLevel:raid10

ArraySize:3145536(3.00GiB3.22GB)

UsedDevSize:1048512(1024.11MiB1073.68MB)

RaidDevices:6

TotalDevices:7

PreferredMinor:0

持久性:Superblockispersistent

更新时间:SunAug2221:55:021999

状态:干净

活动设备:6

工作设备:7

不工作设备:0

备用设备:1

布局:近=2,远=1

块大小:64K

UUID:0cabc5e5:842d4baa:e3f6261b:a17a477a

事件:0.122

NumberMajorMinorRaidDeviceState

08160activesync/dev/sdb

18321activesync/dev/sdc

28482activesync/dev/sdd

38643activesync/dev/sde

48804activesync/dev/sdf

58965activesync/dev/sdg

68112-spare/dev/sdh

管理阵列

mdadm可以向在管理模式下运行的阵列添加和删除磁盘。
常用于识别故障磁盘、添加热备件、从阵列中移除故障磁盘等。
使用--fail(或其缩写-f)指定磁盘故障。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm/dev/md0--fail/dev/sdb

mdadm:set/dev/sdbfaultyin/dev/md0

当磁盘损坏时,使用--remove参数(或其缩写--f)删除磁盘从磁盘阵列中删除,但如果该设备仍在由阵列使用,则无法从阵列中删除。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm/dev/md0--remove/dev/sdb

mdadm:热删除/dev/sdb

[root@fc5mdadm-2.6.3]#./mdadm/dev/md0--remove/dev/sde

mdadm:hotremovefailedfor/dev/sde:Devicefailedurcebusy

如果阵列有备用盘,损坏盘上的数据会自动在新的备用盘上重建;

代码为以下:

[root@fc5mdadm-2.6.3]#./mdadm-f/dev/md0/dev/sdb;cat/proc/mdstat

mdadm:set/dev/sdbfaultyin/dev/md0

个性:[raid0][raid10]

md0:activeraid10sdh[6]sdb[7](F)sdc[0]sdg[5]sdf[4]sde[3]sdd[2]

3145536blocks64Kchunks2near-copys[6/5][U_UUUU]

[=======.....]恢复=35.6%(373888/1048512)完成=0.1minspeed=93472K/sec

未使用的设备:

如果阵列没有热备盘,可以使用--add参数(或其缩写-a)添加热备盘

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm/dev/md0--add/dev/sdh

mdadm:added/dev/sdh

监控阵列

可以使用mdadm来监控RAID阵列,监控程序会定期查询是否有事件发生指定,然后根据您的配置进行适当处理。
例如,当阵列中的磁盘设备出现问题时,可以向管理员发送电子邮件,或者当磁盘出现问题时,回调程序可以自动更换磁盘,并且所有监控事件都可以注册在系统注册表中。
mdadm目前支持的事件包括RebuildStarted、RebuildNN(NNis20、40、60或80)、RebuildFinish、Fail、FailSpare、SpareActive、NewArray、DegradedArray、MoveSpare、SparesMissing和TestMessage。

如果配置mdadm监控进程每300秒轮询一次MD设备,当阵列发生错误时,将向指定用户发送电子邮件,执行事件处理器并报告事件将记录在系统日志文件中。
使用--daemonise参数(或其缩写-f)使程序保持在后台运行。
如果你想发送电子邮件,你需要运行sendmail程序。
当电子邮件地址配置为外网地址,首先检查是否可以发送。

代码如下:

[root@fc5mdadm-2.6.3]#./mdadm--monitor--mail=root@localhost--program=/root/md.sh

--syslog--delay=300/dev/md0--daemonise

使用mdadm管理RAID阵列

mdadm是一个用于在Linux中管理软件RAID阵列的命令行工具。
只需几个关键控件,您就可以轻松创建、管理和恢复您的服装。
创建自定义RAID时,请使用mdadm-create命令并提供计算机名称、-homehost、-metadata、-level和-raid-machine参数。
-homehost参数用于定义RAID属性,-metadata参数格式化并控制元数据存储位置,field参数确定数据如何在设备之间分布,-raid-device参数指定设备的类型。
他们创造了一种旨在攻击的机器。
使用--level=1和--metadata=1.0创建RAID1阵列,即使新系统不支持mdadm阵列,该阵列也可以访问底层设备。
此功能在灾难恢复场景中以及在未启用mdadm驱动程序时需要对底层设备进行只读访问时特别有用,例如在启动mdadm引导加载程序之前读取UEFI固件时。
当设备成员丢失或损坏,攻击部署失败时,可以使用mdadm-collect命令强制部署。
进行阵列操作时,避免直接写入RAID1设备,防止因不同步而导致文件系统损坏。
如果需要强制阵列重新同步,则必须从修改的设备中删除mdadm元数据,然后将其发送回阵列。
要在系统启动时自动激活RAID阵列,可以在/etc/mdadm.conf文件中创建配置。
有关新的详细信息,请参阅手册页。
下面的文章将介绍如何将单盘Linux安装升级为镜像磁盘系统,以便在硬盘出现故障时系统仍然可以运行。