如何强制 Linux 软件 RAID 不禁用磁盘进行恢复?

如何强制 Linux 软件 RAID 不禁用磁盘进行恢复?

我正在尝试从 RAID5 阵列中恢复数据。我的 4 个磁盘中有 2 个意外同时发生故障。我可以通过强制启动阵列。

mdadm --assemble --scan --force

阵列启动 ckean 但降级

root@omv:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Apr 18 22:03:46 2012
     Raid Level : raid5
     Array Size : 8790795264 (8383.56 GiB 9001.77 GB)
  Used Dev Size : 2930265088 (2794.52 GiB 3000.59 GB)
   Raid Devices : 4
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Mon Aug 25 23:50:44 2014
          State : clean, degraded
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : omv:data  (local to host omv)
           UUID : 157604ce:9206dd99:c8d249be
         Events : 21524

    Number   Major   Minor   RaidDevice State
       4       8       16        0      active sync   /dev/sdb
       1       0        0        1      removed
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd

我继续以只读模式堆积文件系统。读取错误最终导致设备从阵列中删除。有没有办法可以强制它不被删除。我希望能够复制我能复制的内容。

[  190.250032] end_request: I/O error, dev sdc, sector 1234525616
[  190.250082] raid5:md0: read error not correctable (sector 1234525616 on sdc).
[  190.250086] raid5: Disk failure on sdc, disabling device.
[  190.250088] raid5: Operation continuing on 2 devices.
[  190.250195] ata5: EH complete
[  190.366679] Buffer I/O error on device md0, logical block 462946358
[  190.366723] lost page write due to I/O error on md0
[  192.873263] ata5.00: exception Emask 0x0 SAct 0xf SErr 0x0 action 0x0
[  192.873308] ata5.00: irq_stat 0x40000008
[  192.873348] ata5.00: failed command: READ FPDMA QUEUED
[  192.873392] ata5.00: cmd 60/10:00:00:dc:3c/00:00:57:00:00/40 tag 0 ncq 8192 in
[  192.873394]          res 41/40:10:00:dc:3c/00:00:57:00:00/00 Emask 0x409 (media error) <F>
[  192.873476] ata5.00: status: { DRDY ERR }
[  192.873514] ata5.00: error: { UNC }

答案1

您应该使用类似的工具对所有 RAID 成员驱动器进行映像dd_rescue,然后使用这些映像组装 RAID 卷。

这样,您就不会对故障硬盘施加任何额外的压力,并且您有最好的机会恢复数据。

答案2

问题是,ext2/3/4 文件系统对底层设备一无所知。如果一些raid 设备,将导致 2 个不同的、独立的结果:

  1. RAID 子系统将禁用整个磁盘,并将阵列置于降级模式
  2. 文件系统将标记读取错误(对于镜像来说,情况并非总是如此)。

我有一个观点,在“专业系统管理员”圈子里,这个观点被认为是异端邪说。关于这个观点,

  1. 有坏块的磁盘不是来自魔鬼,
  2. 如果你的硬盘上有 45634563563456 个好扇区,也许你可以处理它们之间的 3 个坏扇区。

问题是,底层 raid 机制对磁盘上的坏块一无所知。它甚至会尝试对坏块进行同步。

如果您有 raid,最简单的解决方案是购买一块新硬盘。这块硬盘也可以用于其他任务,但不能用于 raid。ext2/3/4 文件系统具有非常好的坏块处理能力。

如果你想进一步使用作为 raid 成员的设备,这是可能的,尽管不是那么简单。在这种情况下,你可以做一些棘手的基于 lvm 的解决方案——其中一些处理和管理即使在有坏块的磁盘上的卷。我建议您尝试使用设备映射器

相关内容