一台 Linux PC 目前因主板故障而死机。但是硬盘仍在工作。我将磁盘移植到另一台 Linux 机器上,发现所有内容都可以读取。
现在我想恢复旧电脑,但作为虚拟机。是否可以在不首先将磁盘转换为映像文件(即使用现有磁盘运行)的情况下完成此操作?我还不知道 KVM 还是 LXC 是更好的选择,但更喜欢 LXC,因为主机 PC 相当慢。这可能吗?我在虚拟机部署方面的经验相当有限......
顺便说一句,两台计算机都运行 Gentoo Linux。
编辑
现在感谢所有答案。澄清一下,我需要硬盘来运行某种虚拟机的主要原因是旧计算机是小型 coda 集群的主要 coda 服务器。我无法(轻松)从“原始”副分区中获取数据,因此仅运行容器可能是最简单的方法。主机在硬件功能方面受到很大限制,因此仅通过 dd 克隆磁盘是行不通的 - 没有足够的空间(!)(不要问为什么:-/ - 一个相当奇怪的设置)。此外,旧PC也使用LVM。然而,各种分区和 LVM LV 可以很好地安装在新主机上 - 数据都在那里,有一次我什至不小心用旧磁盘作为“用户区”(新内核,旧用户区)启动了新主机- 有效,所以系统非常相似。
LXC 设置的魅力在于它不需要那么多资源。缺点是我不知道 CODA 服务器在容器中是否能正常运行 - 因此将它们放入完整的虚拟机中可能会更安全。
答案1
可以使用 VirtualBox 从物理硬盘启动。手动:使用来宾的原始主机硬盘。
围绕这个我写了一篇德语指南:双启动-Windows 虚拟化。它的重点是启动物理 Windows,但它也适用于 Linux。
你要做的核心要点:
- 安装 VirtualBox。确保
vboxusers
之后成为该组的成员。 - 找出新硬盘的设备文件(例如
/dev/sdb
) - 在 VirtualBox 中创建虚拟机没有一个虚拟硬盘(我称之为
oldsys
) - 以 root 身份:创建指向新硬盘的 vmdk 文件
VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/oldsys/oldsys.vmdk -rawdisk /dev/sdb
将所有者
oldsys.vmdk
从 root 更改为您的所有者。例如,创建 udev 规则以允许自己进行原始磁盘访问
KERNEL=="sdb", OWNER="myusername", MODE="0600"
在 VirtualBox 中,插入
oldsys.vmdk
VM oldsys 的虚拟 SATA 控制器。如果oldsys是EFI启动的系统,请将“系统”中oldsys的VM设置更改为“激活EFI”
您可能还需要启用“IO-APIC”。
重新启动以启用 udev 规则
在 VirtualBox 中运行 oldsys。它应该可以正常启动。
答案2
我建议使用捕获磁盘映像解救然后使用映像文件来支持虚拟机的存储。这样,如果您的虚拟化计划出现任何问题,您的数据原始副本就不会面临风险。
KVM 肯定可以工作,因为它可以启动完整的操作系统。 LXC 可能会起作用,具体取决于系统的相似程度。 LXC 的主要限制是,无论您在容器内运行什么,都将共享主机的内核。 KVM 允许您在来宾中运行内核。只要您只是对数据副本进行操作,就应该安全地进行试验,直到找到最适合您情况的设置。
答案3
这是可能的,但建议您创建磁盘备份 - 如果您关心该数据。
只要主机 PC 的 CPU 有虚拟化支持(在 Intel 上,请通过 进行检查grep vmx /proc/cpuinfo
),KVM 就不会减慢客户机的速度。
假设您的旧磁盘可用,/dev/sde
您可以使用如下命令(作为普通用户):
$ qemu-system-x86_64 -enable-kvm -drive file=/dev/sde,if=virtio,format=raw \
-m 2048 \
-net user,hostfwd=tcp::10022-:22 -net nic,model=virtio
这将启动具有 2 GiB RAM 的虚拟机。-net
仅当您对将端口转发到来宾 sshd 和一般来宾网络访问感兴趣时,才需要这些选项。
如果您决定使用图像文件而不是真实磁盘,则只需替换/dev/sde
为该图像文件的文件名即可。
答案4
我通过使用 VBoxManage 解决了这个问题。基本上我创建了一个新的 VirtualBox 虚拟机,交换原始磁盘并启动。
最初,我在正确设置网络方面遇到了问题(因为主机内核对于我的 VirtualBox 辅助内核模块来说太旧了),但在内核升级后,我获得了 Bridget 网络连接,从那时起一切就非常顺利了。