我使用 dd 备份了我的 NAS HDD,现在我正尝试安装映像以进行验证。使用 kpartx,我收到以下错误:
# kpartx -av 2018-02-23_dlink_nas.img
add map loop0p1 (253:0): 0 1060224 linear 7:0 64
device-mapper: resume ioctl on loop0p2 failed: Invalid argument
create/reload failed on loop0p2
add map loop0p4 (253:1): 0 1024080 linear 7:0 1060288
而分区 2 包含实际数据。我猜想这个错误是由于奇怪的文件系统结构造成的:
# file 2018-02-23_dlink_nas.img
2018-02-23_dlink_nas.img: DOS/MBR boot sector; partition 1 : ID=0x82, start-CHS (0x0,1,2), end-CHS (0x41,254,61), startsector 64, 1060224 sectors; partition 2 : ID=0x83, start-CHS (0x81,190,14), end-CHS (0x3ff,254,63), startsector 2084368, 3900393296 sectors; partition 4 : ID=0x83, start-CHS (0x44,41,48), end-CHS (0x85,254,59), startsector 1060288, 1024080 sectors
对于原始硬盘,我能够使用 mdadm 挂载它,因为数据分区是 linux_raid_partition。
有没有办法继续安装映像?如果数据丢失,能够访问我的数据就太好了。
更新:
(1)图像大小为 1,816,156,778,496 字节
(2)图像大小与原始硬盘非常吻合,
# fdisk -l /dev/sdd
Disk /dev/sdd: 1.8 TiB, 2000398934016 bytes, 3907029168 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: 0x6c640956
Device Boot Start End Sectors Size Id Type
/dev/sdd1 64 1060287 1060224 517.7M 82 Linux swap / Solaris
/dev/sdd2 2084368 3902477663 3900393296 1.8T 83 Linux
/dev/sdd4 1060288 2084367 1024080 500M 83 Linux
Partition table entries are not in disk order.# fdisk -l /dev/sdd
Disk /dev/sdd: 1.8 TiB, 2000398934016 bytes, 3907029168 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: 0x6c640956
Device Boot Start End Sectors Size Id Type
/dev/sdd1 64 1060287 1060224 517.7M 82 Linux swap / Solaris
/dev/sdd2 2084368 3902477663 3900393296 1.8T 83 Linux
/dev/sdd4 1060288 2084367 1024080 500M 83 Linux
Partition table entries are not in disk order.
(3)该硬盘是 RAID1 硬盘之一,我可以使用
mdadm --assemble --run /dev/md0 /dev/sdc2
然后安装/dev/md0
答案1
我已重建您的分区表并进行了一些测试。您收到以下错误:
device-mapper: resume ioctl on loop0p2 failed: Invalid argument create/reload failed on loop0p2
可能表示您的映像太小。事实上,您的分区 2 是最后一个分区(分区顺序不对),它需要映像至少有 3902477664(= 2084368 + 3900393296)个 512 B 扇区,即至少 1,998,068,563,968 B。但是……
图片大小为 1,816,156,778,496 字节
显然太小了。
图像尺寸与原始硬盘非常吻合。
不,不是。您的任何一个磁盘都有 2,000,398,934,016 B,足以容纳所有分区。所有的HDD 应大小相同。
磁盘可能仅被部分读取dd
或图像已以某种方式被截断,或者已通过其他方式损坏。