在 Linux 下使用mdadm创建 RAID 5
在 RAID 5 中,数据条带化后存储在分布式奇偶校验的多个磁盘上。分布式奇偶校验的条带化意味着它将奇偶校验信息和条带化数据分布在多个磁盘上,这样会有很好的数据冗余。

在 Linux 中配置 RAID 5
对于此 RAID 级别它至少应该有三个或更多个磁盘。RAID 5 通常被用于大规模生产环境中,以花费更多的成本来提供更好的数据冗余性能。
什么是奇偶校验?
奇偶校验是在数据存储中检测错误最简单的常见方式。奇偶校验信息存储在每个磁盘中,比如说,我们有4个磁盘,其中相当于一个磁盘大小的空间被分割去存储所有磁盘的奇偶校验信息。如果任何一个磁盘出现故障,我们可以通过更换故障磁盘后,从奇偶校验信息重建得到原来的数据。
RAID 5 的优点和缺点
- 提供更好的性能。
- 支持冗余和容错。
- 支持热备份。
- 将用掉一个磁盘的容量存储奇偶校验信息。
- 单个磁盘发生故障后不会丢失数据。我们可以更换故障硬盘后从奇偶校验信息中重建数据。
- 适合于面向事务处理的环境,读操作会更快。
- 由于奇偶校验占用资源,写操作会慢一些。
- 重建需要很长的时间。
要求
创建 RAID 5 最少需要3个磁盘,你也可以添加更多的磁盘,前提是你要有多端口的专用硬件 RAID 控制器。在这里,我们使用“mdadm”包来创建软件 RAID。
mdadm 是一个允许我们在 Linux 下配置和管理 RAID 设备的包。默认情况下没有 RAID 的配置文件,我们在创建和配置 RAID 后必须将配置文件保存在一个单独的文件 mdadm.conf 中。
在进一步学习之前,我建议你通过下面的文章去了解 Linux 中 RAID 的基础知识。
我的服务器设置
操作系统 : CentOS 6.5 FinalIP 地址 : 192.168.0.227主机名 : rd5.tecmintlocal.com磁盘 1 [20GB] : /dev/sdb磁盘 2 [20GB] : /dev/sdc磁盘 3 [20GB] : /dev/sdd
这是9篇系列教程的第4部分,在这里我们要在 Linux 系统或服务器上使用三个20GB(名为/dev/sdb, /dev/sdc 和 /dev/sdd)的磁盘建立带有分布式奇偶校验的软件 RAID 5。
第1步:安装 mdadm 并检验磁盘
1、 正如我们前面所说,我们使用 CentOS 6.5 Final 版本来创建 RAID 设置,但同样的做法也适用于其他 Linux 发行版。
# lsb_release -a# ifconfig | grep inet

CentOS 6.5 摘要
2、 如果你按照我们的 RAID 系列去配置的,我们假设你已经安装了“mdadm”包,如果没有,根据你的 Linux 发行版使用下面的命令安装。
# yum install mdadm [在 RedHat 系统]# apt-get install mdadm [在 Debain 系统]
3、 “mdadm”包安装后,先使用fdisk命令列出我们在系统上增加的三个20GB的硬盘。
# fdisk -l | grep sd

安装 mdadm 工具
4、 现在该检查这三个磁盘是否存在 RAID 块,使用下面的命令来检查。
# mdadm -E /dev/sd[b-d]# mdadm --examine /dev/sdb /dev/sdc /dev/sdd # 或

检查 Raid 磁盘
注意: 上面的图片说明,没有检测到任何超级块。所以,这三个磁盘中没有定义 RAID。让我们现在开始创建一个吧!
第2步:为磁盘创建 RAID 分区
5、 首先,在创建 RAID 前磁盘(/dev/sdb, /dev/sdc 和 /dev/sdd)必须有分区,因此,在进行下一步之前,先使用fdisk命令进行分区。
# fdisk /dev/sdb# fdisk /dev/sdc# fdisk /dev/sdd
创建 /dev/sdb 分区
请按照下面的说明在 /dev/sdb 硬盘上创建分区。
- 按
n创建新的分区。 - 然后按
P选择主分区。选择主分区是因为还没有定义过分区。 - 接下来选择分区号为1。默认就是1。
- 这里是选择柱面大小,我们没必要选择指定的大小,因为我们需要为 RAID 使用整个分区,所以只需按两次 Enter 键默认将整个容量分配给它。
- 然后,按
P来打印创建好的分区。 - 改变分区类型,按
L可以列出所有可用的类型。 - 按
t修改分区类型。 - 这里使用
fd设置为 RAID 的类型。 - 然后再次使用
p查看我们所做的更改。 - 使用
w保存更改。

