如果我知道块大小和起始偏移量,如何重建 RAID 0 阵列(没有驱动器出现故障)?

如果我知道块大小和起始偏移量,如何重建 RAID 0 阵列(没有驱动器出现故障)?

我的笔记本电脑主板坏了。我卸下了两个硬盘,但两个硬盘都还能用。然后我把它们都插到另一台电脑上,使用一些免费软件,得到了以下结果:

  • 块大小:128 KB(256 个扇区)
  • 数据从扇区 LBA 0 开始
  • 区块图:1、2
  • 我也知道驾驶顺序

我想知道这些信息是否足以重建阵列,如果足够,我该怎么做?

答案1

在同样的情况(主板坏了)下,我完全恢复了我同事的数据。该工具dmsetup在 Linux 中。如果您没有安装 Linux,请使用 LiveCD,例如 Knoppix。

我不知道您是否熟悉 Linux。我的回答不会涵盖您可能需要的所有“显而易见”的基础知识(例如mkdirsudo),因此如果您是 Linux 新手,请学习、在评论中提问等。

这里我假设您的两个驱动器是/dev/sda/dev/sdb。将我的示例重新映射到您的实际值。

进一步调查

由于您知道 256 个扇区等于 128 KiB,因此扇区大小为 512 B。您需要知道每个磁盘上有多少个扇区。您说您知道驱动器顺序;这并不一定意味着您会知道/dev/sdaLinux 启动时哪个设备会是哪个。逐个调用:

gdisk -l /dev/sda
gdisk -l /dev/sdb

这些命令之一应该会显示一个合理的分区表,它指示阵列中的第一个设备(这些知识以后会很有用)。忽略警告(如果有)。每个命令还会显示相应磁盘的扇区数。这两个数字可能相等,也可能不相等。如果相等,则将数字乘以 2(一般来说:乘以磁盘数);如果不相等,则取最小数字并乘以 2。结果是 RAID0 可以利用的最大扇区数。我们称之为

但是!您的阵列应该有一个磁盘的 256 个扇区,然后是另一个磁盘的 256 个扇区,依此类推,数量相等。因此,阵列中的扇区数应该能被 512 整除。可能无法被整除,因此您应该选择最接近的、可以被 512 整除的不大整数。使用计算器或例如 bash(将“N”替换为您的实际数字):

M=$((N/512*512))
echo $M

这是数组中最可能的扇区数。现在最重要的是:这是有效数字,即使由于某种原因实际数字小于该数字。

创建映射设备

以下命令几乎应该是适合您的命令:

echo "0 $M striped 2 256 /dev/sda 0 /dev/sdb 0" | dmsetup create mydevice

我写“几乎”是因为只有几件事情需要调整:

  • $M如果你使用计算器而不是 shell 算术,请手动用其适当的值替换;
  • 更改设备顺序和名称以适合您的情况;
  • 您可能需要sudo运行dmsetup

的参数echo是您的设备映射,mydevice是任意名称。映射表示(按顺序)新设备片段从0第 - 个扇区开始并覆盖$M扇区,由扇区条带大小为的设备striped构建,设备(按顺序)为(从其第 - 个扇区开始)和(也从其第 - 个扇区开始)。2256/dev/sda0/dev/sdb0

现在您应该可以/dev/mapper/mydevice使用了。(我不能 100% 确定在;dmsetup中创建节点的每个实现都应该出现在某处。)/dev/mapper/mydevice

安装

检查分区表应该是健全且有意义的:

gdisk -l /dev/mapper/mydevice

如果是 MBR,而不是 GPT,您可能会收到有关次级分区表与最后一个分区重叠的警告。这是因为gdisk准备写入 GPT。您不需要这样做,也不会这样做。如果有警告,请忽略。除非您已经有 GPT 并且发生重叠,否则无需担心。

我见过有人使用dmsetupkpartx创建与他们想要挂载的分区关联的节点。或者甚至dd“提取”分区并挂载结果文件。这些都不是必需的。如今,您可以mount通过选项从整个设备内部创建分区offset。例如,如果您需要挂载的分区从扇区 63 开始。(Windows XP 系统分区的常用值),那么您可以像这样挂载它:

mount -o offset=$((512*63)),ro /dev/mapper/mydevice /mnt/foo

-o ro我强烈建议首先以只读方式挂载 ( )(或者,如果您只是想取出数据,则完全不挂载)。如果您使用的软件出现问题,或者我犯了某个命令的错误,那么您可能会损坏数据,除非您以只读方式挂载。这是使用ro选项的一个很好的理由,至少在您浏览文件系统、读取一些文件(即播放mp3-s 和avi-s、读取pdf-s、显示jpg-s 等)并确认一切似乎都正常之前。

打扫

摧毁/dev/mapper/mydevice

dmsetup remove /dev/mapper/mydevice

当然你应该umount先对它进行分区。

相关内容