我最近将 Vultr VPS 的 DD 映像传输到我的家用电脑。我使用 Debian VirtualBox VM 制作了一个新的虚拟磁盘,挂载了 DD 映像,并将 DD 映像中的所有文件 rsync 到新的虚拟磁盘。我/etc/fstab
使用新的 UUID 编辑了根文件系统,并/etc/networking/interfaces
使用虚拟磁盘上的新接口进行了编辑。然后我将其从此 VM 中分离出来。
我创建了一个全新的 VirtualBox VM,并连接了这个新创建的虚拟磁盘,并假设它会启动。但事实并非如此。我只看到黑屏上闪烁的光标。没有其他反应。我甚至/boot
从正在运行的 Debian VirtualBox VM 进行了 rsync。仍然只是一个闪烁的光标。
我是否遗漏了某些显而易见的东西?有什么想法吗?感谢您的意见。
答案1
有。
在启动过程中出现文件系统概念之前,需要加载一段能够理解文件系统的代码 - 这被称为引导加载程序,通常位于磁盘的前几个扇区或特殊 UEFI 分区上的特殊文件夹中。
在您的情况下,它很可能是 GRUB,需要安装在新映像上(再次:在根文件系统之外!)
从具有恢复模式的实时 Linux 系统启动并在虚拟磁盘上(重新)安装 Grub。
答案2
感谢@Eugen Rieck 的回答,我成功了!
还要感谢https://unix.stackexchange.com/questions/191218/how-to-install-grub-on-a-new-drive和 如何修复 grub.cfg 中的错误 UUID?
解决方案:
- 我启动了 GParted Live 并运行了终端会话。
sudo mount /dev/sda1 /mnt
sudo /mnt/usr/sbin/grub-install /dev/sda --skip-fs-probe --boot-directory=/mnt/boot
sudo sed -i 's/OLD-UUID/NEW-UUID/g' /mnt/boot/grub/grub.cfg
(我从 grub.cfg 文件中获得了旧的 UUID。它被列出了几次,因此用 进行全局替换sed
。而新的 UUID 来自blkid
。)