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 16:20
下一篇 2017-09-01 14:12

相关推荐

  • proxy_pass转发路径

    一、引言 在nginx中配置proxy_pass时,proxy_pass后面的路径最后面加“/”和不加“/”会有所区别。加“/”时,nginx不会代理location部分,不加“/”时,nginx会同时代理location部分。下面通过实验来证明。 二、实验 实验环境简要说明:     node1为httpd服务器(1…

    Linux干货 2017-01-12
  • Linux磁盘和文件系统管理进阶(swap、磁盘配额、RAID、LVM、btrfs)

    概述:     上篇已经介绍了一些磁盘和文件系统管理的基础概念,对磁盘的硬件构造,文件系统的基础概念部分有了一个大致的了解。本篇就分享一些关于磁盘和文件系统管理的一些高级应用,具体包含:     1、swap交换分区的管理     2、挂载…

    Linux干货 2016-08-30
  • 第10周作业(上)

    第10周作业 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)。CentOS系统启动详细的过程如下(以CentOS7为例): 加电自检(POST)按下电源开关,BIOS系统随即开始加电自检,检查CPU、内存、主板及各接口、硬盘、键盘、光驱等,检测它们的好坏。 读取启动顺序检查完成后,BIOS会根据预先设定好的启动顺序去挨个寻找可引导…

    Linux干货 2017-01-03
  • 我在马哥的学习生涯开始

    我的人生工作目标:年薪百万不是梦!

    Linux干货 2016-10-28
  • 磁盘管理和文件系统

    磁盘结构 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 一切皆文件:open(), read(), write(), close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位“字符”,键盘 设备号码: 主设备号:major number, 标识设备类型 次设备号:minor number, 标…

    Linux干货 2017-04-23