
目前,一台 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 網路連接,從那時起一切就非常順利了。