AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 837603
Accepted
Esben von Buchwald
Esben von Buchwald
Asked: 2017-03-11 16:59:24 +0800 CST2017-03-11 16:59:24 +0800 CST 2017-03-11 16:59:24 +0800 CST

MD,部分从 RAID1 增长到 RAID5 但被中断,磁盘被移除,现在文件系统是 FUBAR

  • 772

我知道我做了一些愚蠢的举动来陷入这种情况,请不要提醒我,也不要问为什么:-/

我有这个 Synology DS1515+,在 SHR 中有 2x6TB 驱动器,这意味着 MD RAID1,顶部有 LVM。

在开始 RAID1 到 RAID5 的转换、中止它并摆弄磁盘后,我的 ext4 文件系统无法挂载。

有没有可能,系统只是因为多次重新启动和移除磁盘而“混乱”,现在将整个磁盘空间视为 RAID5 卷,即使从 RAID1 到 RAID5 的转换仅完成了大约 10%?如果是这样,如果我添加第三个磁盘并让 RAID 阵列重建,您认为我有机会修复文件系统吗?或者它是否会重新构建为具有与现在完全相同的数据的逻辑卷,即其上的文件系统已损坏?

我有点好奇实际的转换过程是如何进行的,因为 MD 和/或 LVM 必须知道块设备的哪些部分应该被视为 RAID5 或 RAID1,直到整个空间都转换为 RAID5。有谁知道更多吗?

提前感谢您的帮助:-)

这就是我所做的。(到目前为止我的救援尝试,日志条目如下所列)

  1. 将新的 6 TB 磁盘热插入 NAS。

  2. 告诉 Synology 的 UI 将磁盘添加到我现有的卷并将其增加到 12TB(使其成为 3x6TB RAID5)

  3. 关闭你的 NAS(shutdown -P now)进入增长过程,并移除新驱动器。 NAS 启动良好,但报告我的卷已降级。它仍然报告了一个 6 TB 的文件系统,并且仍然可以访问所有内容。

  4. 再次热插拔磁盘 3,擦除它并在其上创建另一个磁盘卷。

  5. 关闭 NAS,移除磁盘 2(这是一个错误!)然后打开它。 它开始发出哔哔声,并告诉我我的音量已崩溃。

  6. 再次关闭 NAS 并重新插入丢失的磁盘 2。 但 Synology 仍然报告该卷已崩溃,并且没有提供任何修复选项。

所以,我所有的数据现在都不可用了!

我开始调查这个问题。似乎 MD 正在按应有的方式组装阵列:

 State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           Name : DiskStation:2  (local to host DiskStation)
           UUID : 58290cba:75757ee2:86fe074c:ada2e6d2
         Events : 31429

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8       21        1      active sync   /dev/sdb5
       2       0        0        2      removed

两个原始磁盘上的元数据看起来也不错:

Device Role : Active device 0
Array State : AA. ('A' == active, '.' == missing)

Device Role : Active device 1
Array State : AA. ('A' == active, '.' == missing)

LVM 还可以识别 RAID5 卷并公开它的设备:

--- Logical volume ---
LV Path                /dev/vg1000/lv
LV Name                lv
VG Name                vg1000

但是 /dev/vg1000/lv 上的文件系统似乎已损坏,当我尝试以只读方式挂载它时:

mount: wrong fs type, bad option, bad superblock on /dev/vg1000/lv, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program)  
In some cases useful info is found in syslog - try dmesg | tail or so.

因此,我的文件系统损坏了,我认为无法修复(请参阅下面的尝试列表)。

以下是我迄今为止尝试过的步骤:

将 /dev/vg1000/lv 克隆到空硬盘驱动器上的分区并运行 e2fsck 我让这个进程运行了一周,然后才中断它。它发现了数百万个错误的 inode 和多次声明的块等,并且有这么多的 FS 错误,我相信它不会带回任何有用的数据,即使它在某天完成。

将两个装有数据的硬盘移动到 USB 扩展坞中,并将其连接到 Ubuntu 虚拟机,并制作覆盖设备以捕获所有写入(使用 dmsetup)

首先,我尝试重新创建raid 阵列。我首先找到创建具有相同参数的数组的命令,并且 mdadm -E 已经给了我,然后我尝试改变命令,看看结果是否不同(即 sda、missing、sdb、sda、sdb、missing , 缺失, sdb, sda)。6 种组合中有 4 种使 LVM 检测到卷组,但文件系统仍然损坏。

