我有一台上网本,硬盘被分成 3 个分区。在其中一个分区(例如 /dev/sda2)上,我安装了一个 Crunchbang Linux 实例。我使用“dd”命令(dd if=/dev/sda2 of=<...>)将其备份到外部硬盘中。
现在,我已经改变了上网本上的分区方案,所以图像不再适合较小的新分区,但我想查看旧实例上的一些配置文件,所以我决定将原始备份转换为 vmware (.vmdk) 文件并创建一个 VM 并启动该实例。
但是..看起来当时我必须将 /boot 放在单独的分区(/dev/sda1)上,我忘记备份了 :(。现在 VMware 实例无法启动,因为它无法在虚拟硬盘上找到操作系统。
有什么补救措施吗?我可以创建一个小的虚拟磁盘并在虚拟机内安装 grub2 和内核映像并从那里启动吗?怎么做?任何想法都值得赞赏!
答案1
创建 Crashbang Linux VM,从中启动 VM,然后将 VMDK 或原始备份挂载为辅助卷。请参阅 VMWare 用户指南第 7 页,了解如何将映像挂载为单独的分区这里。
答案2
如果您只需要查找一些文件,您可以轻松地在自己的 Linux 中挂载 .vmdk 文件,而无需任何 VM:
losetup /dev/loop0 /path/to/your/file.vmdk
losetup -o 32256 /dev/loop1 /dev/loop0
mount /dev/loop1 /your/mount/point
诀窍在于偏移量,在本例中为 32256。这将适用于第一个分区,但如果您不想挂载第一个分区,则在第一个命令之后您必须使用磁盘管理在循环设备上:
fdisk -l /dev/loop0
那么偏移量就是每个扇区的字节数乘以您想要挂载的分区的起始位置的乘积。
如果你也想启动它我思考您需要做的就是将 /boot 目录从任何其他正在运行的相同架构的 Crunchbang 安装复制到您的旧映像中,chroot 进入其中,更新 grub,然后就可以开始了。您可以在 Crunchbang VM 未运行时从其实例执行此操作:只需将新实例的映像保存到新的 vmdk 文件中,将其像另一个一样挂载,将 /boot 从新映像复制到旧映像,chroot 进入旧映像,更新 grub,等等。