创建 sdb 分区
注意: 我们仍要按照上面的步骤来创建 sdc 和 sdd 的分区。
创建 /dev/sdc 分区
现在,通过下面的截图给出创建 sdc 和 sdd 磁盘分区的方法,或者你可以按照上面的步骤。
# fdisk /dev/sdc

创建 sdc 分区
创建 /dev/sdd 分区
# fdisk /dev/sdd

创建 sdd 分区
6、 创建分区后,检查三个磁盘 sdb, sdc, sdd 的变化。
# mdadm --examine /dev/sdb /dev/sdc /dev/sdd# mdadm -E /dev/sd[b-d] # 或

检查磁盘变化
注意: 在上面的图片中,磁盘的类型是 fd。
7、 现在在新创建的分区检查 RAID 块。如果没有检测到超级块,我们就能够继续下一步,在这些磁盘中创建一个新的 RAID 5 配置。

Check Raid on Partition
*在分区中检查 RAID *
第3步:创建 md 设备 md0
8、 现在使用所有新创建的分区(sdb1, sdc1 和 sdd1)创建一个 RAID 设备“md0”(即 /dev/md0),使用以下命令。
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1# mdadm -C /dev/md0 -l=5 -n=3 /dev/sd[b-d]1 # 或mdadm -C /dev/md0 -l5 -n3 /dev/sd[b-d]1 ##我在Debian使用的这个命令
9、 创建 RAID 设备后,检查并确认 RAID,从 mdstat 中输出中可以看到包括的设备的 RAID 级别。
# cat /proc/mdstat

验证 Raid 设备
如果你想监视当前的创建过程,你可以使用watch命令,将 cat /proc/mdstat 传递给它,它会在屏幕上显示且每隔1秒刷新一次。
# watch -n1 cat /proc/mdstat

监控 RAID 5 构建过程

Raid 5 过程概要
10、 创建 RAID 后,使用以下命令验证 RAID 设备
# mdadm -E /dev/sd[b-d]1

验证 Raid 级别
注意: 因为它显示三个磁盘的信息,上述命令的输出会有点长。
11、 接下来,验证 RAID 阵列,假定包含 RAID 的设备正在运行并已经开始了重新同步。
# mdadm --detail /dev/md0

验证 RAID 阵列
第4步:为 md0 创建文件系统
12、 在挂载前为“md0”设备创建 ext4 文件系统。
# mkfs.ext4 /dev/md0

创建 md0 文件系统
13、 现在,在/mnt下创建目录 raid5,然后挂载文件系统到 /mnt/raid5/ 下,并检查挂载点下的文件,你会看到 lost+found 目录。
# mkdir /mnt/raid5# mount /dev/md0 /mnt/raid5/# ls -l /mnt/raid5/
14、 在挂载点 /mnt/raid5 下创建几个文件,并在其中一个文件中添加一些内容然后去验证。
# touch /mnt/raid5/raid5_tecmint_{1..5}# ls -l /mnt/raid5/# echo "tecmint raid setups" > /mnt/raid5/raid5_tecmint_1# cat /mnt/raid5/raid5_tecmint_1# cat /proc/mdstat

挂载 RAID 设备
15、 我们需要在 fstab 中添加条目,否则系统重启后将不会显示我们的挂载点。编辑 fstab 文件添加条目,在文件尾追加以下行。挂载点会根据你环境的不同而不同。
# vim /etc/fstab/dev/md0 /mnt/raid5 ext4 defaults 0 0

自动挂载 RAID 5
16、 接下来,运行mount -av命令检查 fstab 条目中是否有错误。
# mount -av

检查 Fstab 错误
第5步:保存 Raid 5 的配置
17、 在前面章节已经说过,默认情况下 RAID 没有配置文件。我们必须手动保存。如果此步中没有跟随不属于 md0 的 RAID 设备,它会是一些其他随机数字。
所以,我们必须要在系统重新启动之前保存配置。如果配置保存它在系统重新启动时会被加载到内核中然后 RAID 也将被加载。
# mdadm --detail --scan --verbose >> /etc/mdadm.conf

