我知道我做了一些愚蠢的举动来进入这种情况,请不要提醒我,也不要问为什么: – /
我有这个Synology DS1515 +,在SHR中有2x6TB的驱动器,意思是MD RAID1,顶部有LVM。
在开始RAID1到RAID5转换之后,放弃它并绕过磁盘,我的ext4文件系统是不可卸载的。
是否有可能,系统已经被许多重新启动和删除磁盘所“困惑”,现在将整个磁盘空间视为RAID5卷,尽pipe从RAID1到RAID5的转换只完成了大约10%。 如果是这样,你认为我有机会修复文件系统,如果我添加第三个磁盘,让RAIDarrays重build? 还是只是将其与现在的数据完全相同,即损坏的文件系统重新绑定到逻辑卷上?
我对实际的转换过程如何进行了一点好奇,因为MD和/或LVM必须知道块设备的哪些部分应该被视为RAID5或RAID1,直到整个空间转换为RAID5。 谁更了解这个?
在此先感谢您的帮助:-)
这是我做的。 (到目前为止我的救援尝试,以及下面列出的日志条目)
将新的6TB磁盘热插入NAS。
告诉Synology的用户界面,将磁盘添加到我现有的卷,并将其增加到12TB(使其成为一个3x6TB的RAID5)
closuresNAS(关机-P现在)几个你的成长过程中,并删除了新的驱动器。 NAS引导良好,但报告说我的音量降低了。 它仍然报告了一个6TB的文件系统,一切仍然可以访问。
再次热插拔磁盘3,擦去它,并制作了另一个单一的磁盘卷。
closuresNAS,取出磁盘2(这是一个错误!)并通电。 它开始发出哔哔声,并告诉我,我的音量是坠毁的。
再次closuresNAS,重新插入丢失的磁盘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 (eg 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和多重声明的block等等,以及那个FS错误的数量,我相信它不会带回任何有用的数据,即使它有一天会完成。
将两个带有数据的硬盘驱动器移动到一个USB扩展坞中,并将其连接到一个Ubuntu虚拟机,并使覆盖设备捕获所有写入(使用dmsetup)
首先,我试图重新创buildRAIDarrays。 我开始find创build具有相同参数的数组的命令,并且mdadm -E已经给了我,然后我试着打开顺序,看看结果是否有差别(即sda,missing,sdb,sda,sdb,missing ,缺less,sdb,sda)。 6个组合中有4个使得LVM检测卷组,但文件系统仍然被破坏。
使用R-Studio来组装arrays并search文件系统
这实际上给出了一些结果 – 它能够扫描并find我组装的RAID卷上的EXT4文件系统,并且我可以浏览这些文件,但是我的实际文件只有一个子集(如10个)出现在文件中观众。 我试着用设备顺序切换,当R-Studio中有4个组合检测到ext4文件系统(就像上面那样)时,只有原始设置(sda,sdb,missing)使得R-studio能够发现任何文件从驱动器的根。
尝试使用-o sb = XXXXX进行安装,指向另一个超级块
这给了我没有指定超级块的位置相同的错误。
试过debugfs
这给我IO错误,当我input“LS”
这是上述操作的日志消息,导致了这些问题。
closures正在运行的降级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
注意它是如何首先表示三个设备中有一个存在,但之后强制组装它,所以RAIDarrays被组装,然后尝试安装它,但得到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
在完全打破日益增长的RAID5之后,我如何保存数据?
我有一个3磁盘RAID5arrays,设备号3丢失,数据似乎是损坏的。
/ dev / sdd5:(5.45 TiB)6TB,arrays的设备1
/ dev / sdd5:(5.45 TiB)6TB,arrays的设备2
当操作中断,设备3被移除时,arrays正在从RAID1转换为RAID5。 该arrays仍在运行,直到设备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部分和未触及的部分组装一个块设备,在报告的respape位置进行切割(请参阅下面关于假设位置的注释)。 由于数据偏移量为2048扇区,我需要添加1024KiB的大小,以获得原始分区部分的偏移量:
#losetup -f --show /dev/md124 --sizelimit=1928186496K /dev/loop0 #losetup -f --show /dev/sda5 --offset=1928187520K /dev/loop1
为了组装这些部件,我创build了一个没有元数据的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年8月8日起,每个器件的GiB被重新塑造,RAID5部分将包含约3.6TB的有效数据,而且我使用了一个位置,这是重塑位置的两倍。 它安装得很好,但我的一些文件似乎包含无效的数据,一些文件在读取时发生I / O错误,一些文件夹丢失。
由于我有很多NEF(尼康)格式的RAW照片,我决定使用文件工具testing其中的一些。
预期结果:
# 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错误。
我决定去我的一些大型的照片集合,并testing它们的完整性 – 首先列出文件并计算输出中的行数。 任何读取错误都应该被写入屏幕。 接下来,通过检查是否有任何NEF文件无法识别,指示损坏的数据。 我过滤了文件的输出,并计算过滤的行。
# ls *.NEF -1 | wc -l 3641 # file *.NEF | grep "NEF: data" | wc -l 0
我做了很多我的照片文件夹,以确保所有的文件是可读的,他们的内容被识别。
使用3856372992K大小和3856374016K抵消,我得到了很多无效的数据和丢失的文件/文件夹,我试了一些其他值。
我发现上面提到的偏移和大小似乎通过了我的小testing。
如上所见,文件系统报告一些错误。 由于我不想在恢复所有内容之前将任何数据写入设备,所以我决定写一个快照写入覆盖文件,所以fsck.ext4所做的所有写入操作都将被写入此文件。
制作一个50GiB稀疏文件
# truncate /volume1/overlay.img -s50G
制作一个虚拟设备
#losetup -f --show /volume1/overlay.img /dev/loop3
用数据获取设备的大小:
# blockdev --getsz /dev/loop2 11711574528
创build覆盖设备(在此之前,我已经卸载/ 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
请注意,这些修补程序只能写入覆盖文件,并且需要提交给物理磁盘(如果它们应该是永久性的)。