我刚刚在 Linux 下用 dd 备份了两个分区,所以我有原始分区映像:part1.img 和 part2.img。此外,我还备份了磁盘的 MBR(磁盘的前 512 个扇区)和一些文本信息(“fdisk -l” /dev/sdb)。
fdisk -l /dev/sdb said before I did dd:
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7d22da32
Device Boot Start End Blocks Id System
/dev/sda1 * 1 196 1574338+ 27 Unknown
/dev/sda2 197 19457 154713982+ 7 HPFS/NTFS
这是标准的笔记本电脑磁盘,因此第 1 部分是系统恢复分区。第 2 部分是 Windows Vista 可启动分区。
然后我将 part2.img 转换为 part2.vdi(VirtualBox 磁盘格式)。我将 part2.vdi 附加到现有的虚拟 XP 机器,我可以浏览它并删除我想要的内容(part2.vdi 是第二个分区,不是从它启动的)。
然而问题是当我想将 part2.vdi 附加到虚拟化 Linux 系统并想要安装它时。
now fdisk -l /dev/sdb says (sdb being part2.vdi here, so not whole disk as before):
Disk /dev/sdb: 158.4 GB, 158427250688 bytes
255 heads, 63 sectors/track, 19261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2052474d
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sdb1 ? 410 119791 958924038+ 70 DiskSecure Multi-Boot
Partition 1 does not end on cylinder boundary.
/dev/sdb2 ? 121585 234786 909287957+ 43 Unknown
Partition 2 does not end on cylinder boundary.
/dev/sdb3 ? 14052 14052 5 72 Unknown
Partition 3 does not end on cylinder boundary.
/dev/sdb4 164483 164486 25945 0 Empty
Partition 4 does not end on cylinder boundary.
Partition table entries are not in disk order
问题出在哪里?为什么 Windows 会自动“挂载”分区(看不到奇怪的条目)并且我可以访问数据,但在 Linux 下分区表条目却有问题?我该如何解决它而不丢失数据/分区完整性?
答案1
fdisk
仅适用于整个磁盘。part2.vdi 只是一个分区。
磁盘格式大致为:
<MBR><Part Table><Part 1><Part 2>
你只有<Part 2>
——其中没有<Part Table>
包含任何东西。
Windows 将其上的文件系统识别为 NTFS 并按此进行处理。
您可能只需使用以下命令在 Linux 中安装它:
# mount -t ntfs /dev/sdb /path/to/mount
无需担心分区表等。