![如何恢复 iSCSI 磁盘](https://linux22.com/image/206191/%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%20iSCSI%20%E7%A3%81%E7%9B%98.png)
我在 Linux 服务器 (RHEL7) 上运行 iSCSI 磁盘。该磁盘有一个普通的 ext4 分区,其中包含一个名为 disk01.img 的循环设备,该设备映射到具有 Windows NTFS 文件系统的虚拟磁盘。一切都很好,直到 Windows 和 Linux 系统之间的以太网连接中断。 Windows 决定应该检查 NTFS 卷,最终建议重新格式化它。在接受之前,我将文件 disk01.img 保存到 Linux 服务器上的 /savedir 中。我现在正在尝试恢复 disk01.img,但遇到了问题。
[root@server ~]# losetup -P /dev/loop1 /savedir/disk01.img
[root@server ~]# mount -t ntfs /dev/loop1 /mount/point
Failed to read bootsector (size=0)
Failed to sync device /dev/loop1: Input/output error
Failed to mount '/dev/loop1': Ongeldig argument
The device '/dev/loop1' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
我想 NTFS 卷可能已损坏,我需要将文件 disk01.img 添加到具有空 NTFS 分区的 USB 磁盘上,然后将 USB 磁盘移植到 Windows,运行 chkdsk,如果失败,请尝试使用某些东西恢复文件就像照片记录一样。或者我只是使用了错误的代码?
编辑:fdisk 的结果(荷兰语)
[root@server ~]# fdisk -l /savedir/disk01.img
Schijf /savedir/disk01.img: 750.2 GB, 750155323392 bytes, 1465147116 sectoren
Eenheid = sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logischl/fysiek): 512 bytes / 512 bytes
in-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
[root@server ~]#
编辑2:NTFS卷已损坏,因此losetup -P正在工作,但产生了一个空分区。我可能需要使用 iSCSI 扇区的偏移量来挂载 /savedir/disk01.img,例如
mount -o loop,offset=512 /savedir/disk01.img /mount/point
但我很难找到正确的偏移量(寻找 NTFS 签名,将 *.img 文件的十六进制转储与新创建的虚拟磁盘的十六进制转储进行比较)。顺便说一句:我还将 disk01.img 的 dd 副本移植回 Windows,试图解析这些文件。仍在处理这个繁琐的操作。在 disk01.img 上找到 NTFS 文件系统的开头似乎是一个更好的选择。
编辑 3. 运行 TestDisk 4 次后,似乎存在我无法解决的几何问题。输出:
losetup -P /dev/loop1 /savedir/disk01.img
testdisk /dev/loop1
Disk /dev/loop1 - 750 GB / 698 GiB - 1465147116 sectors
... ... ...
Linux filesys. data 0 1465147111 1465147112
Linux filesys. data 0 1465147111 1465147112
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
MS Data 100452352 1526511615 1426059264
Linux filesys. data 0 1465147111 1465147112
... ... ...
Linux filesys. data 730080712 2195227823 1465147112
Linux filesys. data 730090720 2195237831 1465147112
... ... ...
Linux filesys. data 730093536 2195240647 1465147112
Linux filesys. data 0 1465147111 1465147112
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
MS Data 1346517247 2772576510 1426059264
------------------------------------------------------
-- After Reboot --
Linux 0 1465147111 1465147112
Linux 0 1465147111 1465147112
check_FAT: can't read FAT boot sector
Invalid FAT boot sector
0 D FAT16 LBA 3179978961 3795078107 615099147
FAT16 LBA 3179978961 3795078107 615099147
Linux 0 1465147111 1465147112
Invalid FAT boot sector
0 D FAT12 202831329 1489073369 1286242041
FAT12 202831329 1489073369 1286242041
Linux 0 1465147111 1465147112
Invalid NTFS or exFAT boot
0 D HPFS - NTFS 2833862451 3582746086 748883636
HPFS - NTFS 2833862451 3582746086 748883636
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
HPFS - NTFS 100452352 1526511615 1426059264
Disk /dev/loop1 - 750 GB / 698 GiB - 1465147116 sectors
The harddisk (750 GB / 698 GiB) seems too small! (< 1943 GB / 1809 GiB)
Check the harddisk size: HD jumper settings, BIOS detection...
The following partitions can't be recovered:
Partition Start End Size in sectors
> HPFS - NTFS 100452352 1526511615 1426059264
FAT12 202831329 1489073369 1286242041
Linux 730069008 2195218167 1465149160
Linux 730071112 2195218223 1465147112
Linux 730079744 2195226855 1465147112
Linux 730080712 2195227823 1465147112
Linux 730090720 2195237831 1465147112
Linux 730093536 2195240647 1465147112
HPFS - NTFS 1346517247 2772576510 1426059264
HPFS - NTFS 1465145007 2930290014 1465145008
NTFS, blocksize=4096, 730 GB / 679 GiB
--------------------------------------
-- After adding TestDisk MBR, Reboot
Linux 0 1465147111 1465147112
Linux 0 1465147111 1465147112
Linux 0 1465147111 1465147112
Linux 0 1465147111 1465147112
check_FAT: can't read FAT boot sector
Invalid FAT boot sector
0 D FAT16 LBA 3179978961 3795078107 615099147
FAT16 LBA 3179978961 3795078107 615099147
Linux 0 1465147111 1465147112
Linux 0 1465147111 1465147112
Invalid FAT boot sector
0 D FAT12 202831329 1489073369 1286242041
FAT12 202831329 1489073369 1286242041
Linux 0 1465147111 1465147112
Invalid NTFS or exFAT boot
0 D HPFS - NTFS 2833862451 3582746086 748883636
HPFS - NTFS 2833862451 3582746086 748883636
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
Warning: number of heads/cylinder mismatches 255 (NTFS) != 1 (HD)
Warning: number of sectors per track mismatches 63 (NTFS) != 1 (HD)
HPFS - NTFS 100452352 1526511615 1426059264
-------------------------------------
-- After Reboot, running Deeper Analysis ---
Disk /dev/loop1 - 750 GB / 698 GiB - 1465147116 sectors
No partition 36028797018963967 1465147115 1465147117
Enter the ending sector
--------------------------------------
答案1
挂载失败/dev/loop1
表明该映像文件不是有效的分区映像。由于它是用作 iSCSI 磁盘的映像的副本,因此我希望它是包含分区表的完整磁盘映像。
然而,fdisk -l /savedir/disk01.img
表示不存在可识别的分区表。即使 iSCSI 磁盘用作 Microsoft 存储空间设置的一部分,也应该至少有一存在分区。
即使您有旧版本fdisk
只能识别 MBR 分区表,并且该映像使用 GPT 分区表,它至少应该检测到 GPT保护性MBR及其类型为 0xee 的虚拟分区条目。
这表明分区表可能已损坏或被覆盖。您可能想尝试testdisk
使用全磁盘循环设备,看看它是否可以找到文件系统的开头和结尾并为您重建分区表。
testdisk /dev/loop1
或者,现代版本的 Windows 通常将磁盘第一个分区的开头放置在距离磁盘开头正好 1 MiB 的位置。所以你可以尝试:
mount -o loop,offset=1M /savedir/disk01.img /mount/point