我试图从 RAID-5 中移除 1 个硬盘,但出了点问题,但我仍然希望我能恢复我的数据(事实上,我有所有的备份,所以这只是一个关于mdadm
可能性的问题)
我有一个 4 x 1 Tb RAID-5,其中一个磁盘开始显示大量Reallocated_Sector_Ct,因此我决定将其删除。
我做了什么:
mdadm --manage /dev/md0 --fail /dev/sdc
mdadm --manage /dev/md0 --remove /dev/sdc
试图运行:
root@darkstar:/home/anton# mdadm --grow /dev/md0 --raid-devices=3
mdadm: this change will reduce the size of the array.
use --grow --array-size first to truncate array.
e.g. mdadm --grow /dev/md0 --array-size 1953262592
Run Code Online (Sandbox Code Playgroud)mdadm --grow /dev/md0 --array-size 1953262592
最后:
mdadm --grow /dev/md0 --raid-devices=3 --backup-file=/root/grow_md1.bak
现在重塑和恢复完成,我无法访问我的/dev/md0(它没有挂载),resize2fs /dev/md0
告诉首先运行e2fsck
,并e2fsck
告诉:
The filesystem size (according to the superblock) is 732473472 blocks
The physical size of the device is 488315648 blocks
Either the superblock or the partition table is likely to be corrupt!
Run Code Online (Sandbox Code Playgroud)
另一方面,mdadm -D /dev/md0
告诉:
Array Size : 1953262592 (1862.78 GiB 2000.14 GB)
Used Dev Size : 976631296 (931.39 GiB 1000.07 GB)
Run Code Online (Sandbox Code Playgroud)
这留下了一些希望,并不是我的所有数据都丢失了。有没有人对我应该怎么做才能拥有一个有效的 3 x 1 Tb 磁盘的 RAID-5 阵列有一些想法?
你应该做的只是你的第一步
mdadm --manage /dev/md0 --fail /dev/sdc
Run Code Online (Sandbox Code Playgroud)
此时,您的 RAID 5 阵列正在降级模式下运行,您可以用新磁盘更换该磁盘。
不幸的是,您似乎已将阵列的有效大小从 2TB截断到 1TB,从而破坏了文件系统的后半部分。幸运的是,你说你有备份。
我有点不解。在 RAID5 配置中有四个磁盘时,您应该有 3TB 可用。但是在没有看到结果的情况下,mdadm --examine
我不确定我还能为您提供很多其他信息。
你把订单倒过来了。
要缩小,首先缩小文件系统 ( resize2fs
),然后再缩小块设备 ( mdadm
)。您所做的顺序对于扩大文件系统是正确的,但对于缩小文件系统则相反。
你已经破坏了你的数据。要从中恢复,您首先要确认您的备份是好的。然后 mkfs 阵列并从备份中恢复。如果您的备份不好,您可能可以恢复碰巧位于文件系统的第一个 2TB 上的文件。(见下文)
PS:管理阵列的正常方式是,如果磁盘出现故障,则用相同容量或更大容量的磁盘替换该磁盘。mdadm --grow
不是处理磁盘故障的正常部分。
以前文件系统的第 3 TB 已被覆盖;基本上,该空间现在用于奇偶校验。(实际扇区包含奇偶校验和从其他磁盘移动的数据的混合,这些扇区现在包含奇偶校验。)那部分数据永远消失了;如果没有(可能是理论上的)能够读取扇区以前内容的高成本方法,它是不可恢复的。
此外,ext4 不会在文件系统的开头保留所有元数据;它分布在整个文件系统中。所以你也丢失了一堆元数据。重要的是,如果文件数据或元数据的任何部分位于丢失的三分之一中,则该文件将无法访问。可以从第 4 个磁盘(可能没有受到增长影响,因为当时它失败了)有限地恢复片段。
第一步,也是最重要的一步,是购买 4TB 磁盘并使用它来制作文件系统的完整副本(映像)。然后,将 4 个原始磁盘放在一边。如果对原始磁盘的可靠性有任何疑问,请制作第二个副本,并且只在其中一个副本上工作。您还需要额外的磁盘来将恢复的文件复制到其中,可能包括部分损坏文件的多个副本。
现在您可以在副本上尝试恢复步骤。请注意,大多数这些都需要在新副本上完成——这些步骤是破坏性的,这是只在副本上工作的众多原因之一。不要破坏你的原件:
让e2fsck -y /path/to/copy
事情去做吧。可能它会产生一些你可以安装的东西。继续这样做,复制文件。
将您的副本扩展回原始大小(应该可以使其稀疏;truncate -s
可以这样做)。然后它可能会挂载(以只读方式进行)。复制你能做的。卸载它,然后e2fsck -y
再做它的事情。再次装载并复制你能做的。
运行 fsck-y
并实际浏览所有这些消息。例如,我希望它实际上可以让您选择当文件的部分数据位于丢失区域时要执行的操作(替换为 0,删除文件)。可能它也提供有关丢失元数据的选择。我会先做-y
,因为它会有很多问题要问你......
如果您有旧的文件系统映像备份,请将您拥有的 2TB 与备份中缺少的 1TB 合并。fsck
结果,看看您是否可以从中获取任何其他文件。不过,恢复的文件损坏的风险相当高。
使用扫描文件系统图像以获取数据模式的程序(例如,photorec
查找 JPEG)。这是唯一一个不需要新副本的。
理论上,最终的 ¾ ? “失败的”磁盘 #4 包含一些您丢失的数据。如果您能找出扇区/块映射(我肯定不知道!),您可以将大约 250GB 从该磁盘复制回您的映像,并重复上述所有恢复步骤以恢复其他文件。
请注意,所有这些恢复的文件都可能已损坏(例如,充满 0 而不是数据的块)。如果您在某处有校验和,则验证它们很容易,否则将是一个乏味的手动过程。
我们有很多关于从损坏的文件系统中恢复数据的问题;只要您只在副本上工作,您就可以进行实验,而不会使您的数据面临更大的风险。
归档时间: |
|
查看次数: |
7166 次 |
最近记录: |