我在我的 RaspberryPi 上使用 mdadm 设置 RAID 1,该 RaspberryPi 有两个驱动器(均为 2 TB,均采用 exFAT 格式化,均具有独立电源),但遇到了错误。
不幸的是我不是 Linux 和命令方面的专家。
这是我所做的:
- 使用 apt-get install mdadm 安装 mdadm
- 找到两个设备
sudo fdisk -l
(如 /dev/sda 和 /dev/sdb) - 将 RAID 1 设置为 /dev/md0
sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[ab]1
- 格式化 /dev/md0
sudo mkfs /dev/md0 -t ext4
- 将 /dev/md0 挂载到 /media/nas
sudo mount /dev/md0 /media/nas
- 编辑/etc/fstab
/dev/md0 /media/nas ext4 4 0 0
- 将 AUTOSTART=true 添加到 /etc/default/mdadm
- 在 /etc/samba/smb.conf 中启用 samba
一切都很顺利,我可以使用 WinSCP 将文件上传到 /media/nas。
现在我的问题:第二天我的上传失败,错误代码为 4(没有进一步的错误文本)。当我运行时,sudo fdisk -l
我发现了 sda 和 sdb 两个设备。此外还有大小为 2000.3 GB 的 /dev/md0,但还有大小为 2000.3 GB 的 /dev/md127。
当我运行时,sudo mdadm --detail /dev/md0
我得到以下信息:
/dev/md0:版本:1.2 创建时间:2018 年 1 月 5 日星期五 12:23:50 Raid 级别:raid1 阵列大小:1953371712 (1862.88 GiB 2000.25 GB) 使用的开发大小:1953371712 (1862.88 GiB 2000.25 GB) Raid 设备: 2 总计设备:1 持久性:超级块是持久性的
Update Time : Sun Jan 7 14:37:23 2018
State : clean, degraded
活动设备:1 工作设备:1 故障设备:0 备用设备:0
Name : raspberrypi:0 (local to host raspberrypi)
UUID : 926bc124:2945e335:1e79ab6c:06b12095
Events : 21
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 1 1 active sync /dev/sda1
的输出sudo mdadm --detail /dev/md127
是:
/dev/md127:版本:1.2 创建时间:2018 年 1 月 5 日星期五 12:23:50 Raid 级别:raid1 阵列大小:1953371712 (1862.88 GiB 2000.25 GB) 使用的开发大小:1953371712 (1862.88 GiB 2000.25 GB) Raid 设备: 总计 2设备:1 持久性:超级块是持久性的
Update Time : Sun Jan 7 14:38:47 2018
State : clean, degraded
活动设备:1 工作设备:1 故障设备:0 备用设备:0
Name : raspberrypi:0 (local to host raspberrypi)
UUID : 926bc124:2945e335:1e79ab6c:06b12095
Events : 27
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed
当我尝试使用 再次设置 RAID 时sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[ab]1
,出现错误:
mdadm: super1.x cannot open /dev/sda1: Device or resource busy mdadm: failed container membership check mdadm: cannot open /dev/sda1: Device or resource busy
如何重新设置 RAID,md127 从何而来以及导致此错误的原因是什么?
(重启没有任何作用)
提前致谢!
答案1
发生的情况是您的 RAID 阵列崩溃了。根据您提供的零碎输出,我怀疑/dev/sdb1
遇到了暂时性故障(很可能是 Pi 的 USB 系统出现故障)并被标记为失败。当它重新上线时,Linuxmd
子系统将其视为不属于任何已知阵列的新 RAID 卷,并将其设置为/dev/md127
.
当你跑步时sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[ab]1
,你很幸运:它失败了。跑步mdadm --create
就差不多了绝不RAID 问题的解决方案。破坏数据的可能性远大于恢复数据的可能性。
此时,您最好的选择可能是销毁/dev/md127
数组并重新添加/dev/sdb1
到/dev/md0
.
- 确保这
/dev/md0
确实是您数据的实时副本。检查 的输出mount
以验证它是否安装在 上/media/nas
,并运行ls /media/nas
以确保您的数据在那里。 /dev/sdb1
从/dev/md127
:中删除mdadm /dev/md127 --fail /dev/sdb1
,然后是mdadm /dev/md127 --remove /dev/sdb1
.- 让自己
/dev/sdb1
看起来不再像 RAID 成员:wipefs -a /dev/sdb1
。 - 把它放回
/dev/md0
:mdadm /dev/md0 --add /dev/sdb1
。 - 让计算机重建阵列,复制其中的所有内容
/dev/sda1
。
为了防止将来发生这种情况,请在 中设置描述您的数组的条目/etc/mdadm/mdadm.conf
。如果驱动器暂时脱离阵列,mdadm
则会在配置文件中看到它,并会坐在那里等待您执行步骤 (4)。
如果您的设置有产生临时故障的习惯,请考虑向您的数组添加一个写入意图位图:mdadm --grow /dev/md0 --bitmap=internal
。这会在一定程度上减慢写入速度,因为位图需要更新,但会大大加快恢复速度,因为只需将更改从一个磁盘复制到另一个磁盘。如果添加写入意图位图,则可以使用--re-add
而不是将暂时发生故障的磁盘放回到阵列中--add
。