使用 R-Studio 组装阵列并搜索文件系统

这实际上给出了一些结果 - 它能够扫描并在我组装的 RAID 卷上找到一个 EXT4 文件系统,我可以浏览文件,但文件中只显示了我的实际文件的一个子集(如 10 个)观众。我尝试切换设备顺序,虽然其中 4 种组合使 R-Studio 检测到 ext4 文件系统(就像上面一样),但只有原始设置(sda、sdb、缺失)使 R-studio 能够发现任何文件从驱动器的根目录。

尝试使用 -o sb=XXXXX 挂载,指向另一个超级块

这给了我与未指定超级块位置相同的错误。

尝试过调试

当我输入“ls”时,这给了我 IO 错误

以下是导致问题的上述操作的日志消息。

关闭作为降级 RAID5 运行的系统,但文件系统仍在工作。

2017-02-25T18:13:27+01:00 DiskStation umount: kill the process "synoreport" [pid = 15855] using /volume1/@appstore/StorageAnalyzer/usr/syno/synoreport/synoreport
2017-02-25T18:13:28+01:00 DiskStation umount: can't umount /volume1: Device or resource busy
2017-02-25T18:13:28+01:00 DiskStation umount: can't umount /volume1: Device or resource busy
2017-02-25T18:13:28+01:00 DiskStation umount: SYSTEM:   Last message 'can't umount /volume' repeated 1 times, suppressed by syslog-ng on DiskStation
2017-02-25T18:13:28+01:00 DiskStation syno_poweroff_task: lvm_poweroff.c:49 Failed to /bin/umount -f -k /volume1
2017-02-25T18:13:29+01:00 DiskStation syno_poweroff_task: lvm_poweroff.c:58 Failed to /sbin/vgchange -an
2017-02-25T18:13:29+01:00 DiskStation syno_poweroff_task: raid_stop.c:28 Failed to mdadm stop '/dev/md2'
2017-02-25T18:13:29+01:00 DiskStation syno_poweroff_task: syno_poweroff_task.c:331 Failed to stop RAID [/dev/md2]

备注“未能停止 RAID” - 这是问题的可能原因吗?

删除 disk2 (sdb) 后首次启动

2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.467975] set group disks wakeup number to 5, spinup time deno 1
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.500561] synobios: unload
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.572388] md: invalid raid superblock magic on sda5
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.578043] md: sda5 does not have a valid v0.90 superblock, not importing!
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.627381] md: invalid raid superblock magic on sdc5
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.633034] md: sdc5 does not have a valid v0.90 superblock, not importing!
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.663832] md: sda2 has different UUID to sda1
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.672513] md: sdc2 has different UUID to sda1
2017-02-25T18:15:27+01:00 DiskStation kernel: [   10.784571] Got empty serial number. Generate serial number from product.


2017-02-25T18:15:41+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md3
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.339243] md/raid:md2: not enough operational devices (2/3 failed)
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.346371] md/raid:md2: raid level 5 active with 1 out of 3 devices, algorithm 2
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.355295] md: md2: set sda5 to auto_remap [1]
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.355299] md: reshape of RAID array md2
2017-02-25T18:15:41+01:00 DiskStation spacetool.shared: spacetool.c:1223 Try to force assemble RAID [/dev/md2]. [0x2000 file_get_key_value.c:81]
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.414839] md: md2: reshape done.
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.433218] md: md2: set sda5 to auto_remap [0]
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.494964] md: md2: set sda5 to auto_remap [0]
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.549962] md/raid:md2: not enough operational devices (2/3 failed)
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.557093] md/raid:md2: raid level 5 active with 1 out of 3 devices, algorithm 2
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.566069] md: md2: set sda5 to auto_remap [1]
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.566073] md: reshape of RAID array md2
2017-02-25T18:15:41+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md2
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.633774] md: md2: reshape done.
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.645025] md: md2: change number of threads from 0 to 1
2017-02-25T18:15:41+01:00 DiskStation kernel: [   31.645033] md: md2: set sda5 to auto_remap [0]
2017-02-25T18:15:41+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1000], New vg path: [/dev/vg1000], UUID: [Fund9t-vUVR-3yln-QYVk-8gtv-z8Wo-zz1bnF]
2017-02-25T18:15:41+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1001], New vg path: [/dev/vg1001], UUID: [FHbUVK-5Rxk-k6y9-4PId-cSMf-ztmU-DfXYoL]

