首先介绍一下背景。我在 Thecus N4200Pro NAS 阵列上存储大量数据。我收到一份报告,称阵列中的 4 个驱动器之一显示智能错误。
- 所以我更换了有问题的驱动器(#4),它开始进行重建。大约 60% 的重建过程中,阵列中的其他驱动器之一脱落,在本例中为#1。
- 太棒了..我关闭并尝试换回原来的#4,看看它是否会恢复。没有骰子。
- 因此,我关闭并交换 #1 和 #2,看看它们是否可以通过交换坏驱动器来恢复,并用半重建的 #4 替换 #4。事后看来,这很糟糕。我应该在第一张光盘之后关闭并从那里克隆所有原始光盘。
- 设备重新启动,当然,raid 无法组装,仅显示光盘 3 和 4、4 被标记为备用。
- 此时,我关闭所有内容,取出所有光盘并克隆它们,确保跟踪编号顺序。
- 我将所有 4 张克隆光盘按照正确的驱动器顺序放入我的 unbutu 16.04 LTS 盒子中并启动。
- 所有 4 个磁盘都会显示出来,并在磁盘中显示分区。它还显示了 raid5 阵列和 raid1 阵列。
raid1 阵列是 NAS 的系统信息,与此无关。 raid5 阵列是我感兴趣的阵列,其中包含我的所有数据,但我无法访问其中的任何内容。所以是时候开始挖掘了。
首先我跑去cat /proc/mdstat
看阵列-
jake@ubuntu-box:~$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
[raid10]
md0 : active raid1 sdd1[3]
1959884 blocks super 1.0 [4/1] [___U]
md1 : inactive sdd2[3](S) sdc2[2](S) sdb2[1](S) sda2[0](S)
3899202560 blocks
unused devices: <none>
好的,看到两个数组。所以我们从以下位置获取 md1 的详细信息:mdadm --detail /dev/md1
jake@ubuntu-box:~$ sudo mdadm --detail /dev/md1
/dev/md1:
Version : 0.90
Raid Level : raid0
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
State : inactive
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Events : 0.14344
Number Major Minor RaidDevice
- 8 50 - /dev/sdd2
- 8 34 - /dev/sdc2
- 8 18 - /dev/sdb2
- 8 2 - /dev/sda2[/CODE]
嗯..这很奇怪。将 raid 显示为 raid0,但情况并非如此。好的,让我们检查每个单独的分区:mdadm --examine /dev/sdXX
光盘1
jake@ubuntu-box:~$ sudo mdadm --examine /dev/sda2/
dev/sda2:
Magic : a92b4efc
Version : 0.90.00
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Creation Time : Thu Aug 18 14:30:36 2011
Raid Level : raid5
Used Dev Size : 974800000 (929.64 GiB 998.20 GB)
Array Size : 2924400000 (2788.93 GiB 2994.59 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 1
Update Time : Tue Mar 13 14:00:33 2018
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 1
Spare Devices : 1
Checksum : e52c5f8 - correct
Events : 20364
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 0 8 2 0 active sync /dev/sda2
0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 8 34 2 active sync /dev/sdc2
3 3 0 0 3 faulty removed
4 4 8 50 4 spare /dev/sdd2
光盘2
jake@ubuntu-box:~$ sudo mdadm --examine /dev/sdb2/
dev/sdb2:
Magic : a92b4efc
Version : 0.90.00
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Creation Time : Thu Aug 18 14:30:36 2011
Raid Level : raid5
Used Dev Size : 974800000 (929.64 GiB 998.20 GB)
Array Size : 2924400000 (2788.93 GiB 2994.59 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 1
Update Time : Tue Mar 13 14:56:30 2018
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Checksum : e597e42 - correct
Events : 238868
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 1 8 18 1 active sync /dev/sdb2
0 0 0 0 0 removed
1 1 8 18 1 active sync /dev/sdb2
2 2 8 34 2 active sync /dev/sdc2
3 3 0 0 3 faulty removed
4 4 8 50 4 spare /dev/sdd2
光盘3
jake@ubuntu-box:~$ sudo mdadm --examine /dev/sdc2/
dev/sdc2:
Magic : a92b4efc
Version : 0.90.00
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Creation Time : Thu Aug 18 14:30:36 2011
Raid Level : raid5
Used Dev Size : 974800000 (929.64 GiB 998.20 GB)
Array Size : 2924400000 (2788.93 GiB 2994.59 GB)
Raid Devices : 4
Total Devices : 3
Preferred Minor : 1
Update Time : Tue Mar 13 15:10:07 2018
State : clean
Active Devices : 1
Working Devices : 2
Failed Devices : 2
Spare Devices : 1
Checksum : e598570 - correct
Events : 239374
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 2 8 34 2 active sync /dev/sdc2
0 0 0 0 0 removed
1 1 0 0 1 faulty removed
2 2 8 34 2 active sync /dev/sdc2
3 3 0 0 3 faulty removed
4 4 8 50 4 spare /dev/sdd2
和光盘 4
jake@ubuntu-box:~$ sudo mdadm --examine /dev/sdd2/
dev/sdd2:
Magic : a92b4efc
Version : 0.90.00
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Creation Time : Thu Aug 18 14:30:36 2011
Raid Level : raid5
Used Dev Size : 974800000 (929.64 GiB 998.20 GB)
Array Size : 2924400000 (2788.93 GiB 2994.59 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 1
Update Time : Tue Mar 13 11:03:10 2018
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Checksum : e526d87 - correct
Events : 14344
Layout : left-symmetric
Chunk Size : 64K
Number Major Minor RaidDevice State
this 3 8 50 3 active sync /dev/sdd2
0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 8 34 2 active sync /dev/sdc2
3 3 8 50 3 active sync /dev/sdd2
所以 - 幻数和 UUID 在这组之间都很好。事件全部不正常,因为它试图重建被替换的#4作为备用,而不是仅仅重建#4
光盘 4 具有正确的 raid 信息和排序,因为它是我最初拉出的驱动器,并且没有重写任何内容。光盘 1-3 因交换物品而呈现出各种混乱状态。
那么两个问题——
为什么它在中显示为 raid0
mdadm --detail
是否可以更新我从 中获得的前三张光盘的信息,
mdadm --examine /dev/sdd2
以便它看到应有的一切,而不是我无意中制作的簇。我思考如果我能找到一种方法来更新这些分区或磁盘的信息,raid 应该正确地重新组装并重建自身,以便我可以访问我的数据
任何想法都会有帮助,因为我已经尽我所能尝试自己解决这个问题并进行了大量的搜索。
答案1
你说:
重建过程中大约 60% 阵列中的其他驱动器之一脱落
这是 RAID-5 的一个已知风险,也是当今 RAID-5 被认为不安全使用的原因之一。如果 RAID-5 阵列中的两个驱动器同时发生故障,则数据将无法恢复。不幸的是,在一个驱动器发生故障的情况下重建阵列可能会对其他驱动器造成足够的压力,从而大大增加重建过程中另一个驱动器发生故障的可能性。重建时间越长(即驱动器越大,并且它们执行其他实际工作越忙),发生这种情况的可能性就越大。
如果 RAID 阵列已投入使用多年并且驱动器已接近预期使用寿命,则尤其如此。或者,如果阵列中的所有驱动器都来自同一生产运行,并且具有类似的缺陷(如果是“不良批次”)或类似的预期寿命。
由于数据在 4 磁盘 RAID-5 阵列中跨驱动器进行条带化的方式(即 3 个磁盘用于条带化数据,1 个磁盘用于奇偶校验),当两个驱动器发生故障时,每个文件至少有三分之一会丢失。这与 RAID-0 条带化在一个或多个驱动器发生故障时发生的情况类似 - 条带到故障驱动器上的文件部分消失了。
RAID-6 允许两个驱动器在所有数据丢失之前发生故障,从而稍微改进了这一点,但如果三个驱动器同时发生故障,也会遇到同样的问题。
RAID-1 更安全,因为如果一个驱动器出现故障,您可以从另一个驱动器(如果镜像到多个驱动器则从其他驱动器)检索数据。如果镜像集中的所有驱动器都出现故障,您将失去一切。
RAID-10 与 RAID-1 类似。如果镜像集中的所有驱动器同时死亡,它仍然容易受到攻击。 RAID-10 可以承受两个驱动器故障,但仅有的如果发生故障的驱动器不在同一镜像集中。例如,您有驱动器 a、b、c、d 和两个镜像对(a+b 和 c+d),然后是来自不同对的两个驱动器的任意组合(即 a+c、a+d、b+c 或b+d) 可能会失败而不会丢失您的数据,但如果 a+b 或 c+d 失败,那么您的数据就会丢失。
对于 RAID-1 和 RAID-10,可以通过在每个镜像集中包含更多驱动器来降低风险。例如,6 驱动器 RAID-10 可以配置为 a+b、c+d、e+f(三个镜像对,总容量 = 驱动器数量/2)或 a+b+c 和 d+e+f(两个镜像三元组,总容量 = 驱动器数量 / 3)
因此,所有 RAID 级别都有可能导致灾难性数据丢失的故障模式。
所有这一切要记住的关键是:
RAID 不能替代常规备份
答案2
所以我尝试了几件事。首先,我今天早上重新启动机器后停止了突袭:
jake@ubuntu-box:~$ sudo mdadm -S /dev/md1
mdadm: stopped /dev/md1
然后我尝试使用数组的 uuid 进行组装:
jake@ubuntu-box:~$ sudo mdadm --assemble /dev/md1 --
uuid=e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
mdadm: /dev/md1 assembled from 1 drive - not enough to start the array.
好吧,这正是我所期望的。所以让我们尝试强制它:
jake@ubuntu-box:~$ sudo mdadm --assemble /dev/md1 --force --
uuid=e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
mdadm: forcing event count in /dev/sdb2(1) from 238868 upto 239374
mdadm: forcing event count in /dev/sda2(0) from 20364 upto 239374
mdadm: /dev/md1 assembled from 3 drives - not enough to start the array.
嗯..那个应该已经工作了。让我们尝试通过调用 raid 的各个分区来手动重新组装:
jake@ubuntu-box:~$ sudo mdadm --assemble /dev/md1 /dev/sda2 /dev/sdb2
/dev/sdc2 /dev/sdd2 --force
mdadm: /dev/md1 has been started with 3 drives (out of 4).
答对了!看起来是从 4 个驱动器中的 3 个开始的。足够好了,这意味着我可以访问我的数据!让我们检查一下细节,只是为了咯咯笑:
jake@ubuntu-box:~$ sudo mdadm --detail /dev/md1/dev/md1:
Version : 0.90
Creation Time : Thu Aug 18 14:30:36 2011
Raid Level : raid5
Array Size : 2924400000 (2788.93 GiB 2994.59 GB)
Used Dev Size : 974800000 (929.64 GiB 998.20 GB)
Raid Devices : 4
Total Devices : 3
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Tue Mar 13 14:00:33 2018
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
UUID : e7ab07c3:b9ffa9ae:377e3cd3:a8ece374
Events : 0.239374
Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
2 8 34 2 active sync /dev/sdc2
6 0 0 6 removed
我们说话时我正在复制数据。所以,数据并不是无法恢复的——只是需要知道正确的命令来强制突袭重新集结。