当前位置: 首页 > 工具软件 > mdadm > 使用案例 >

linux显示mdadm未找到命令,Linux mdadm命令解析

薛宜
2023-12-01

mdadm命令解析

一,在Linux系统中目前MD(Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的数据恢复到新的设备上。

目前MD支持 Linear,Mulyipath,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是否可以模块加载到系统中。

# cat /proc/mdstat

Personalities :

unused devices:

# cat /proc/devices | grep md

1 ramdisk

9 md

254 mdp

# mdadm –version

mdadm – v3.3.4 – 3rd August 2015

二,mdadm管理软RAID陈列

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

Create:使用空闲的设备创建新的整列,每个设备有元数据块

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

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

Manage:管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘

Misc:报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息

Grow:改变阵列中每一个设备被使用的容量或阵列中的设备的数目

Monitor:监控一个或多个阵列,上报指定的事件

如果MD驱动被编译到内核中,当内核调用执行MD驱动驱动时,会自动查找分区为FD(linux raid autodetect)格式的磁盘。所以一般关于会使用fdisk工具将HD磁盘或者SD磁盘分区,在设置为FD磁盘。

# 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.

如果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

-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

创建一个RAID 5设备:

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 -l 1 -n2 /dev/sdb dev/sdc

mdadm -C /dev/md1 -l 1 -n2 /dev/sdd dev/sde

mdadm -C /dev/md2 -l 1 -n2 /dev/sdf  dev/sdg

mdadm -C /dev/md3 -l 0 -n3 /dev/md0 /dev/md1 /dev/md2

初始化的时间长短和磁盘阵列自身性能以及读写的应用负载相关,使用cat /proc/mdstat信息查询RAID阵列当前重构的速度和语气的完成时间。

# 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:

# 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正在被上层应用使用,暂时不能停止,必须要首先停止上层的应用,这样也能保证阵列上数据的一致性。

# ./mdadm –stop /dev/md0

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

# umount /dev/md0

#./mdadm –stop /dev/md0

mdadm: stopped /dev/md0

暂时和大家分享到这里,有不足的地方请谅解。

原创文章,作者:eedsxb,如若转载,请注明出处:http://www.178linux.com/85697

 类似资料: