我的笔记本电脑主板坏了。我卸下了两个硬盘,但两个硬盘都还能用。然后我把它们都插到另一台电脑上,使用一些免费软件,得到了以下结果:
- 块大小:128 KB(256 个扇区)
- 数据从扇区 LBA 0 开始
- 区块图:1、2
- 我也知道驾驶顺序
我想知道这些信息是否足以重建阵列,如果足够,我该怎么做?
答案1
在同样的情况(主板坏了)下,我完全恢复了我同事的数据。该工具dmsetup
在 Linux 中。如果您没有安装 Linux,请使用 LiveCD,例如 Knoppix。
我不知道您是否熟悉 Linux。我的回答不会涵盖您可能需要的所有“显而易见”的基础知识(例如mkdir
或sudo
),因此如果您是 Linux 新手,请学习、在评论中提问等。
这里我假设您的两个驱动器是/dev/sda
和/dev/sdb
。将我的示例重新映射到您的实际值。
进一步调查
由于您知道 256 个扇区等于 128 KiB,因此扇区大小为 512 B。您需要知道每个磁盘上有多少个扇区。您说您知道驱动器顺序;这并不一定意味着您会知道/dev/sda
Linux 启动时哪个设备会是哪个。逐个调用:
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
构建,设备(按顺序)为(从其第 - 个扇区开始)和(也从其第 - 个扇区开始)。2
256
/dev/sda
0
/dev/sdb
0
现在您应该可以/dev/mapper/mydevice
使用了。(我不能 100% 确定在;dmsetup
中创建节点的每个实现都应该出现在某处。)/dev/mapper/
mydevice
安装
检查分区表应该是健全且有意义的:
gdisk -l /dev/mapper/mydevice
如果是 MBR,而不是 GPT,您可能会收到有关次级分区表与最后一个分区重叠的警告。这是因为gdisk
准备写入 GPT。您不需要这样做,也不会这样做。如果有警告,请忽略。除非您已经有 GPT 并且发生重叠,否则无需担心。
我见过有人使用dmsetup
或kpartx
创建与他们想要挂载的分区关联的节点。或者甚至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
先对它进行分区。