• <acronym id='o7bna'><em id='o7bna'></em><td id='o7bna'><div id='o7bna'></div></td></acronym><address id='o7bna'><big id='o7bna'><big id='o7bna'></big><legend id='o7bna'></legend></big></address>

      <span id='o7bna'></span>

        <ins id='o7bna'></ins><i id='o7bna'><div id='o7bna'><ins id='o7bna'></ins></div></i>
        <i id='o7bna'></i>
          <fieldset id='o7bna'></fieldset>

          <dl id='o7bna'></dl>
        1. <tr id='o7bna'><strong id='o7bna'></strong><small id='o7bna'></small><button id='o7bna'></button><li id='o7bna'><noscript id='o7bna'><big id='o7bna'></big><dt id='o7bna'></dt></noscript></li></tr><ol id='o7bna'><table id='o7bna'><blockquote id='o7bna'><tbody id='o7bna'></tbody></blockquote></table></ol><u id='o7bna'></u><kbd id='o7bna'><kbd id='o7bna'></kbd></kbd>

          <code id='o7bna'><strong id='o7bna'></strong></code>

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

            • 时间:
            • 浏览:14
            • 来源:124软件资讯网

                mdadm 用于建设 ,治理和监控RAID阵列

                用法:

                mdadm --create device options...

                用未使用的装备  ,建立raid选项  ,

                mdadm --assemble device options...

                合并先前建立的raid阵列  。

                mdadm --build device options...

                建立或合并没有元数据的一个raid 。

                mdadm --manage device options...

                对现有阵列举行更改

                mdadm --misc options... devices

                陈诉或修改种种MD相关装备的  。

                mdadm --grow options device

                调整以激活的raid阵列

                mdadm --incremental device

                从一个raid中  ,添加/删除装备

                mdadm --monitor options...

                监视一个或多个raid阵列的转变

                mdadm device options...

                --manage的简写

                mdadm --create 主要参数

                --auto=yes :决议建设后面接的软体磁盘阵列装备  ,亦即/ dev/md0的  ,/ dev/md1上...

                --raid-devices=N :使用几个磁盘 (partition) 作为磁盘阵列的装备

                --spare-devices=N :使用几个磁盘作用磁盘阵列的备用装备

                --level=[015] :设置磁盘阵列的品级  ,常用0,1,5

                mdadm --manage 主要参数

                --add :会将后面的装备加入到这个MD中!

                --remove :会将后面的装备由这个MD中移除

                --fail :会将后面的装备设定成为堕落的状态

                一、在linux系统中现在以MD(Multiple Devices)虚拟块装备的方式实现软件RAID,使用多个底层的块装备虚拟出一个新的虚拟装备,而且使用条带化(stripping)手艺将数据块匀称漫衍到多个磁盘上来提高虚拟装备的读写性能,使用差别的数据冗祭算法来掩护用户数据不会由于某个块装备的故障而完全丢失,而且还能在装备被替换后将丢失的数据恢复到新的装备上.

                现在MD支持linear,multipath,raid0(stripping),raid1(mirror),raid4,raid5,raid6,raid10等差别的冗余级别和级成方式,固然也能支持多个RAID陈列的层叠组成raid1 0,raid5 1等类型的陈列,

                本文主要解说用户层mdadm怎样治理软件RAID及使用中经常遇到的问题及解决措施.现盛行的系统中一样平常已经将MD驱动模块直接编译到内核中或编译为可动态加载的驱动模块,我们可以在机械启动后通过cat /proc/mdstat看内核是否已经加载MD驱动或者cat /proc/devices是否有md块装备,而且可以使用lsmod看MD是否可以模块加载到系统中.

                代码如下:

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

                Personalities :

                unused devices:

                [root@testggv ~]#

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

                1 ramdisk

                9 md

                254 mdp

                [root@testggv ~]#mdadm --version

                [root@testggv ~]# mdadm --version

                mdadm - v2.5.4 - 13 October 2006

                [root@testggv ~]#

                二、mdadm治理软raid陈列

                mdadm法式是一个自力的法式  ,能完成所有的软件raid治理功效  ,主要有7种使用模式:

                Create

                使用空闲的装备建立一个新的阵列  ,每个装备具有元数据块

                Assemble

                将原来属于一个阵列的每个块装备组装为阵列

                Build

                建立或组装不需要元数据的阵列 ,每个装备没有元数据块

                Manage

                治理已经存储阵列中的装备  ,好比增添热备磁盘或者设置某个磁盘失效  ,然后从阵列中删除这个磁盘

                Misc

                陈诉或者修改阵列中相关装备的信息  ,好比查询阵列或者装备的状态信息

                Grow

                改变阵列中每个装备被使用的容量或阵列中的装备的数目

                Monitor

                监控一个或多个阵列 ,上报指定的事务

                若是MD驱动被编译到内核中  ,当内核挪用执行MD驱动时  ,会自动查找分区为FD(linux raid autodetect花样的磁盘  。以是一样平常会使用fdisk工具将HD磁盘或者SD磁盘分区  ,再设置为FD的磁盘  。

                代码如下:

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

                The number of cylinders for this disk is set to 25232.

                There is nothing wrong with that, but this is larger than 1024,

                and could in certain setups cause problems with:

                1) software that runs at boot time (e.g., old versions of LILO)

                2) booting and partitioning software from other OSs

                (e.g., DOS FDISK, OS/2 FDISK)

                Command (m for help): n

                Command action

                e extended

                p primary partition (1-4)

                p

                Partition number (1-4): 1

                First cylinder (1-25232, default 1):

                Using default value 1

                Last cylinder or size or sizeM or sizeK (1-25232, default 25232):

                Using default value 25232

                Command (m for help): t

                Selected partition 1

                Hex code (type L to list codes): fd

                Changed system type of partition 1 to fd (Linux raid autodetect)

                Command (m for help): w

                The partition table has been altered!

                Calling ioctl() to re-read partition table.

                WARNING: Re-reading the partition table failed with error 16: Device or

                busy.

                The kernel still uses the old table.

                The new table will be used at the next reboot.

                Syncing disks.

                [root@testggv ~]#

                若是MD驱动是模块形式加载 ,需要在系统运行时由用户层剧本控制RAID陈列启动运行  ,如在FedoraCore系统中在/etc/rc.d/rc.sysinit文件中有启动软RAID阵列的指令  ,若RAID的设置文件mdadm.conf存在  ,则挪用mdadm检查设置文件里的选项 ,然后启动RAID阵列  。

                代码如下:

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

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

                /sbin/mdadm -A -s

                fi -A:指装载一个已存在的陈列 -s: 指查找mdadm.conf文件中的设置信息 。

                手工制止盘陈:

                代码如下:

                #mdadm -S /dev/md0

                建立新的陈列

                mdadm使用--create(或其缩写-C)参数来建立新的陈列而且将一些主要阵列的标识信息作为元数据可以写在每一个底层装备的指定区间

                --level(或者其缩写-l)表现阵列的RAID级别

                --chunk(或者其缩写-c)表现每个条带单元的巨细  ,以KB为单元  ,默以为64KB  ,条带单元的巨细设置对差别负载下的阵列读写性能有很大影响

                --raid-devices(或者其缩写-n)表现阵列中活跃的装备个数

                --spare-devices(或者其缩写-x)表现阵列中热备盘的个数  ,一旦阵列中的某个磁盘失效 ,MD内核驱动法式自动用将热备磁盘加入到阵列  ,然后重构丢失磁盘上的数据到热备磁盘上  。

                建立一个RAID 0装备:

                代码如下:

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

                建立一个raid 1装备:

                代码如下:

                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

                建立一个RAID 10装备:

                代码如下:

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

                建立一个RAID1 0装备:

                代码如下:

                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@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid10]

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

                3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]

                [===>...........] resync = 15.3% (483072/3145536) finish=0.3min speed=120768K/sec

                unused devices:

                [root@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid10]

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

                3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]

                unused devices:

                使用陈列:

                MD装备可以像通俗块装备那样直接读写  ,也可以做文件系统花样化 。

                代码如下:

                #mke2fs -j /dev/md0

                mkdir -p /mnt/md-test

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

                制止正在运行的陈列:

                当阵列没有文件系统或者其他存储应用以及高级装备使用的话  ,可以使用--stop(或者其缩写-S)制止阵列;若是下令返回装备或者资源忙类型的错误  ,说明/dev/md0正在被上层应用使用 ,暂时不能制止  ,必须要首先制止上层的应用  ,这样也能保证阵列上数据的一致性 。

                代码如下:

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

                mdadm: fail to stop array /dev/md0: Device or resource busy

                [root@fc5 mdadm-2.6.3]# umount /dev/md0

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

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

                代码如下:

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

                mdadm: /dev/md0 has been started with 6 drives and 1 spare.若是有设置文件(/etc/mdadm.conf)可使用下令mdadm -As /dev/md0  。mdadm先检查mdadm.conf中的DEVICE信息  ,然后从每个装备上读取元数据信息  ,并检查是否和ARRAY信息一致 ,若是信息一致则启动阵列  。若是没有设置/etc/mdadm.conf文件 ,而且又不知道阵列由那些磁盘组成 ,则可以使用下令--examine(或者其缩写-E)来检测当前的块装备上是否有阵列的元数据信息  。[root@fc5 mdadm-2.6.3]# ./mdadm -E /dev/sdi

                代码如下:

                mdadm: No md superblock detected on /dev/sdi.

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

                /dev/sdb:

                Magic : a92b4efc

                Version : 00.90.00

                UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a

                Creation Time : Sun Aug 22 17:49:53 1999

                Raid Level : raid10

                Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)

                Array Size : 3145536 (3.00 GiB 3.22 GB)

                Raid Devices : 6

                Total Devices : 7

                Preferred Minor : 0

                Update Time : Sun Aug 22 18:05:56 1999

                State : clean

                Active Devices : 6

                Working Devices : 7

                Failed Devices : 0

                Spare Devices : 1

                Checksum : 2f056516 - correct

                Events : 0.4

                Layout : near=2, far=1

                Chunk Size : 64K

                Number Major Minor RaidDevice State

                this 0 8 16 0 active sync /dev/sdb

                0 0 8 16 0 active sync /dev/sdb

                1 1 8 32 1 active sync /dev/sdc

                2 2 8 48 2 active sync /dev/sdd

                3 3 8 64 3 active sync /dev/sde

                4 4 8 80 4 active sync /dev/sdf

                5 5 8 96 5 active sync /dev/sdg

                6 6 8 112 6 spare /dev/sdh

                从上面下令效果可以找到阵列的唯一标识UUID和阵列包罗的装备名字 ,然后再使用上面的下令来组装阵列  ,也可以使用UUID标识来组装阵列  。没有一致的元数据的信息装备(例如/dev/sda和/dev/sda1等)mdadm法式会自动跳过 。

                代码如下:

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

                /dev/md0 /dev/sd*

                mdadm: looking for devices for /dev/md0

                mdadm: no recogniseable superblock on /dev/sda

                mdadm: /dev/sda has wrong uuid.

                mdadm: no recogniseable superblock on /dev/sda1

                mdadm: /dev/sda1 has wrong uuid.

                mdadm: no RAID superblock on /dev/sdi

                mdadm: /dev/sdi has wrong uuid.

                mdadm: /dev/sdi1 has wrong uuid.

                mdadm: no RAID superblock on /dev/sdj

                mdadm: /dev/sdj has wrong uuid.

                mdadm: /dev/sdj1 has wrong uuid.

                mdadm: no RAID superblock on /dev/sdk

                mdadm: /dev/sdk has wrong uuid.

                mdadm: /dev/sdk1 has wrong uuid.

                mdadm: /dev/sdb is identified as a member of /dev/md0, slot 0.

                mdadm: /dev/sdc is identified as a member of /dev/md0, slot 1.

                mdadm: /dev/sdd is identified as a member of /dev/md0, slot 2.

                mdadm: /dev/sde is identified as a member of /dev/md0, slot 3.

                mdadm: /dev/sdf is identified as a member of /dev/md0, slot 4.

                mdadm: /dev/sdg is identified as a member of /dev/md0, slot 5.

                mdadm: /dev/sdh is identified as a member of /dev/md0, slot 6.

                mdadm: added /dev/sdc to /dev/md0 as 1

                mdadm: added /dev/sdd to /dev/md0 as 2

                mdadm: added /dev/sde to /dev/md0 as 3

                mdadm: added /dev/sdf to /dev/md0 as 4

                mdadm: added /dev/sdg to /dev/md0 as 5

                mdadm: added /dev/sdh to /dev/md0 as 6

                mdadm: added /dev/sdb to /dev/md0 as 0

                mdadm: /dev/md0 has been started with 6 drives and 1 spare.

                设置文件:

                /etc/mdadm.conf作为默认的设置文件  ,主要作用是利便跟踪软RAID的设置  ,尤其是可以设置监视和事务上报选项 。Assemble下令也可以使用--config(或者其缩写-c)来指定设置文件  。我们通常可以如下下令来建#立设置文件

                代码如下:

                #echo DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 > /etc/mdadm.conf

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

                使用设置文件启动阵列时  ,mdadm会查询设置文件中的装备和阵列内容 ,然后启动运行所有能运行RAID阵列  。若是指定阵列的装备名字  ,则只启动对应的阵列  。

                代码如下:

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

                mdadm: /dev/md1 has been started with 3 drives.

                mdadm: /dev/md0 has been started with 6 drives and 1 spare.

                [root@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid0] [raid10]

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

                3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]

                md1 : active raid0 sdi1[0] sdk1[2] sdj1[1]

                7337664 blocks 32k chunks

                unused devices:

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

                mdadm: stopped /dev/md0

                mdadm: stopped /dev/md1

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

                mdadm: /dev/md0 has been started with 6 drives and 1 spare.

                [root@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid0] [raid10]

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

                3145536 blocks 64K chunks 2 near-copies [6/6] [UUUUUU]

                unused devices:

                查询阵列的状态

                我们可以通过cat /proc/mdstat信息检察所有运行的RAID阵列的状态 ,在第一行中首先是MD的装备名  ,active和inactive选项表现阵列是否能读写  ,接着是阵列的RAID级别  ,后面是属于阵列的块装备  ,方括号[]里的数字表现装备在阵列中的序号  ,(S)表现其是热备盘  ,(F)表现这个磁盘是faulty状态  。在第二行中首先是阵列的巨细  ,单元是KB  ,接着是chunk-size的巨细 ,然后是layout类型  ,差别RAID级此外layout类型差别  ,[6/6]和[UUUUUU]表现阵列有6个磁盘而且6个磁盘都是正常运行的  ,而[5/6]和[_UUUUU] 表现阵列有6个磁盘中5个都是正常运行的  ,下划线对应的谁人位置的磁盘是faulty状态的  。

                代码如下:

                [root@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid6] [raid5] [raid4] [raid1]

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

                5242560 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU]

                unused devices:

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

                mdadm: set /dev/sdh faulty in /dev/md0

                mdadm: set /dev/sdb faulty in /dev/md0

                [root@fc5 mdadm-2.6.3]# cat /proc/mdstat

                Personalities : [raid6] [raid5] [raid4] [raid1]

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

                5242560 blocks level 5, 64k chunk, algorithm 2 [6/5] [_UUUUU]

                unused devices:

                我们也可以通过mdadm下令检察指定阵列的简要信息(使用--query或者其缩写-Q)和详细信息(使用--detail或者其缩写-D) 详细信息包罗RAID的版本、建立的时间、RAID级别、阵列容量、可用空间、装备数目、超级块状态、更新时间、UUID信息、各个装备的状态、RAID算法级别类型和结构方式以及块巨细等信息  。装备状态信息分为active, sync, spare, faulty, rebuilding, removing等等  。

                代码如下:

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

                /dev/md0: 2.100GiB raid10 6 devices, 1 spare. Use mdadm --detail for more detail.

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

                /dev/md0:

                Version : 00.90.03

                Creation Time : Sun Aug 22 17:49:53 1999

                Raid Level : raid10

                Array Size : 3145536 (3.00 GiB 3.22 GB)

                Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)

                Raid Devices : 6

                Total Devices : 7

                Preferred Minor : 0

                Persistence : Superblock is persistent

                Update Time : Sun Aug 22 21:55:02 1999

                State : clean

                Active Devices : 6

                Working Devices : 7

                Failed Devices : 0

                Spare Devices : 1

                Layout : near=2, far=1

                Chunk Size : 64K

                UUID : 0cabc5e5:842d4baa:e3f6261b:a17a477a

                Events : 0.122

                Number Major Minor RaidDevice State

                0 8 16 0 active sync /dev/sdb

                1 8 32 1 active sync /dev/sdc

                2 8 48 2 active sync /dev/sdd

                3 8 64 3 active sync /dev/sde

                4 8 80 4 active sync /dev/sdf

                5 8 96 5 active sync /dev/sdg

                6 8 112 - spare /dev/sdh

                治理阵列

                mdadm可以在Manage模式下 ,对运行中的阵列举行添加及删除磁盘 。常用于标识failed磁盘 ,增添spare(热备)磁盘  ,以及从阵列中移走已经失效的磁盘等等  。使用--fail(或者其缩写-f)指定磁盘损坏  。

                代码如下:

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

                mdadm: set /dev/sdb faulty in /dev/md0

                当磁盘已经损坏时  ,使用--remove(或者其缩写--f)参数将这个磁盘从磁盘阵列中移走;但若是装备还正在被阵列使用 ,则不能从阵列中移走 。

                代码如下:

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

                mdadm: hot removed /dev/sdb

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

                mdadm: hot remove failed for /dev/sde: Device or resource busy

                若是阵列带有spare磁盘  ,那么自动将损坏磁盘上的数据重构到新的spare磁盘上;

                代码如下:

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

                mdadm: set /dev/sdb faulty in /dev/md0

                Personalities : [raid0] [raid10]

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

                3145536 blocks 64K chunks 2 near-copies [6/5] [U_UUUU]

                [=======>........] recovery = 35.6% (373888/1048512) finish=0.1min speed=93472K/sec

                unused devices:

                若是阵列没有热备磁盘  ,可以使用--add(或者其缩写-a)参数增添热备磁盘

                代码如下:

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

                mdadm: added /dev/sdh

                监控阵列

                可以使用mdadm对RAID阵列举行监控  ,监控法式准时查询指定的事务是否发生  ,然后凭据设置来妥善处置惩罚 。例如当阵列中的磁盘装备泛起问题的时间  ,可以发送邮件给治理员;或者当磁盘泛起问题的时间由回调法式来举行自动的磁盘替换  ,所有监控事务都可以记载到系统日志中  。现在mdadm支持的事务有RebuildStarted, RebuildNN(NN is 20, 40, 60, or 80), RebuildFinished, Fail,FailSpare,SpareActive,NewArray, DegradedArray, MoveSpare, SparesMissing, TestMessage  。

                若是设置每300秒mdadm监控历程查询MD装备一次  ,当阵列泛起错误  ,会发送邮件给指定的用户  ,执行事务处置惩罚的法式而且记载上报的事务到系统的日志文件  。使用--daemonise参数(或者其缩写-f)使法式连续在后台运行  。若是要发送邮件需要sendmail法式运行  ,当邮件地址被设置为外网地址应先测试是否能发送出去  。

                代码如下:

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

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