awk*_*ksp 8 linux raid hard-drive data-recovery logical-drive
我有两个 500GB 硬盘,来自我工作场所的一台旧 Windows 笔记本电脑。我的老板让我尽可能将内容复制到文件服务器,但要注意绝对不会丢失任何数据。
通常情况下,备份就足够了,但这是从操作的早期开始,当时备份之类的东西没有更严格地保存,而且这个人的组织非常糟糕,所以我不确定备份是否最多- 最新(或什至是最新的)内容。
我做的第一件事是使用ddrescue. 复制了分区表的驱动器没有错误,另一个驱动器因错误丢失了大约 150 KiB。图像以只读方式安装到/dev/loop1并/dev/loop2使用losetup. fdisk -l显示以下内容:
Disk /dev/loop1: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop2: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x87afa6ad
Device Boot Start End Sectors Size Id Type
/dev/loop2p1 2048 31459327 31457280 15G 27 Hidden NTFS WinRE
/dev/loop2p2 * 31459328 31664127 204800 100M 27 Hidden NTFS WinRE
/dev/loop2p3 31664128 1191071167 1159407040 552.9G 7 HPFS/NTFS/exFAT
/dev/loop2p4 1191071168 1953533951 762462784 363.6G 7 HPFS/NTFS/exFAT
Run Code Online (Sandbox Code Playgroud)
分区大小似乎表明这是一个 RAID 阵列或 Windows 逻辑驱动器,快速检查blkid显示驱动器类型为isw_raid_member. 尝试组装数组mdadm -v --assemble /dev/md0 /dev/loop2 /dev/loop1产生以下输出:
mdadm: looking for devices for /dev/md0
mdadm: Cannot assemble mbr metadata on /dev/loop2
mdadm: /dev/loop2 has no superblock - assembly aborted
Run Code Online (Sandbox Code Playgroud)
我尝试安装驱动器或获取更多信息的其他事情是:
mount /dev/loop2 <mount point>: 失败 unknown filesystem type 'isw_raid_member'mount -t 使用 NTFS 和 exFAT:无法找到文件系统mount /dev/loop2p[1234]: Special device <dev> does not existmdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/loop[21]:/dev/loop2似乎是没有设备且创建日期为 1970 年 1 月 1 日 00:00:00 的 raid 0 阵列的一部分的状态mdadm -E /dev/loop[12]:美国已检测上没有md超/dev/loop1和打印出的分区和MBR的幻数aa55为/dev/loop2file -s /dev/loop1: 印刷 /dev/loop1: datafile -s /dev/loop2: 吐出一个文本块,基本上说它是一个 DOS/MBR 引导扇区,并给出了分区偏移/大小的原始数字。mount -t ntfs -o ro,offset=$((512*2048)) /dev/loop2 /mnt/partition1:
NTFS signature is missing
Failed to mount '/dev/loop3': Invalid argument
The device '/dev/loop3' doesn't seem to have a valid NTFS
Run Code Online (Sandbox Code Playgroud)
不,我没有打错那个3。不知从何而来。
我还查看了Recovering a failed software RAID,但这似乎是为了在 Linux 上恢复已经工作的 Linux 阵列(更不用说相当多的事情了)。
我能做些什么来安全地安装这些图像吗?
注意:我在OP通过评论、试验和错误获得帮助后写了这个答案。考虑到其他用户,我将答案变得更广泛且更通用。
\n\n如果这两个磁盘一起工作,它们可能是
\n\n这些案例是从最容易处理的开始排序的。我将指导您如何区分它们以及如何处理它们以最终安装分区。
\n\n应首先完成安装-o ro,直到确定安装正确为止。在某些情况下mount可能会成功并让您访问损坏的目录结构和/或混乱的文件。疯狂的数据和/或元数据表明您没有得到正确的结果。以只读方式安装可确保您不会损坏图像。
在这种情况下,如果健康的话,两个磁盘应该包含相同的数据;它们都应该包含相同的有效分区表。只有您拥有的映像/dev/loop2报告分区表。这可能是因为
0)。然而,有一个重要线索使得 RAID1 在您的情况下几乎不可能:表示单个磁盘上fdisk确实有扇区,但第四个分区的最后一个扇区是。这几乎是两倍,这表明分区布局在两个非镜像磁盘上生成。9767731681953533951
但假设您的磁盘是原来的两倍,并且上述线索不适用。如果您认为可以处理镜像磁盘,然后使用没有错误获得的映像,则不要理会其他映像。尝试像这样挂载分区:
\n\nmount -o ro,offset=$((512*2048)) /dev/loop2 /mnt/partition1\nmount -o ro,offset=$((512*31459328)) /dev/loop2 /mnt/partition2\nmount -o ro,offset=$((512*31664128)) /dev/loop2 /mnt/partition3\nRun Code Online (Sandbox Code Playgroud)\n\n您甚至可能不使用losetupget/dev/loop2而是直接提供文件路径,mount应该自己创建一个循环设备并处理这个问题:
mount -o ro,offset=$((512*2048)) /path/to/the/image2.raw /mnt/partition1\nRun Code Online (Sandbox Code Playgroud)\n\n如果构建JBOD的磁盘使用MBR来存储分区表,fdisk则只会在第一个磁盘上找到它。其他磁盘可能不报告任何内容或报告一些疯狂的分区表;从非第一个磁盘获得看起来正常的分区表的概率非常低,但即使这样,这个分区表也没有任何意义。
如果构建 JBOD 的磁盘使用 GPT 来存储分区表,类似的工具gdisk将在第一个磁盘上找到主表,在最后一个磁盘上找到辅助(备份)表。
您有两个映像,其中一个报告有 DOS 分区表(即 MBR 中的分区表),另一个报告没有分区表。如果他们创建 JBOD,您知道对应的 JBOD/dev/loop2首先创建。
在您的情况下,分区 1 和 2 足够小,可以完全放入 JBOD 的第一个磁盘。您可以尝试以距鞋底适当的偏移安装它们/dev/loop2。如果这使您能够访问正常的文件系统,那么您就会知道 JBOD 可能是正确的设置。要访问所有分区,您需要连接图像。
我的这个答案提供了一种连接图像而不将结果写入磁盘的方法。根据您的情况,程序可能是:
\n\ndmsetup create mydisk0 976773168 linear /path/to/the/image2.raw 0 Enter976773168 976773168 linear /path/to/the/image1.raw 0 Enter最终的设备应该是/dev/mapper/mydisk. 尝试使用适当的offset=\xe2\x80\xa6.
要销毁设备,请调用dmsetup remove mydisk.
与JBOD类似,如果构建RAID0的磁盘使用MBR来存储分区表,fdisk则只会在第一个磁盘上找到它。其他磁盘可能不报告任何内容或报告一些疯狂的分区表;从非第一个磁盘获得看起来正常的分区表的概率非常低,但即使这样,这个分区表也没有任何意义。
如果构建RAID0的磁盘使用GPT来存储分区表,情况就会变得复杂。根据条带大小的大小,您可能会也可能不会从第一个磁盘获取主分区表,您可能会也可能不会从最后一个磁盘获取辅助(备份)分区表。您应该从第一个磁盘获取旧版 MBR(除非发生读取错误)。
\n\n您有两个映像,其中一个报告有 DOS 分区表(即 MBR 中的分区表),另一个报告没有分区表。如果他们创建 RAID0,您知道对应的 RAID0 将/dev/loop2首先出现。您不知道的是条带大小。一般来说,没有固定的方法可以知道它,您应该尝试通用值并分析结果。
交错图像和创建虚拟设备的过程如下:
\n\ndmsetup create mydisk0 1953546336 striped 2 256 /dev/loop2 0 /dev/loop1 0 Enter最终的设备应该是/dev/mapper/mydisk. 数字 256 表示条带大小为 128 KiB,必须猜对。一般来说,无论以前的 GPT 可能出现什么问题dmsetup,gdisk -l /dev/mapper/mydisk如果您猜对了条带大小,现在应该返回一个有效的分区表。如果您猜错了,分区表可能有效,也可能无效。如果它看起来有效,请尝试使用适当的方法挂载其中的所有分区offset=\xe2\x80\xa6。
在您的情况下,分区表肯定是您从中获得的分区表/dev/loop2.
请注意,即使猜测错误,您也可能能够挂载,但文件会被打乱。在这种情况下umount,请使用另一个值而不是 256 来调用dmsetup remove mydisk并重复dmsetup create\xe2\x80\xa6。要尝试的数字:8、16、32、64、128、256,也许是 2 的其他幂。如果可能,读取具有可验证内容的文件(例如 MP3 等媒体)它们播放时没有抖动?)或正式结构(例如 PDF,它们打开时是否没有错误?)来判断您的猜测是否正确。小于右侧的文件条带大小的文件可能不会表明您的猜测是错误的,因此您应该使用 700 MB 的 avi,而不仅仅是几 KB 的文本文件。
要销毁设备,请调用dmsetup remove mydisk.
| 归档时间: |
|
| 查看次数: |
6195 次 |
| 最近记录: |