2017-02-25T18:22:50+01:00 DiskStation umount: can't umount /volume2: Invalid argument
2017-02-25T18:22:50+01:00 DiskStation syno_poweroff_task: lvm_poweroff.c:49 Failed to /bin/umount -f -k /volume2
2017-02-25T18:22:50+01:00 DiskStation kernel: [  460.374192] md: md2: set sda5 to auto_remap [0]
2017-02-25T18:22:50+01:00 DiskStation kernel: [  460.404747] md: md3: set sdc5 to auto_remap [0]
2017-02-25T18:28:01+01:00 DiskStation umount: can't umount /initrd: Invalid argument

再次启动,disk2 (sdb) 再次出现

2017-02-25T18:28:17+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md3
2017-02-25T18:28:17+01:00 DiskStation kernel: [   32.442352] md: kicking non-fresh sdb5 from array!
2017-02-25T18:28:17+01:00 DiskStation kernel: [   32.478415] md/raid:md2: not enough operational devices (2/3 failed)
2017-02-25T18:28:17+01:00 DiskStation kernel: [   32.485547] md/raid:md2: raid level 5 active with 1 out of 3 devices, algorithm 2
2017-02-25T18:28:17+01:00 DiskStation spacetool.shared: spacetool.c:1223 Try to force assemble RAID [/dev/md2]. [0x2000 file_get_key_value.c:81]
2017-02-25T18:28:17+01:00 DiskStation kernel: [   32.515567] md: md2: set sda5 to auto_remap [0]
2017-02-25T18:28:18+01:00 DiskStation kernel: [   32.602256] md/raid:md2: raid level 5 active with 2 out of 3 devices, algorithm 2
2017-02-25T18:28:18+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md2
2017-02-25T18:28:18+01:00 DiskStation kernel: [   32.654279] md: md2: change number of threads from 0 to 1
2017-02-25T18:28:18+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1000], New vg path: [/dev/vg1000], UUID: [Fund9t-vUVR-3yln-QYVk-8gtv-z8Wo-zz1bnF]
2017-02-25T18:28:18+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1001], New vg path: [/dev/vg1001], UUID: [FHbUVK-5Rxk-k6y9-4PId-cSMf-ztmU-DfXYoL]
2017-02-25T18:28:18+01:00 DiskStation spacetool.shared: spacetool.c:3030 [Info] Activate all VG

2017-02-25T18:28:18+01:00 DiskStation synovspace: virtual_space_conf_check.c:78 [INFO] "PASS" checking configuration of virtual space [FCACHE], app: [1]
2017-02-25T18:28:18+01:00 DiskStation synovspace: virtual_space_conf_check.c:74 [INFO] No implementation, skip checking configuration of virtual space [HA]
2017-02-25T18:28:18+01:00 DiskStation synovspace: virtual_space_conf_check.c:74 [INFO] No implementation, skip checking configuration of virtual space [SNAPSHOT_ORG]
2017-02-25T18:28:18+01:00 DiskStation synovspace: vspace_wrapper_load_all.c:76 [INFO] No virtual layer above space: [/volume2] / [/dev/vg1001/lv]
2017-02-25T18:28:18+01:00 DiskStation synovspace: vspace_wrapper_load_all.c:76 [INFO] No virtual layer above space: [/volume1] / [/dev/vg1000/lv]
2017-02-25T18:28:19+01:00 DiskStation kernel: [   33.792601] BTRFS: has skinny extents
2017-02-25T18:28:19+01:00 DiskStation kernel: [   34.009184] JBD2: no valid journal superblock found
2017-02-25T18:28:19+01:00 DiskStation kernel: [   34.014673] EXT4-fs (dm-0): error loading journal
mount: wrong fs type, bad option, bad superblock on /dev/vg1000/lv,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
quotacheck: Mountpoint (or device) /volume1 not found or has no quota enabled.
quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.
quotaon: Mountpoint (or device) /volume1 not found or has no quota enabled.
2017-02-25T18:28:19+01:00 DiskStation synocheckhotspare: synocheckhotspare.c:149 [INFO] No hotspare config, skip hotspare config check. [0x2000 virtual_space_layer_get.c:98]
2017-02-25T18:28:19+01:00 DiskStation synopkgctl: pkgtool.cpp:3035 package AudioStation is not installed or not operable