保存 RAID 5 配置
注意:保存配置将保持 md0 设备的 RAID 级别稳定不变。
第6步:添加备用磁盘
18、 备用磁盘有什么用?它是非常有用的,如果我们有一个备用磁盘,当我们阵列中的任何一个磁盘发生故障后,这个备用磁盘会进入激活重建过程,并从其他磁盘上同步数据,这样就有了冗余。
更多关于添加备用磁盘和检查 RAID 5 容错的指令,请阅读下面文章中的第6步和第7步。
结论
在这篇文章中,我们已经看到了如何使用三个磁盘配置一个 RAID 5 。在接下来的文章中,我们将看到如何故障排除并且当 RAID 5 中的一个磁盘损坏后如何恢复。
via: http://www.tecmint.com/create-raid-5-in-linux/
在 Linux 下使用mdadm创建 RAID 5的更多相关文章
- Linux下useradd命令创建的用户不能登录的问题
Linux下useradd命令创建的用户不能登录的问题 问题: 用useradd命令新创建一个用户tester 密码pwdtest mkdir -p /home/tester(创建文件夹) user ...
- 《linux下进程的创建,执行,监控和终止》
<linux下进程的创建,执行,监控和终止> http://blog.csdn.net/miss_acha/article/details/43671047 http://blog.csd ...
- 在Linux下给mysql创建用户并分配权限及问题解决方案
在linux下安装mysql请参考在linux系统中安装mysql服务器详细步骤 1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql ...
- linux下fallocate快速创建大文件
以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1 ...
- LINUX下给软件创建桌面图标
转自:http://www.cnblogs.com/Rapheal/p/3610411.html?utm_source=tuicool&utm_medium=referral 最近在折腾lin ...
- linux下使用svn创建版本库和权限管理
linux上的svn服务端如何和本地的电脑客户端结合使用 Linux上安装SVN服务器: 第一步:检查是否已安装 # rpm -qa subversion 第二步: 通过yum命令安装svnserve ...
- Deepin Linux下为Wine创建文件关联
在Deepin Linux下,默认地,使用apt安装的Wine并没有创建文件关联,这使得在文件管理器中双击exe等Windows可执行文件时,不能直接运行.为此,必须手动在桌面环境中创建文件关联. 文 ...
- Linux下进程的创建(system(); fork(); exec*())
0. system(); system()函数通过调用shell程序来执行所指向的命令(效率低),相当于先fork(),再execve(): 特点:原进程和子进程各自运行,且原进程需要等子进程运行完后 ...
- Linux下用户的创建与删除
我们在Linux下创建用户主要有两种方式:adduser和useradd,它们的区别以及主要用法如下: adduser adduser的用法很简单,只需adduser+username即可,如下: s ...
随机推荐
- 学会从后往前遍历,例 [LeetCode] Pascal's Triangle II,剑指Offer 题4
当我们需要改变数组的值时,如果从前往后遍历,有时会带来很多麻烦,比如需要插入值,导致数组平移,或者新的值覆盖了旧有的值,但旧有的值依然需要被使用.这种情况下,有时仅仅改变一下数组的遍历方向,就会避免这 ...
- linux-performance
1. top 2. cat /proc/meminfo nvidia@tegra-ubuntu:~/zrj/laneseg_TRT$ cat /proc/meminfo MemTotal: kB Me ...
- Spring如何解析XML文件——Spring源码之XML初解析
首先,在我的这篇博客中已经说到容器是怎么初步实现的,并且要使用XmlBeanDefinitionReader对象对Xml文件进行解析,那么Xml文件是如何进行解析的,将在这片博客中进行一些陈述. 数据 ...
- 51Nod:活动安排问题之二(贪心)
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个室? 输入 第一行一个正整数n (n <= 10000)代表活动的个数. ...
- 第三周作业3——Bug Report
作业要求来自:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/957 要求1: 准备工作:利用老师提供的git 命令,批量pull所有 ...
- 使用pip install XX 命令时报错
在使用pip命令安装的时候,我遇到这样的报错: C:\Users\86962>pip install Appium-Python-Client Collecting Appium-Python- ...
- hdu1208 dp
题意:给了一个 n * n 的方格图,要从图的左上角走到右下角 ,每次只能向右或者向下走,走的格数为当前格子上的数字,问共有多少中走法. 一开始我看到之后觉得这题完全可以用记忆化搜索来做,dfs 一遍 ...
- 玩转ptrace (一)
转自http://www.cnblogs.com/catch/p/3476280.html [本文翻译自这里: http://www.linuxjournal.com/article/6100?pag ...
- SQL Server系统表介绍与使用
关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器.你可 ...
- ARP命令详解
ARP是一个重要的TCP/IP协议,并且用于确定对应IP地址的网卡物理地址.实用arp命令,我们能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容.此外,使用arp命令,也可以用人工方式输入 ...