文章目录-Shell阶段十一-RAID故障恢复/数据重建

  • 前言
  • RAID测试方案
  • 配置RAID监控
  • 模拟和更换发生故障的RAID存储设备
    • 从冗余丢失中恢复数据
  • 总结
  • 总结

前言


# 当软件RAID故障时如何恢复和重建数据

在阅读 RAID系统仅考虑RAID 1的配置- 但其方法和概念适用于所有情况.

RAID测试方案

在进一步讨论之前, 请确保你已经配置好了RAID 1阵列, 可以按照本系列第3部分提供的方法:在Linux中如何创建RAID 1(镜像).在目前的情况下,仅有的变化是1.使用不同版本 CentOS (v7),而不是前面文章中的 (v6.5).2.磁盘容量发生改变, /dev/sdb 和 /dev/sdc (各8GB).

此外,如果SELinux设置未enforcing模式, 你需要将相应的标签加到挂载RAID设备的目录中.

否则,当你试图挂载时,你会碰到这样的警告信息.

启用SELinux时RAID挂载错误

通过以下命令来解决:

#restorecon -R /mnt/raid1

配置RAID监控

存储设备损坏的原因很多(尽管固态硬盘大大减少了这种情况发生的可能性),但不管是什么原因,可以肯定问题随时可能发生,你需要准备好替换发生故障的部分,并确保数据的可用性和完整性。首先建议是。虽然你可以查看 /proc/mdstat 来检查 RAID 的状态,但有一个更好的和节省时间的方法,使用监控 + 扫描模式运行 mdadm,它将警报通过电子邮件发送到一个预定义的收件人。

要这样设置,在 /etc/mdadm.conf 添加以下行:

MAILADDR user@<domain or localhost>

我自己的设置如下:

MAILADDR gacanepa@localhost

监控Raid并使用电子邮件告警

要让 mdadm 运行在监控 + 扫描模式中,以 root 用户添加以下 crontab 条目:

@reboot /sbin/mdadm --monitor --scan --oneshot
默认情况下,mdadm 每隔60秒会检查 RAID 阵列,如果发现问题将发出警报。你可以通过添加 --delay 选项到crontab 条目上面,后面跟上秒数,来修改默认行为(例如,--delay 1800意味着30分钟)。最后,确保你已经安装了一个邮件用户代理(MUA),如mutt 或 mailx。否则,你将不会收到任何警报。在一分钟内,我们就会看到 mdadm 发送的警报。

模拟和更换发生故障的RAID存储设备

为了给 RAID 阵列中的存储设备模拟一个故障,我们将使用 --manage--set-faulty 选项,如下所示:

# mdadm --manage --set-faulty /dev/md0 /dev/sdc1

这将导致 /dev/sdc1 被标记为 faulty,我们可以在 /proc/mdstat 看到:

在Raid存储设备上模拟问题

更重要的是,让我们看看是不是收到了同样的警报邮件:

Raid设备故障时发送邮件告警

在这种情况下,你需要从软件 RAID 阵列中删除该设备:

# mdadm /dev/md0 --remove /dev/sdc1

然后,你可以直接从机器中取出,并将其使用备用设备来取代(/dev/sdd 中类型为 fd 的分区是以前创建的):

# mdadm --manage /dev/md0 --add /dev/sdd1

幸运的是,该系统会使用我们刚才添加的磁盘自动重建阵列。我们可以通过标记 /dev/sdb1 为 faulty 来进行测试,从阵列中取出后,并确认 tecmint.txt 文件仍然在 /mnt/raid1 是可访问的:

# mdadm --detail /dev/md0
# mount | grep raid1
# ls -l /mnt/raid1 | grep tecmint
# cat /mnt/raid1/tecmint.txt

确认Raid重建

上面图片清楚的显示,添加 /dev/sdd1 到阵列中来替代 /dev/sdc1,数据的重建是系统自动完成的,不需要干预。

虽然要求不是很严格,有一个备用设备是个好主意,这样更换故障的设备就可以在瞬间完成了。要做到这一点,先让我们重新添加 /dev/sdb1 和 /dev/sdc1:

# mdadm --manage /dev/md0 --add /dev/sdb1
# mdadm --manage /dev/md0 --add /dev/sdc1

取代故障的Raid设备

从冗余丢失中恢复数据

如前所述,当一个磁盘发生故障时, mdadm 将自动重建数据。但是,如果阵列中的2个磁盘都故障时会发生什么?让我们来模拟这种情况,通过标记 /dev/sdb1 和 /dev/sdd1 为 faulty:

# umount /mnt/raid1
# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
# mdadm --stop /dev/md0
# mdadm --manage --set-faulty /dev/md0 /dev/sdd1

此时尝试以同样的方式重新创建阵列就(或使用 --assume-clean 选项)可能会导致数据丢失,因此不到万不得已不要使用。

让我们试着从 /dev/sdb1 恢复数据,例如,在一个类似的磁盘分区(/dev/sde1 - 注意,这需要你执行前在/dev/sde 上创建一个 fd 类型的分区)上使用 ddrescue

# ddrescue -r 2 /dev/sdb1 /dev/sde1

恢复raid阵列

请注意,到现在为止,我们还没有触及 /dev/sdb 和 /dev/sdd,它们的分区是 RAID 阵列的一部分。

