mdadm使用详解及RAID 5简单分析

简介:     mdadm使用详解及RAID 5简单分析 收藏 新一篇: 多收了三五斗(在日it民工版) | 旧一篇: 双机(多机)自动互备份方案---jinjidong function StorePage(){d=document;t=d.
 

转载  mdadm使用详解及RAID 5简单分析 收藏

新一篇: 多收了三五斗(在日it民工版) | 旧一篇: 双机(多机)自动互备份方案---jinjidong

原贴:http://blog.csdn.net/sense5/archive/2007/10/17/1828868.aspx

 mdadm使用详解及RAID 5简单分析    文章指数:0   CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。 文章指数:0   CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

本文是 用raidtools创建Linux Soft RAID的续篇,关于如何使用raidtools在Linux下创建软RAID请参考原文

关于RAID原理、常用的RAID级别和参数以及各种RAID之间的对比可参考以下链接:

RAID Calculator ( en | ch ) & RAID Summary Comparison ( en | ch ) beta @ my googlepage



什么是mdadm?

mdadm是 multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,作者是 Neil Brown


为什么选择mdadm?


我们知道 raidtools是Linux下一款经典的用于管理软件 RAID 的工具,但是因为配置 /etc/raidtab比较繁琐,而且其功能有限,所以现在越来越多的人选择mdadm。

mdadm 和 raidtools 主要有以下几点不同

  • mdadm能够诊断、监控和收集详细的阵列信息
  • mdadm是一个单独集成化的程序而不是一些分散程序的集合,因此对不同RAID管理命令有共通的语法
  • mdadm能够执行几乎所有的功能而不需要配置文件(也没有默认的配置文件)
  • 当然,如果需要一个配置文件,mdadm将帮助管理它的内容


准备工作

QUOTE:
首先我们在虚拟机中添加四块SCSI硬盘(我们仍然直接使用只有一个分区的硬盘( sdb、sdc、sdd、sde)来作为RAID设备的成员,每个盘大小为 8G)并分区格式化,具体步骤可参考 用raidtools创建Linux Soft RAID,这里从略


下载、安装mdadm

你可以到mdadm的 官方网站( http://www.cse.unsw.edu.au/~neilb/source/mdadm/)下载最新的压缩包。目前最新的版本是 mdadm-2.6.2( LATEST.tgz or mdadm-2.6.2.tgz)。 推荐下载tgz格式的压缩包自行编译然后安装mdadm和它的文档、手册和示例文件。

安装步骤如下:

login as: eric4ever
eric4ever@192.168.254.30's password:
Last login: Thu May 24 10:59:06 2007 from 192.168.254.1
[root@localhost eric4ever]# ls -lh
total 208K
-rw-r--r--    1 root     root         201K May 24 11:01 LATEST.tgz
[root@localhost eric4ever]# tar zxvf LATEST.tgz
mdadm-2.6.2/
mdadm-2.6.2/mdadm.conf-example
mdadm-2.6.2/misc/
mdadm-2.6.2/misc/syslog-events
mdadm-2.6.2/md_u.h
mdadm-2.6.2/TODO
mdadm-2.6.2/ANNOUNCE-2.0
mdadm-2.6.2/kernel-patch-2.6.18
mdadm-2.6.2/Query.c
mdadm-2.6.2/ReadMe.c
mdadm-2.6.2/super0.c
mdadm-2.6.2/SHA1.c
mdadm-2.6.2/ANNOUNCE-2.6
mdadm-2.6.2/ANNOUNCE-2.6.1
mdadm-2.6.2/Monitor.c
mdadm-2.6.2/md_p.h
mdadm-2.6.2/mdassemble.c
mdadm-2.6.2/mdadm.h
mdadm-2.6.2/mdadm.spec
mdadm-2.6.2/mdadm.c
mdadm-2.6.2/Assemble.c
mdadm-2.6.2/Kill.c
mdadm-2.6.2/ANNOUNCE-2.1
mdadm-2.6.2/pwgr.c
mdadm-2.6.2/Incremental.c
mdadm-2.6.2/mapfile.c
mdadm-2.6.2/Grow.c
mdadm-2.6.2/tests/
mdadm-2.6.2/tests/00raid4
mdadm-2.6.2/tests/05r6-bitmapfile
mdadm-2.6.2/tests/02r6grow
mdadm-2.6.2/tests/03r5assem
mdadm-2.6.2/tests/07testreshape5
mdadm-2.6.2/tests/05r1-internalbitmap-v1c
mdadm-2.6.2/tests/02r5grow
mdadm-2.6.2/tests/05r1-re-add
mdadm-2.6.2/tests/00raid6
mdadm-2.6.2/tests/01r5fail
mdadm-2.6.2/tests/06update-uuid
mdadm-2.6.2/tests/05r1-bitmapfile
mdadm-2.6.2/tests/02r1grow
mdadm-2.6.2/tests/05r1-n3-bitmapfile
mdadm-2.6.2/tests/06wrmostly
mdadm-2.6.2/tests/05r1-re-add-nosuper
mdadm-2.6.2/tests/00raid5
mdadm-2.6.2/tests/03r5assemV1
mdadm-2.6.2/tests/00multipath
mdadm-2.6.2/tests/05r1-internalbitmap-v1b
mdadm-2.6.2/tests/06name
mdadm-2.6.2/tests/05r1-grow-internal-1
mdadm-2.6.2/tests/01r1fail
mdadm-2.6.2/tests/00raid0
mdadm-2.6.2/tests/05r1-grow-external
mdadm-2.6.2/tests/06r5swap
mdadm-2.6.2/tests/07autodetect
mdadm-2.6.2/tests/05r1-internalbitmap
mdadm-2.6.2/tests/02lineargrow
mdadm-2.6.2/tests/00raid1
mdadm-2.6.2/tests/testdev
mdadm-2.6.2/tests/05r5-internalbitmap
mdadm-2.6.2/tests/00raid10
mdadm-2.6.2/tests/ToTest
mdadm-2.6.2/tests/05r5-bitmapfile
mdadm-2.6.2/tests/04r0update
mdadm-2.6.2/tests/02r1add
mdadm-2.6.2/tests/03r0assem
mdadm-2.6.2/tests/check
mdadm-2.6.2/tests/06sysfs
mdadm-2.6.2/tests/05r1-grow-internal
mdadm-2.6.2/tests/04r1update
mdadm-2.6.2/tests/00linear
mdadm-2.6.2/tests/05r1-internalbitmap-v1a
mdadm-2.6.2/mdassemble.8
mdadm-2.6.2/restripe.c
mdadm-2.6.2/Manage.c
mdadm-2.6.2/md.4
mdadm-2.6.2/ANNOUNCE-2.5
mdadm-2.6.2/ChangeLog
mdadm-2.6.2/Examine.c
mdadm-2.6.2/ANNOUNCE-2.5.1
mdadm-2.6.2/sha1.h
mdadm-2.6.2/inventory
mdadm-2.6.2/ANNOUNCE-2.3
mdadm-2.6.2/sha1.c
mdadm-2.6.2/raid5extend.c
mdadm-2.6.2/bitmap.c
mdadm-2.6.2/ANNOUNCE-2.6.2
mdadm-2.6.2/ANNOUNCE-2.5.3
mdadm-2.6.2/dlink.c
mdadm-2.6.2/md5.h
mdadm-2.6.2/config.c
mdadm-2.6.2/mdadm.conf.5
mdadm-2.6.2/mkinitramfs
mdadm-2.6.2/swap_super.c
mdadm-2.6.2/bitmap.h
mdadm-2.6.2/test
mdadm-2.6.2/mdopen.c
mdadm-2.6.2/ANNOUNCE-2.5.5
mdadm-2.6.2/Create.c
mdadm-2.6.2/kernel-patch-2.6.19
mdadm-2.6.2/mdadm.8
mdadm-2.6.2/ANNOUNCE-2.2
mdadm-2.6.2/ANNOUNCE-2.5.4
mdadm-2.6.2/COPYING
mdadm-2.6.2/sysfs.c
mdadm-2.6.2/super1.c
mdadm-2.6.2/Makefile
mdadm-2.6.2/util.c
mdadm-2.6.2/INSTALL
mdadm-2.6.2/mdstat.c
mdadm-2.6.2/ANNOUNCE-2.4.1
mdadm-2.6.2/dlink.h
mdadm-2.6.2/ANNOUNCE-2.5.6
mdadm-2.6.2/ANNOUNCE-2.3.1
mdadm-2.6.2/makedist
mdadm-2.6.2/kernel-patch-2.6.18.6
mdadm-2.6.2/ANNOUNCE-2.5.2
mdadm-2.6.2/ANNOUNCE-2.4-pre1
mdadm-2.6.2/Detail.c
mdadm-2.6.2/README.initramfs
mdadm-2.6.2/ANNOUNCE-2.4
mdadm-2.6.2/Build.c
[root@localhost eric4ever]# ls -lh
total 212K
-rw-r--r--    1 root     root         201K May 24 11:01 LATEST.tgz
drwxr-xr-x    4 1000     1000         4.0K May 21 12:25 mdadm-2.6.2

[root@localhost eric4ever]# cd mdadm-2.6.2/

[root@localhost mdadm-2.6.2]# make install

gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""/usr/sbin/sendmail -t"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o mdadm.o mdadm.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o config.o config.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o mdstat.o mdstat.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o ReadMe.o ReadMe.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o util.o util.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Manage.o Manage.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Assemble.o Assemble.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Build.o Build.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Create.o Create.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Detail.o Detail.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Examine.o Examine.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Grow.o Grow.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Monitor.o Monitor.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o dlink.o dlink.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Kill.o Kill.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Query.o Query.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o Incremental.o Incremental.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o mdopen.o mdopen.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o super0.o super0.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o super1.o super1.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o bitmap.o bitmap.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o restripe.o restripe.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -c -o sysfs.o sysfs.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t
"\" -DCONFFILE=\"/etc/mdadm.conf\" -DCONFFILE2=\"/etc/mdadm/mdadm.conf\" -DHAVE_STDINT_H -o sha1.o -c sha1.c
gcc -Wall -Werror -Wstrict-prototypes -ggdb -DSendmail=\""
/usr/sbin/sendmail -t

/usr/bin/install -D -m 644 mdadm.8 /usr/share/man/man8/mdadm.8
/usr/bin/install -D -m 644 md.4 /usr/share/man/man4/md.4
/usr/bin/install -D -m 644 mdadm.conf.5 /usr/share/man/man5/mdadm.conf.5
/usr/bin/install -D  -m 755 mdadm /sbin/mdadm


[root@localhost mdadm-2.6.2]#

你也可以使用基于RPM的发布包,你可以从这里下载,不过最新的RPM为2.6-1版本:

[root@localhost mdadm-2.6.2]# rpm -ihv mdadm-1.4.0-1.i386.rpm 


mdadm简介

我们可以使用 man mdadm命令来查看mdadm的帮助信息:

[root@localhost mdadm-2.6.2]# man mdadm


关于 man mdadm的详细信息请查看 4楼



mdadm用法

基本语法

mdadm [mode] [options]


目前支持

LINEAR, RAID0(striping), RAID1(mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH和FAULTY



模式(7种):
  • Assemble:加入一个以前定义的阵列
  • Build:创建一个没有超级块的阵列
  • Create:创建一个新的阵列,每个设备具有超级块
  • Manage: 管理阵列(如添加和删除)
  • Misc:允许单独对阵列中的某个设备进行操作(如停止阵列)
  • Follow or Monitor:监控RAID的状态
  • Grow:改变RAID的容量或阵列中的设备数目


选项:
-A, --assemble:加入一个以前定义的阵列
-B, --build:创建一个没有超级块的阵列(Build a legacy array without superblocks.)
-C, --create:创建一个新的阵列
-F, --follow, --monitor:选择监控(Monitor)模式
-G, --grow:改变激活阵列的大小或形态
-I, --incremental:添加一个单独的设备到合适的阵列,并可能启动阵列
--auto-detect:请求内核启动任何自动检测到的阵列
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options:显示更详细的帮助
-V, --version:打印mdadm的版本信息
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-c, --config= :指定配置文件,缺省为 /etc/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm.conf



使用mdadm创建RAID5

Create ( mdadm --create)模式用来创建一个新的阵列。 在这里我们首先使用 mdadm --create --help查看一下帮助:

[root@localhost mdadm-2.6.2]# mdadm --create --help
Usage:  mdadm --create device -chunk=X --level=Y --raid-devices=Z devices

This usage will initialise a new md array, associate some
devices with it, and activate the array.   In order to create an
array with some devices missing, use the special word 'missing' in
place of the relevant device name.

Before devices are added, they are checked to see if they already contain
raid superblocks or filesystems.  They are also checked to see if
the variance in device size exceeds 1%.
If any discrepancy is found, the user will be prompted for confirmation
before the array is created.  The presence of a '--run' can override this
caution.

If the --size option is given then only that many kilobytes of each
device is used, no matter how big each device is.
If no --size is given, the apparent size of the smallest drive given
is used for raid level 1 and greater, and the full device is used for
other levels.

Options that are valid with --create (-C) are:
 --bitmap=          : Create a bitmap for the array with the given filename
 --chunk=      -c   : chunk size of kibibytes
 --rounding=        : rounding factor for linear array (==chunk size)
 --level=      -l   : raid level: 0,1,4,5,6,linear,multipath and synonyms
 --parity=     -p   : raid5/6 parity algorithm: {left,right}-{,a}symmetric
 --layout=          : same as --parity
 --raid-devices= -n : number of active devices in array
 --spare-devices= -x: number of spares (eXtras) devices in initial array
 --size=       -z   : Size (in K) of each drive in RAID1/4/5/6/10 - optional
 --force       -f   : Honour devices as listed on command line.  Don't
                    : insert a missing drive for RAID5.
 --run         -R   : insist of running the array even if not all
                    : devices are present or some look odd.
 --readonly    -o   : start the array readonly - not supported yet.
 --name=       -N   : Textual name for array - max 32 characters
 --bitmap-chunk=    : bitmap chunksize in Kilobytes.
 --delay=      -d   : bitmap update delay in seconds.


接下来我们使用 mdadm创建在/dev/md0上创建一个由 sdb、sdc、sdd3块盘组成(另外1块盘 sde为热备)的RAID5:

[root@localhost mdadm-2.6.2]# mdadm --create --verbose /dev/md0 --level=raid5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: size set to 8388544K
mdadm: array /dev/md0 started.


每个 mdadm的选项都有一个 缩写的形式,例如,上面我们创建RAID 5的命令可以使用下列的缩写形式:

[root@localhost mdadm-2.6.2]# mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd -x1 /dev/sde


二者的效果是相同的。



查看RAID状态

接下来我们使用 cat /proc/mdstat命令来查看一下RAID的状态,我们也可以利用 watch命令来每隔一段时间刷新 /proc/mdstat的输出。使用 CTRL+C可以取消。

[root@localhost mdadm-2.6.2]# watch -n 10 'cat /proc/mdstat'
Every 10s: cat /proc/mdstat                             Thu May 24 11:53:46 2007

Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 sdd[4] sde[3] sdc[1] sdb[0]
     16777088 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
     [====>................]  recovery = 24.0% (2016364/8388544) finish=10.2min
speed=10324K/sec
unused devices:
[root@localhost mdadm-2.6.2]#


接下来我们为阵列创建文件系统:

[root@localhost mdadm-2.6.2]# mkfs.ext3 /dev/md0
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2097152 inodes, 4194272 blocks
209713 blocks (5.00%) reserved for the super user
First data block=0
128 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
       4096000

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
You have new mail in /var/spool/mail/root


我们尝试向RAID中写入一个test2文件:

[root@localhost eric4ever]# vi test2
copy succeed!
eric@tlf
[url]http://eric4ever.googlepages.com/[/url]
done!
[root@localhost eric4ever]# ls
LATEST.tgz  mdadm-2.6.2  test2
[root@localhost eric4ever]# mount /dev/md0 /mnt/md0
[root@localhost eric4ever]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             2.9G  1.8G  1.1G  63% /
/dev/sda3             4.6G   33M  4.3G   1% /opt
none                  125M     0  125M   0% /dev/shm
/dev/md0               16G   33M   15G   1% /mnt/md0
[root@localhost eric4ever]# ls /mnt/md0
lost+found
[root@localhost eric4ever]# cp ./test2 /mnt/md0
[root@localhost eric4ever]# ls /mnt/md0
lost+found  test2
[root@localhost eric4ever]# ls -lh /mnt/md0
total 20K
drwx------    2 root     root          16K May 24 11:55 lost+found
-rw-r--r--    1 root     root           63 May 24 11:56 test2


使用 mdadm --detail /dev/md0(或 mdadm -D /dev/md0)命令以及 cat /proc/mdstat命令可以查看RAID设备的状态:

[root@localhost eric4ever]# mdadm -D /dev/md0  (或mdadm --detail /dev/md0)
/dev/md0:
       Version : 00.90.00
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
    Array Size : 16777088 (16.00 GiB 17.18 GB)
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0
   Persistence : Superblock is persistent

   Update Time : Thu May 24 13:45:36 2007
         State : active, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 1
 Spare Devices : 2

        Layout : left-symmetric
    Chunk Size : 64K

Rebuild Status : 16% complete

          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
        Events : 0.2

   Number   Major   Minor   RaidDevice State
      0       8       16        0      active sync   /dev/sdb
      1       8       32        1      active sync   /dev/sdc
      2       0        0        2      removed

      3       8       64        3      spare   /dev/sde
      4       8       48        4      spare   /dev/sdd


通过 mdadm -D命令,我们可以查看RAID的 版本、创建的时间、RAID级别、阵列容量、可用空间、设备数量、超级块、更新时间、各个设备的状态、RAID算法以及块大小等信息,通过上面的信息我们可以看到目前RAID正处于 重建过程之中,进度为 16%,其中 /dev/sdb/dev/sdc两块盘已经 同步。使用 watch命令每个30秒刷新一下查看的进度:

[root@localhost eric4ever]# watch -n 30 'cat /proc/mdstat'
Every 30s: cat /proc/mdstat                             Thu May 24 13:55:56 2007

Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 sdd[4] sde[3] sdc[1] sdb[0]
     16777088 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
     [==============>......]  recovery = 72.3% (6067444/8388544) finish=3.7min
speed=10324K/sec
unused devices:

当进度进行到 100%时,显示如下:

Every 30s: cat /proc/mdstat                             Thu May 24 14:00:57 2007

Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 sdd[2] sde[3] sdc[1] sdb[0]
     16777088 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices:


这是我们再使用 mdadm -D命令查看一下:

[root@localhost eric4ever]# mdadm -D /dev/md0  (或mdadm --detail /dev/md0)
/dev/md0:
       Version : 00.90.00
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
    Array Size : 16777088 (16.00 GiB 17.18 GB)
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0
   Persistence : Superblock is persistent

   Update Time : Thu May 24 13:59:48 2007
         State : active
Active Devices : 3
Working Devices : 4
Failed Devices : 1
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 64K

          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
        Events : 0.3

   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      spare   /dev/sde



这时我们可以发现 sdb、sdc、sdd三块盘均已经同步。

一般来说,一个新阵列被创建后我们最好创建一个/etc/mdadm.conf文件。没有该文件在激活阵列时我们就得指定更详细的信息,为方便,我们使用下列命令:

[root@localhost eric4ever]# mdadm --detail --scan
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=4b15050e:7d0c477d:98ed7d00:0f3c29e4
[root@localhost eric4ever]# mdadm --detail --scan >> /etc/mdadm.conf
[root@localhost eric4ever]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=4b15050e:7d0c477d:98ed7d00:0f3c29e4


启动停止RAID

使用 --stop-S命令选项可以停止运行的阵列( 注意: 停止前必须先umount):

[root@localhost eric4ever]# umount /mnt/md0
[root@localhost eric4ever]# mdadm -S /dev/md0  (或mdadm --stop /dev/md0)
mdadm: stopped /dev/md0



重新启动可以使用:

[root@localhost eric4ever]# mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.



模拟故障

同raidtools一样,mdadm也可以软件模拟故障,命令选项为 --fail--set-faulty

[root@localhost eric4ever]# mdadm --set-faulty --help
Usage: mdadm arraydevice options component devices...

This usage is for managing the component devices within an array.
The --manage option is not needed and is assumed if the first argument
is a device name or a management option.
The first device listed will be taken to be an md array device, and
subsequent devices are (potential) components of that array.

Options that are valid with management mode are:
 --add         -a   : hotadd subsequent devices to the array
 --remove      -r   : remove subsequent devices, which must not be active
 --fail        -f   : mark subsequent devices a faulty
 --set-faulty       : same as --fail
 --run         -R   : start a partially built array
 --stop        -S   : deactivate array, releasing all resources
 --readonly    -o   : mark array as readonly
 --readwrite   -w   : mark array as readwrite
[root@localhost eric4ever]# mdadm --fail --help
Usage: mdadm arraydevice options component devices...

This usage is for managing the component devices within an array.
The --manage option is not needed and is assumed if the first argument
is a device name or a management option.
The first device listed will be taken to be an md array device, and
subsequent devices are (potential) components of that array.

Options that are valid with management mode are:
 --add         -a   : hotadd subsequent devices to the array
 --remove      -r   : remove subsequent devices, which must not be active
 --fail        -f   : mark subsequent devices a faulty
 --set-faulty       : same as --fail
 --run         -R   : start a partially built array
 --stop        -S   : deactivate array, releasing all resources
 --readonly    -o   : mark array as readonly
 --readwrite   -w   : mark array as readwrite


接下来我们模拟 /dev/sdb故障:

[root@localhost eric4ever]# mdadm --manage --set-faulty /dev/md0 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0


查看一下系统日志,如果你配置了冗余磁盘,可能会显示如下信息:

   kernel: raid5: Disk failure on sdb, disabling device.
   kernel: md0: resyncing spare disk sde to replace failed disk


检查 /proc/mdstat,如果配置的冗余磁盘可用,阵列可能已经开始重建。

首先我们使用 mdadm --detail /dev/md0命令来查看一下RAID的状态:

[root@localhost eric4ever]# mdadm --detail /dev/md0
/dev/md0:
       Version : 00.90.00
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
    Array Size : 16777088 (16.00 GiB 17.18 GB)
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0
   Persistence : Superblock is persistent

   Update Time : Thu May 24 14:07:55 2007
         State : active, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 2
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 64K

Rebuild Status : 3% complete

          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
        Events : 0.6

   Number   Major   Minor   RaidDevice State
      0       8       16        0      faulty spare   /dev/sdb
      1       8       32        1      active sync   /dev/sdc
      2       8       48        2      active sync   /dev/sdd

      3       8       64        3      spare rebuilding   /dev/sde


查看 /proc/mdstat

[root@localhost eric4ever]# cat /proc/mdstat
Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 sdb[4] sde[3] sdd[2] sdc[1]
     16777088 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
     [==>..................]  recovery = 10.2% (858824/8388544) finish=12.4min speed=10076K/sec
unused devices:


再查看一下RAID状态:

[root@localhost eric4ever]# mdadm --detail /dev/md0
/dev/md0:
       Version : 00.90.00
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
    Array Size : 16777088 (16.00 GiB 17.18 GB)
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0
   Persistence : Superblock is persistent

   Update Time : Thu May 24 14:08:27 2007
         State : active, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 1
 Spare Devices : 2

        Layout : left-symmetric
    Chunk Size : 64K

Rebuild Status : 11% complete

          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
        Events : 0.8

   Number   Major   Minor   RaidDevice State
      0       0        0        0      removed
      1       8       32        1      active sync   /dev/sdc
      2       8       48        2      active sync   /dev/sdd

      3       8       64        3      spare   /dev/sde
      4       8       16        4      spare   /dev/sdb


已经完成到 11%了。查看一下日志消息:

[root@localhost eric4ever]# tail /var/log/messages
May 24 14:08:27 localhost kernel:  --- rd:3 wd:2 fd:1
May 24 14:08:27 localhost kernel:  disk 0, s:0, o:0, n:0 rd:0 us:0 dev:[dev 00:00]
May 24 14:08:27 localhost kernel:  disk 1, s:0, o:1, n:1 rd:1 us:1 dev:sdc
May 24 14:08:27 localhost kernel:  disk 2, s:0, o:1, n:2 rd:2 us:1 dev:sdd
May 24 14:08:27 localhost kernel: RAID5 conf printout:
May 24 14:08:27 localhost kernel:  --- rd:3 wd:2 fd:1
May 24 14:08:27 localhost kernel:  disk 0, s:0, o:0, n:0 rd:0 us:0 dev:[dev 00:00]
May 24 14:08:27 localhost kernel:  disk 1, s:0, o:1, n:1 rd:1 us:1 dev:sdc
May 24 14:08:27 localhost kernel:  disk 2, s:0, o:1, n:2 rd:2 us:1 dev:sdd
May 24 14:08:27 localhost kernel: md: cannot remove active disk sde from md0 ...


使用 mdadm -E命令查看一下 /dev/sdb的情况:

[root@localhost eric4ever]# mdadm -E /dev/sdb
/dev/sdb:
         Magic : a92b4efc
       Version : 00.90.00
          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
    Array Size : 16777088 (16.00 GiB 17.18 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0

   Update Time : Thu May 24 14:08:27 2007
         State : active
Active Devices : 2
Working Devices : 4
Failed Devices : 1
 Spare Devices : 2
      Checksum : a6a19662 - correct
        Events : 0.8

        Layout : left-symmetric
    Chunk Size : 64K

     Number   Major   Minor   RaidDevice State
this     4       8       16        4      spare   /dev/sdb

  0     0       0        0        0      faulty removed
  1     1       8       32        1      active sync   /dev/sdc
  2     2       8       48        2      active sync   /dev/sdd
  3     3       8       64        3      spare   /dev/sde
  4     4       8       16        4      spare   /dev/sdb


自动修复完成后,我们再查看一下RAID的状态:

[root@localhost eric4ever]# mdadm --detail /dev/md0
/dev/md0:
       Version : 00.90.00
 Creation Time : Thu May 24 13:45:35 2007
    Raid Level : raid5
    Array Size : 16777088 (16.00 GiB 17.18 GB)
 Used Dev Size : 8388544 (8.00 GiB 8.59 GB)
  Raid Devices : 3
 Total Devices : 5
Preferred Minor : 0
   Persistence : Superblock is persistent

   Update Time : Thu May 24 14:21:54 2007
         State : active
Active Devices : 3
Working Devices : 4
Failed Devices : 1
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 64K

          UUID : 4b15050e:7d0c477d:98ed7d00:0f3c29e4
        Events : 0.9

   Number   Major   Minor   RaidDevice State
      0       8       64        0      active sync   /dev/sde
      1       8       32        1      active sync   /dev/sdc
      2       8       48        2      active sync   /dev/sdd

      4       8       16        4      spare   /dev/sdb
[root@localhost eric4ever]# cat /proc/mdstat
Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 sdb[4] sde[0] sdd[2] sdc[1]
     16777088 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices:


我们可以看到 /dev/sde已经替换了 /dev/sdb。看看系统的日志消息:

[root@localhost eric4ever]# tail /var/log/messages
May 24 14:21:54 localhost kernel:  --- rd:3 wd:3 fd:0
May 24 14:21:54 localhost kernel:  disk 0, s:0, o:1, n:0 rd:0 us:1 dev:sde
May 24 14:21:54 localhost kernel:  disk 1, s:0, o:1, n:1 rd:1 us:1 dev:sdc
May 24 14:21:54 localhost kernel:  disk 2, s:0, o:1, n:2 rd:2 us:1 dev:sdd
May 24 14:21:54 localhost kernel: md: updating md0 RAID superblock on device
May 24 14:21:54 localhost kernel: md: sdb [events: 00000009](write) sdb's sb offset: 8388544
May 24 14:21:54 localhost kernel: md: sde [events: 00000009](write) sde's sb offset: 8388544
May 24 14:21:54 localhost kernel: md: sdd [events: 00000009](write) sdd's sb offset: 8388544
May 24 14:21:54 localhost kernel: md: sdc [events: 00000009](write) sdc's sb offset: 8388544
May 24 14:21:54 localhost kernel: md: recovery thread got woken up ...


recovery thread got woken up ...

这时我们可以从 /dev/md0中移除 /dev/sdb设备:

[root@localhost eric4ever]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb


类似地,我们可以使用下列命令向 /dev/md0中添加一个设备:

[root@localhost eric4ever]# mdadm /dev/md0 --add /dev/sdf



监控RAID

mdadm的监控模式提供一些实用的功能,你可以使用下列命令来监控 /dev/md0,delay参数意味着检测的时间间隔,这样紧急事件和严重的错误会及时发送给系统管理员:

[root@localhost eric4ever]# mdadm --monitor --mail=eric4ever@localhost --delay=300 /dev/md0


当使用监控模式时,mdadm不会退出,你可以使用下列命令:

[root@localhost eric4ever]# nohup mdadm --monitor --mail=eric4ever@localhost --delay=300 /dev/md0 &
[1] 3113
[root@localhost eric4ever]# nohup: appending output to `nohup.out'

目录
相关文章
pip镜像源大全及配置
在中国使用pip时,可以配置国内镜像源来提高安装速度和稳定性。以下是一些常见的国内镜像源:
20457 0
|
IDE 网络安全 开发工具
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
本文介绍了如何使用VS Code通过Remote-SSH插件连接远程服务器进行代码开发,并与PyCharm进行了对比。作者认为VS Code在连接和配置多个服务器时更为简单,推荐使用VS Code。文章详细说明了VS Code的安装、远程插件安装、SSH配置文件编写、服务器连接以及如何在连接后切换文件夹。此外,还提供了使用密钥进行免密登录的方法和解决权限问题的步骤。
7159 0
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
|
9天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
3天前
|
JSON API 数据格式
OpenCode入门使用教程
本教程介绍如何通过安装OpenCode并配置Canopy Wave API来使用开源模型。首先全局安装OpenCode,然后设置API密钥并创建配置文件,最后在控制台中连接模型并开始交互。
1522 5
|
11天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
1666 17
|
9天前
|
人工智能 JavaScript 前端开发
【2026最新最全】一篇文章带你学会Cursor编程工具
本文介绍了Cursor的下载安装、账号注册、汉化设置、核心模式(Agent、Plan、Debug、Ask)及高阶功能,如@引用、@Doc文档库、@Browser自动化和Rules规则配置,助力开发者高效使用AI编程工具。
1271 6
|
10天前
|
消息中间件 人工智能 Kubernetes
阿里云云原生应用平台岗位急招,加入我们,打造 AI 最强基础设施
云原生应用平台作为中国最大云计算公司的基石,现全面转向 AI,打造 AI 时代最强基础设施。寻找热爱技术、具备工程极致追求的架构师、极客与算法专家,共同重构计算、定义未来。杭州、北京、深圳、上海热招中,让我们一起在云端,重构 AI 的未来。
|
13天前
|
IDE 开发工具 C语言
【2026最新】VS2026下载安装使用保姆级教程(附安装包+图文步骤)
Visual Studio 2026是微软推出的最新Windows专属IDE,启动更快、内存占用更低,支持C++、Python等开发。推荐免费的Community版,安装简便,适合初学者与个人开发者使用。
1291 12
|
7天前
|
云安全 安全
免费+限量+领云小宝周边!「阿里云2026云上安全健康体检」火热进行中!
诚邀您进行年度自检,发现潜在风险,守护云上业务连续稳健运行
1180 2

热门文章

最新文章