备注它如何首先说存在 3 个设备中的 1 个,但随后强制组装它,因此组装了 RAID 阵列,然后尝试安装它,但出现 EXT4 安装错误。

尝试在此体验后重新启动,没有帮助

2017-02-25T18:36:45+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md3
2017-02-25T18:36:45+01:00 DiskStation kernel: [   29.579136] md/raid:md2: raid level 5 active with 2 out of 3 devices, algorithm 2
2017-02-25T18:36:45+01:00 DiskStation spacetool.shared: raid_allow_rmw_check.c:48 fopen failed: /usr/syno/etc/.rmw.md2
2017-02-25T18:36:45+01:00 DiskStation kernel: [   29.629837] md: md2: change number of threads from 0 to 1
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1000], New vg path: [/dev/vg1000], UUID: [Fund9t-vUVR-3yln-QYVk-8gtv-z8Wo-zz1bnF]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3023 [Info] Old vg path: [/dev/vg1001], New vg path: [/dev/vg1001], UUID: [FHbUVK-5Rxk-k6y9-4PId-cSMf-ztmU-DfXYoL]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3030 [Info] Activate all VG
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3041 Activate LVM [/dev/vg1000]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3041 Activate LVM [/dev/vg1001]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3084 space: [/dev/vg1000]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3084 space: [/dev/vg1001]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3110 space: [/dev/vg1000], ndisk: [2]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: spacetool.c:3110 space: [/dev/vg1001], ndisk: [1]
2017-02-25T18:36:46+01:00 DiskStation spacetool.shared: hotspare_repair_config_set.c:36 Failed to hup synostoraged
2017-02-25T18:36:46+01:00 DiskStation synovspace: virtual_space_conf_check.c:78 [INFO] "PASS" checking configuration of virtual space [FCACHE], app: [1]
2017-02-25T18:36:46+01:00 DiskStation synovspace: virtual_space_conf_check.c:74 [INFO] No implementation, skip checking configuration of virtual space [HA]
2017-02-25T18:36:46+01:00 DiskStation synovspace: virtual_space_conf_check.c:74 [INFO] No implementation, skip checking configuration of virtual space [SNAPSHOT_ORG]
2017-02-25T18:36:46+01:00 DiskStation synovspace: vspace_wrapper_load_all.c:76 [INFO] No virtual layer above space: [/volume2] / [/dev/vg1001/lv]
2017-02-25T18:36:46+01:00 DiskStation synovspace: vspace_wrapper_load_all.c:76 [INFO] No virtual layer above space: [/volume1] / [/dev/vg1000/lv]
2017-02-25T18:36:47+01:00 DiskStation kernel: [   30.799110] BTRFS: has skinny extents
2017-02-25T18:36:47+01:00 DiskStation kernel: [   30.956115] JBD2: no valid journal superblock found
2017-02-25T18:36:47+01:00 DiskStation kernel: [   30.961585] EXT4-fs (dm-0): error loading journal
mount: wrong fs type, bad option, bad superblock on /dev/vg1000/lv,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
quotacheck: Mountpoint (or device) /volume1 not found or has no quota enabled.
quo
lvm mdadm raid5 ext4 raid1
  • 1 1 个回答
  • 3616 Views