现在,让我们使用 /dev/sde1 和 /dev/sdf1 来重建阵列:

# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1

请注意,在真实的情况下,你需要使用与原来的阵列中相同的设备名称,即设备失效后替换的磁盘的名称应该是 /dev/sdb1 和 /dev/sdc1。

在本文中,我选择了使用额外的设备来重新创建全新的磁盘阵列,是为了避免与原来的故障磁盘混淆。

当被问及是否继续写入阵列时,键入 Y,然后按 Enter。阵列被启动,你也可以查看它的进展:

# watch -n 1 cat /proc/mdstat

当这个过程完成后,你就应该能够访问 RAID 的数据:

确认Raid数据

总结

在本文中,我们回顾了从 RAID 故障和冗余丢失中恢复数据。但是,你要记住,这种技术是一种存储解决方案,不能取代备份。本文中介绍的方法适用于所有 RAID 中,其中的概念我将在本系列的最后一篇(RAID 管理)中涵盖它。

总结

Shell脚本学习-阶段十一-RAID故障恢复/数据重建相关推荐

  1. Shell脚本学习-阶段二

    文章目录-Shell脚本学习阶段二 前言 shell脚本实操2 1.获取随机字符串或数字 2.定义一个颜色输出字符串函数 3.批量创建用户 4.检查软件包是否安装 5.检查服务状态 6.检查主机存活状 ...

  2. Shell脚本学习-阶段三

    文章目录-Shell学习阶段三 前言 1.用shell脚本批量建立Linux用户 2. 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下: 3.通过ap ...

  3. Shell脚本学习-阶段二十七-命令解释三

    文章目录 前言 quyotastats repquota convertquota swapoff swapon sync chroot getent last lastb lastlog logro ...

  4. Shell脚本学习-阶段二十七-命令解释一

    文章目录-命令解释一 前言 as expr gcc gcov gdb indent ld ldconfig ldd make mktemp nm objdump perl php protoize u ...

  5. Shell脚本学习-阶段四-mysqladmin

    文章目录-Shell学习-阶段四mysqladmin 前言 20条mysql的mysqladmin 1.设置mysql的root密码 2.更改mysql的root密码 3.确保mysql Server ...

  6. Shell脚本学习-阶段一

    文章目录 阶段一 前言 Shell脚本实例 1.hello world 2.创建用户: 2.1 通过位置变量创建用户 2.2提示用户输入用户名和密码创建用户 2.3读取user.txt文件中的用户名批 ...

  7. Shell脚本学习-阶段二十七-命令解释二

    文章目录-命令解释二 前言 emacs jed joe nano================ pico sed=================== vi,vim============ mtyp ...

  8. Shell脚本学习-阶段二十八-shell练习二

    文章目录-练习2 前言 1.编写shell脚本程序,完成如下功能: 输出hello world ! 2.编写shell脚本程序,完成如下功能: 输入你的姓名,输出 hello, nice to mee ...

  9. Shell脚本学习-阶段五-MYSQL101条调优

    文章目录-Shell阶段五-MYSQL调优技巧 前言 101个MySQL调试和优化技巧 MySQL 服务器硬件和操作系统调节: MySQL 配置: MySQL模式优化: 查询优化: MySQL 备份过 ...

最新文章

  1. P4factory ReadMe Quickstart 安装p4factory
  2. ORACLE 监听之ORA-12518ORA-00020
  3. PHP 取302跳转后真实 URL 的两种方法
  4. java groovyshell_在java中使用groovy怎么搞
  5. centenos安装mysql,Cento7 安装mycat和mycat-eye
  6. Java 线程详解(一)线程的基础
  7. Linux 命令(104)—— crontab 命令
  8. python安装后使用_Python安装后如何使用?
  9. 基础篇:4.1)规范化:3d工程图纸出图步骤详解
  10. 数学建模-时间序列分析
  11. Perhaps JAVA_HOME does not point to the JDK的解决方法
  12. ideaIU--2018.2.2安装教程
  13. paddlepaddle波士顿房价预测
  14. 深度解密天猫精灵对话系统
  15. 图像处理及深度学习开源数据集大全(四万字呕心沥血整理)
  16. DSQLTools的使用——合天网安实验室学习笔记
  17. GraphGallery,一个基于TensorFlow 2.x与 PyTorch 的GNN benchmark 框架
  18. html的div双线边框,设置div边框
  19. 【markdown】用markdown制作简历
  20. 【MySQL综合练习1】

热门文章

  1. postgres报错:FATAL: Peer authentication failed for user “zabbix“ Previous connection kept
  2. 20-21-2网络管理quiz1
  3. 解决 meterpreter 使用shell后 shell内中文乱码的问题
  4. C#使用SmtpClient发送邮件解决授权码配置问题
  5. DB2添加数据时主键、唯一键冲突的解决方法
  6. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
  7. 如何在Windows上的Git Bash中退出'git diff'的结果? [重复]
  8. win11内存泄露怎么办 Windows11内存泄露的解决方法
  9. ros中订阅/map话题,获取地图尺寸,获取机器人原点origin,获取地图分辨率resolution (c++,python,waitForMessage,wait_for_message)
  10. Shiro 单点登录