一些背景
- 该磁盘本身是由一位朋友“处理”的,据说仍然完好无损,未损坏并且仍然可以安装/恢复
- 该磁盘是 Ubuntu 12.04 上软件 raid 1 的一部分
- 原始 raid 1 中的另一个磁盘已格式化并用于其他目的,使当前磁盘(有问题的磁盘)在技术上仍然是不再存在的 raid 的一部分
我已经尝试过了
基本安装
- 我在 fstab 中添加了一个条目,将磁盘标记为 ext3/ext4 并尝试挂载。
安装后出现以下错误
wrong fs type, bad option, bad superblock on
并且在消息
EXT4-fs (sdc1): VFS: Can't find ext4 filesystem
我试图找到磁盘的文件系统类型并提出
$sudo file -s /dev/sdc
/dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8
我需要帮助/我的问题
- 有没有办法在不损坏数据的情况下将磁盘转换为ext4?
- 有没有简单的方法来挂载Linux 83文件类型磁盘并恢复数据?
- 我目前还有另一个空闲磁盘,以防有可能以某种方式重建 raid
- 我的主要目标是从磁盘恢复数据。我对所有选择持开放态度。
更新
一些命令的输出
fdisk -l /dev/sdc
$fdisk -l /dev/sdc
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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 identifier: 0x0005ed9c
Device Boot Start End Blocks Id System
/dev/sdc1 63 1953520064 976760001 83 Linux
文件-s /dev/sdc1
$file -s /dev/sdc1
/dev/sdc1: data
hexdump -C -n 32256 /dev/sdc(不确定这是否有帮助)
$hexdump -C -n 32256 /dev/sdc` 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 9c ed 05 00 00 00 00 fe |................| 000001c0 ff ff 83 fe ff ff 3f 00 00 00 82 59 70 74 00 00 |......?....Ypt..| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00007e00
答案1
这在 Ubuntu 14.04 中运行得非常好:
sudo -i
mdadm --assemble --scan
你会得到:
mdadm: /dev/md/1 has been started with 1 drive (out of 2)
然后安装并查看您的文件:
cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1
答案2
Linux mdraid 有几种元数据格式。格式 0.9 和 1.0 将元数据放在包含设备的末尾,有效负载(文件系统)从设备的开头开始,可以直接访问,无需通过 raid 层。格式 1.1 和 1.2 将元数据分别放在包含设备的中间和开头,因此有效负载位于偏移处。
Ubuntu 安装程序使用 1.2 元数据格式创建卷,因此您的数据在元数据之后开始,而不是在设备的开头。
访问该数据的最简单方法是组装 raid 设备。在 RAID-1 卷中,单个设备就足够了。
madadm -A /dev/sdc1
(停在这里,除非你喜欢痛苦。)
您还可以按偏移量访问数据。我认为这样做的唯一一点是,如果您必须在不支持 1.x mdraid 格式的非常旧的内核中工作。首先,确定偏移mdadm -E /dev/sdc1
:寻找直线Data Offset : SSS sectors
。一个 mdadm 扇区为 512 字节。
sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1
无奈之下,在 1.x 格式中,数据偏移量存储在元数据的第 128-135 字节中,即小端优先。 1.2 元数据是设备开始后的 4096 字节。
您还可以更改分区表以使其进一步启动。算术时要非常小心。仅当您想在无法访问 RAID 设备的旧系统中长期使用该磁盘时,才需要执行此操作。
或平台字节顺序?我不知道。
答案3
令我惊讶的是,我能够通过简单地使用来恢复数据最重要的。
这里得到的帮助是无价的。在尝试了各种建议的组合以及我自己的混合之后,理想的方法(正常安装和使用磁盘)似乎不再是一个选择。在这种情况下,诉诸数据恢复是我的解决方案。
答案4
您似乎已经消除了 mdadm 超级块。如果它曾经存在并且格式为 1.1 或 1.2,则文件系统很可能位于偏移量 2048 扇区。您可以运行e2fsck /dev/sdc1?offset=2048
以强制它从该偏移量开始查找文件系统。如果找到它,那么您可以修改分区表以指向文件系统实际启动的位置。您可以使用parted /dev/sdc
和unit s
命令来使用扇区单位。 print
表中,记下开始和结束扇区,然后是rm
分区,然后重新创建它mkpart
并使用相同的结束扇区,但将偏移量添加到开始扇区。
如果 2048 不起作用,您也可以尝试 1985。