1 个回答

  • Voted
  1. Best Answer
    Esben von Buchwald
    2017-03-14T16:46:23+08:002017-03-14T16:46:23+08:00

    在完全破坏不断增长的 RAID5 之后,我是如何保存数据的!

    我有一个 3 磁盘 RAID5 阵列,缺少 3 号设备,并且数据似乎已损坏。

    /dev/sdd5: (5.45 TiB) 6TB,阵列的设备 1

    /dev/sde5:(5.45 TiB)6TB,阵列的设备 2

    阵列正在从 RAID1 转换到 RAID5,此时操作被中断并且设备 3 被移除。阵列仍在运行,直到设备 2 也被移除。放回设备 2 后,无法挂载文件系统。/dev/md2 设备被克隆,并在克隆的分区上运行 fsck,发现数百万个错误。

    在中断转换和移除磁盘后,MD 显然没有正确处理 RAID 数据。我去调查发生了什么事:

    首先,我看了看,/var/log/space_operation_error.log它告诉我到底发生了什么。移除磁盘 2 后,RAID 将其状态更改为损坏,因为 3 磁盘 RAID5 无法使用 1 个磁盘运行。但这也让 RAID 忘记了它正在进行的从 RAID1 到 RAID5 的重塑。

    因此,我认为数据损坏可能是由于MD将整个数据视为RAID5编码,而其中一部分仍处于原始状态。

    检查设备的 RAID 数据对我没有帮助,一切看起来都很好:

    # cat /proc/mdstat
    Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
    md124 : active raid5 sda5[0] sdb5[1]
          11711575296 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/2] [UU_]
    
    # mdadm -E /dev/sda5
              Magic : a92b4efc
            Version : 1.2
        Feature Map : 0x0
         Array UUID : 58290cba:75757ee2:86fe074c:ada2e6d2
               Name : DiskStation:2
      Creation Time : Thu Nov 27 11:35:34 2014
         Raid Level : raid5
       Raid Devices : 3
    
     Avail Dev Size : 11711575680 (5584.51 GiB 5996.33 GB)
         Array Size : 23423150592 (11169.03 GiB 11992.65 GB)
      Used Dev Size : 11711575296 (5584.51 GiB 5996.33 GB)
        Data Offset : 2048 sectors
       Super Offset : 8 sectors
              State : clean
        Device UUID : 1a222812:ac39920b:4cec73c4:81aa9b63
    
        Update Time : Fri Mar 17 23:14:25 2017
           Checksum : cb34324c - correct
             Events : 31468
    
             Layout : left-symmetric
         Chunk Size : 64K
    
       Device Role : Active device 0
       Array State : AA. ('A' == active, '.' == missing)
    

    但我认为它必须有某种计数器,以便在重塑时跟踪其进度。我研究了 MD 超级块的格式,描述如下: https ://raid.wiki.kernel.org/index.php/RAID_superblock_formats

    我复制了一个 RAID 分区的前 10 MiB 副本(mdadm -E 不适用于较小的副本):

    # dd if=/dev/sda5 of=/volume1/homes/sda5_10M.img bs=1M count=10
    10+0 records in
    10+0 records out
    10485760 bytes (10 MB) copied, 0.0622844 s, 168 MB/s
    

    我在 HEX 编辑器中打开它,并将字节 4104 处的数据从 0x00 更改为 0x04,以表明正在进行整形。

    改变状态

    我还注意到从 4200 开始的 8 个字节的值。它读取为 3856372992。

    重塑位置

    保存更改后,我检查了副本:

    # mdadm -E /volume1/homes/sda5_10M.img
    /volume1/homes/sda5_10M.img:
              Magic : a92b4efc
            Version : 1.2
        Feature Map : 0x4
         Array UUID : 58290cba:75757ee2:86fe074c:ada2e6d2
               Name : DiskStation:2
      Creation Time : Thu Nov 27 11:35:34 2014
         Raid Level : raid5
       Raid Devices : 3
    
     Avail Dev Size : 11711575680 (5584.51 GiB 5996.33 GB)
         Array Size : 23423150592 (11169.03 GiB 11992.65 GB)
      Used Dev Size : 11711575296 (5584.51 GiB 5996.33 GB)
        Data Offset : 2048 sectors
       Super Offset : 8 sectors
              State : clean
        Device UUID : 1a222812:ac39920b:4cec73c4:81aa9b63
    
      Reshape pos'n : 1928186496 (1838.86 GiB 1974.46 GB)
      Delta Devices : 1 (2->3)
    
        Update Time : Fri Mar 17 23:14:25 2017
           Checksum : cb34324c - expected cb343250
             Events : 31468
    
             Layout : left-symmetric
         Chunk Size : 64K
    
       Device Role : Active device 0
       Array State : AA. ('A' == active, '.' == missing)
    

    如您所见,它报告了重塑进度的确切位置——这也告诉我之前得到的数字是 512 字节扇区的数量。

    现在知道第一个 1838.86 GiB 在整形过程中被覆盖,我假设其余的分区没有被触及。

    因此,我决定组装一个块设备,从新的 RAID5 部分和未触及的部分,在报告的 repape 位置切割(阅读下面关于假设位置的注释)。由于数据偏移量是 2048 个扇区,所以我需要在 size 上加上 1024KiB,以获得原始分区部分的偏移量:

    #losetup -f --show /dev/md124 --sizelimit=1928186496K
    /dev/loop0
    
    #losetup -f --show /dev/sda5 --offset=1928187520K 
    /dev/loop1
    

    为了组装这些部件,我创建了一个没有元数据的 JBOD 设备:

    # mdadm --build --raid-devices=2 --level=linear /dev/md9 /dev/loop0 /dev/loop1
    mdadm: array /dev/md9 built and started.
    

    然后我检查了新的 /dev/md9 设备的内容

    # file -s /dev/md9
    /dev/md9: LVM2 PV (Linux Logical Volume Manager), UUID: xmhBdx-uED6-hN53-HOeU-ONy1-29Yc-VfIDQt, size: 5996326551552
    

    由于 RAID 包含一个 LVM 卷,我需要跳过前 576KiB 来访问 ext4 文件系统:

    # losetup -f --show /dev/md9 --offset=576K
    /dev/loop2
    
    # file -s /dev/loop2
    /dev/loop2: Linux rev 1.0 ext4 filesystem data, UUID=8e240e88-4d2b-4de8-bcaa-0836f9b70bb5, volume name "1.42.6-5004" (errors) (extents) (64bit) (large files) (huge files)
    

    现在我将文件系统挂载到我的 NAS 上的共享文件夹中:

    # mount -o ro,noload /dev/loop2 /volume1/homes/fixraid/
    

    而且我的文件是可以访问的!

    在我决定上面使用的头寸大小/偏移量之前,我尝试了几个值。我的第一个想法是,由于每台设备的 1838.86 GiB 被重新整形,RAID5 部分将包含约 3.6 TiB 的有效数据,我使用的位置是整形位置的两倍。它安装得很好,但我的一些文件似乎包含无效数据,一些文件在读取时出现 I/O 错误,并且一些文件夹丢失。

    由于我有很多 NEF(尼康)格式的 RAW 照片,我决定使用文件工具测试其中的一些。

    预期结果:

    # file DSC_7421.NEF
    DSC_7421.NEF: TIFF image data, little-endian, direntries=28, height=120, bps=352, compression=none, PhotometricIntepretation=RGB, manufacturer=NIKON CORPORATION, model=NIKON D750, orientation=upper-left, width=160
    

    数据损坏时的结果:

    # file DSC_9974.NEF
    DSC_9974.NEF: data
    

    ls当我在某些文件夹中写入时,我也遇到了一些 IO 错误。

    我决定查看我的一些大型照片集并测试它们的完整性 - 首先列出文件并计算输出中的行数。然后应将任何读取错误写入屏幕。接下来,通过检查是否有任何 NEF 文件无法识别,表明数据已损坏。我过滤了文件的输出并计算了过滤后的行数。

    # ls *.NEF -1 | wc -l
    3641
    # file *.NEF | grep "NEF: data" | wc -l
    0
    

    我对我的很多照片文件夹都这样做了,以确保所有文件都是可读的并且它们的内容被识别。

    使用 3856372992K 大小和 3856374016K 偏移量,我得到了很多无效数据和丢失的文件/文件夹,我尝试了其他几个值。

    我发现上面提到的偏移量和大小,似乎通过了我的小测试。!

    如上所示,文件系统报告了一些错误。由于我不想在一切恢复之前将任何数据写入我的设备,因此我决定制作快照写入覆盖,因此 fsck.ext4 所做的所有写入都将写入此文件。

    制作一个 50GiB 的稀疏文件

    # truncate /volume1/overlay.img -s50G
    

    制作虚拟设备

    #losetup -f --show /volume1/overlay.img 
    /dev/loop3
    

    使用数据获取设备的大小:

    # blockdev --getsz /dev/loop2
    11711574528
    

    创建覆盖设备(在此之前,我已经在 /dev/loop2 卸载了文件系统)

    # dmsetup create overlay --table "0 11711574528 snapshot /dev/loop2 /dev/loop3 P 8"
    

    该设备可在/dev/mapper/overlay

    最后我可以检查并修复错误:

    # fsck.ext4 -y -C 0 /dev/mapper/overlay
    

    请注意,修复仅写入覆盖文件,如果它们应该是永久性的,则需要提交到物理磁盘。

    • 4

相关问题

  • OpenBSD 和文件系统快照

  • 卷组空间不足。我该如何收回它?

  • LVM 快照是这样工作的吗?

  • LVM 和快照

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve