Linux mdadm命令解析

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种使用模式:

  1. Create:使用空闲的设备创建新的整列,每个设备有元数据块
  2. Assemble:将原来属于一个阵列的每个块设备组装为阵列
  3. Build:创建或组装不需要元数据的阵列,每个设备没有元数据块
  4. Manage:管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘
  5. Misc:报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息
  6. Grow:改变阵列中每一个设备被使用的容量或阵列中的设备的数目
  7. 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

(3)
eedsxbeedsxb
上一篇 2017-08-31
下一篇 2017-09-01

相关推荐

  • CentOS7安装Zabbix3.0版本应用

    一、Zabbix介绍        zabbix 简介   Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利  &n…

    Linux干货 2016-11-03
  • Linux的终端类型

            Linux的终端类型         Linux终端的定义         Linux终端的分类 &nb…

    Linux干货 2016-10-18
  • shell编程基础一(多种方法求值1+2+..+100)

    #SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容。 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件…

    Linux干货 2017-08-26
  • Linux 磁盘、文件系统管理

    Linux 磁盘、文件系统管理                                               &nb…

    Linux干货 2016-09-01
  • rpm包管理、yum仓库、ftp、http服务、编译安装

    一、软件包管理 1.1 软件包管理 API:Application Programming Interface  应用程序开发接口;程序员面对的编程接口 POSIX:portable operating system:可移植操作系统接口 v   程序源代码 –> 预处理 …

    Linux干货 2016-11-27
  • CentOS下获取帮助

    CentOS中获取帮助 在使用和学习CentOS系统时,我们可能会遇上不熟悉的命令,需要获取帮助。在很多情况下,我们无法通过网络获取帮助,这个时候我们就需要自己通过查看系统帮助文档来解决问题。下面就来介绍获取帮助的方法: 1、 获取简单的帮助信息:whatis COMMAND   2、获取比较详细的命令帮助信息:help COMMAND;COMMA…

    2017-07-15