![无法使用克隆的 VM、OpenSUSE、VirtualBox](https://linux22.com/image/1317142/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E5%85%8B%E9%9A%86%E7%9A%84%20VM%E3%80%81OpenSUSE%E3%80%81VirtualBox.png)
我已经克隆了一个虚拟机,现在启动它时我看到一条消息:
Trying manual resume from /dev/sda1
Invoking userspace resume from /dev/sda1
resume: libgcrypt version: 1.5.0
Trying manual resume from /dev/sda1
invoking in-kernel resume from /dev/sda1
Waiting for device /dev/disk/by-id/ata-VBOX_HARDDISK_.....-part2 to appear: ...
Could not find /dev/disk/...-part2
Want me to fall back to /dev/disk/...-part2 (Y/n)
如果我按“Y”,它会尝试再次启动但失败,然后退出到 /bin/sh。如果我按“n”,它会立即退出到 /bin/sh。
我在这里读过一个解决方案:http://diggerpage.blogspot.com/2011/11/cannot-boot-opensuse-12-after-cloning.html但我不明白如何访问磁盘上的文件进行编辑/etc/fstab
和/boot/grub/menu.lst
?
答案1
我可以通过执行以下操作来启动系统:
1) 记下系统无法找到的设备。
2) 回答“n”。它会带你进入命令提示符。
3)运行此命令:cd /dev/disk/by-id
4)运行此命令:ls
5) 重命名此文件夹中的所有文件,将其当前名称替换为您在步骤 1 中记下的设备名称。例如。mv ata-VBOX_OLDNAME....-part2 ata-VBOX_HARDDISK....-part2
6)完成此操作后,请输入以下命令:exit
7)系统应正常启动。
我仍在研究 OpenSUSE 11.4 中出现此问题的原因。
答案2
导致此问题的原因是 SUSE 默认将 Grub 配置为按名称而不是按标签或路径查找磁盘。从设备创建虚拟机时,VirtualBox 会创建一个具有新名称的新磁盘,然后 Grub 找不到启动磁盘。我能够解决这个问题永久经过:
将磁盘作为辅助驱动器添加到另一台可以安装文件系统的机器上。我将我的磁盘安装到 /media/hd2。
编辑 /media/hd2/boot/grub/device.map 并将硬盘的按名称路径替换
/dev/disk/by-name/ata-VBOX....
为按路径路径/dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0
。编辑 /media/hd2/boot/grub/menu.lst 并将按名称路径替换为按路径路径。对于我来说,我最终用 替换了所有第 1 部分路径,
/dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0-part1
用 替换了第 2 部分路径/dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0-part2
。
我使用的路径指定了第一个硬盘。如果要从其他硬盘(或不同磁盘类型)启动,则需要弄清楚 SUSE 如何映射路径。我发现 SUSE 会将第二个硬盘安装为pci-0000:00:0d.0-scsi-1:0:0:0
。
在某些情况下,指定硬盘路径可能并不理想,但它对于我想要的快速修复非常有效。
答案3
我遇到了这个错误,并通过在 etc/fstab 和 boot/grub/menu.lst 上用新的磁盘 ID 替换旧的磁盘 ID 来解决
- 针对后退问题点击‘n’。
- 运行以下命令获取新 ID
hdparm -i /dev/sda
- 按照接受的解决方案重命名所有磁盘并启动您的客户机。
- 以 root 身份打开终端,
vi etc/fstab
并在显示的地方用新 ID 替换旧 ID。保存并关闭。 vi boot/grub/menu.lst
并在显示的地方用新 ID 替换旧 ID。保存并关闭。- 重启。
可接受的解决方案只能一次性起作用,而这是一个永久修复。 希望能帮助到你!
答案4
我通过混合使用其他解决方案来解决这个问题。
仅用于启动我这样做的系统:
- 当你收到启动错误消息时,记下启动过程所请求的分区 ID(例如 ID1)并输入
n
cd /dev/disks
ls -l
查看磁盘和分区的链接名称中的当前 ID 是哪些(例如 ID2)在此处创建每个链接的副本,并使用上面所需的 id 重命名副本:
mv ID2 ID1 mv ID2-part1 ID1-part1 ...
例如
mv scsi-12345676890abcdefgh0987654321 scsi-0987654321hgfedcba1234567890 mv scsi-12345676890abcdefgh0987654321-part1 scsi-0987654321hgfedcba1234567890-part1 ...
exit
系统将启动。
现在你可以更改设置确保不会再遇到这个问题:
- 打开终端并进入 root 会话
sudo su
vi /etc/fstab
- 将对磁盘和分区的每个引用通过 id () 替换为对(例如... )
/dev/disks/by-id/...
的引用/dev/...
/dev/sda
/dev/sda1
vi /boot/grub/menu.lst
- 在此文件中执行相同操作