Bài gốc
Tôi đang chuyển PC từ Windows 10 sang Linux. Có một vài điều mà tôi vẫn cần Windows và hiện tại tôi đang khởi động kép, với Windows và Linux trên các đĩa vật lý riêng biệt. Tôi muốn thoát khỏi khả năng khởi động kép và chạy cài đặt Windows 10 được ảo hóa theo KVM + libvirt + qemu.
Phần khó khăn ở đây dường như là việc cài đặt Windows 10 của tôi được thực hiện thông qua UEFI (với bảng phân vùng GPT), thay vì BIOS MBR kế thừa. Đây là đĩa Windows của tôi trông như thế nào:
$ sudo parted /dev/nvme0n1 print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 524MB 523MB ntfs Basic data partition hidden, diag
2 524MB 628MB 104MB fat32 EFI system partition boot, esp
3 628MB 645MB 16.8MB Microsoft reserved partition msftres
4 645MB 500GB 499GB ntfs Basic data partition msftdata
Vì được thiết lập là UEFI, nên có vẻ như cần thêm một số bước để ảo hóa, vì libvirt dường như không hỗ trợ UEFI. Những gì tôi đã cố gắng là xuất từng phân vùng trên dưới dạng hình ảnh qcow2, với một lệnh như thế này:
$ qemu-img convert -f raw -O qcow2 /dev/nvme0n1p1 win10_part1.qcow2
Và lặp lại cho cả bốn phân vùng. Sau đó, tôi đã tạo ra một máy ảo dưới trình quản lý virt, nhập tất cả bốn ổ đĩa qcow2. Tôi đã cài đặt gói "ovmf" cho bản phân phối (Manjaro) và thêm dòng này vào tệp cấu hình XML của máy ảo, trong phần "os":
<loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
Khi tôi khởi động máy ảo, tôi thấy màn hình giật gân TianoCore. Nhưng nó chỉ thả tôi vào một vỏ grub2, thay vì tìm bộ tải khởi động Windows.
Tôi cũng đã thử khởi động máy ảo này từ Windows 10 cài đặt ISO, hy vọng rằng tôi có thể "sửa chữa" hệ thống để khởi động. Nhưng điều đó đã không làm việc.
Tôi chắc chắn tôi đang thiếu một cái gì đó. Thậm chí tốt hơn là chuyển đổi cái này sang MBR boot, chỉ để tránh sự phụ thuộc OVMF.
Chỉnh sửa / Cập nhật ...
Theo nhận xét của Dylan, tôi đã làm cho nó hoạt động, nhưng một số vấn đề nhỏ xuất hiện trên đường đi, tôi nghĩ rằng tôi sẽ đăng chúng ở đây trong trường hợp những người khác có vấn đề tương tự.
Bước đầu tiên, như Dylan đã viết, để tạo ra một hình ảnh của toàn bộ đĩa , thay vì các đĩa trên mỗi phân vùng riêng lẻ. Tôi đã sử dụng lệnh này:
qemu-img convert -f raw -O qcow2 /dev/nvme0n1 win10_import.qcow2
Sau đó, tôi đã tạo ra máy ảo trong virt-manager, chỉ định hình ảnh đĩa ở trên ("win10_import.qcow2") làm ổ đĩa của tôi.
Tiếp theo là sử dụng phần mềm UEFI OVMF (TianoCore). Điều này được thực hiện bằng cách cài đặt gói ovmf ("ovmf" trên Manjaro), sau đó thêm nó vào định nghĩa XML của máy ảo:
<os>
<type arch='x86_64' machine='pc-q35-3.0'>hvm</type>
<loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
</os>
Sau đó, Windows sẽ vẫn sự cố trong quá trình khởi động, với màn hình mờ và lỗi "HỆ THỐNG NGOẠI TRỪ KHÔNG XỬ LÝ". Vì một số lý do, nó không giống như cài đặt CPU "Sao chép cấu hình CPU máy chủ". Tôi đã đổi thành "core2duo", và nó đã khởi động. Ngay bây giờ tôi đang sử dụng "SandyBridge" và nó cũng hoạt động. (Để biết giá trị của nó, tôi đã tạo một Win10 VM khác, thực hiện cài đặt mới từ đầu. Cái đó VM đã làm việc với "Sao chép cấu hình CPU máy chủ". CPU của tôi là AMD Ryzen 5 2400G.)
Vấn đề tiếp theo tôi gặp phải là Windows 10 chạy chậm không chịu nổi. Bằng cách nào đó tôi đã quản lý để tạo VM bằng trình ảo hóa "QEMU TCG", thay vì "KVM". Điều này có ý nghĩa, như trước đây là thi đua và chậm khủng khiếp, trong khi cái sau là ảo hóa hỗ trợ phần cứng thực sự. . , Tôi đã có thể sử dụng bộ ảo hóa KVM tốc độ gần bản địa.)
Vấn đề tiếp theo là độ phân giải màn hình bị kẹt ở 800x600. Windows sẽ không cho phép tôi thay đổi nó. Tôi có thể sửa một lần bằng cách nhấn Trốn ngay khi máy khởi động, ngay khi văng TianoCore xuất hiện. Điều đó đưa tôi vào cài đặt UEFI, nơi tôi có thể buộc độ phân giải cao hơn. Nhưng đây không phải là một sửa chữa vĩnh viễn.
Vì máy ảo của tôi chỉ định QXL là thiết bị video, tôi cần cài đặt trình điều khiển QXL trong Windows. Trang này, Tạo máy ảo Windows bằng trình điều khiển virtIO giải thích làm thế nào để làm điều đó. Phiên bản ngắn là đây: tải xuống iso winio trên máy chủ. Thêm nó vào VM dưới dạng ổ đĩa CD-ROM. Sau đó, khởi động vào VM, điều hướng đến thư mục bên phải trên CD-ROM và cài đặt tất cả các trình điều khiển VirtIO cần thiết. Cụ thể, đối với video QXL trên Windows 10, thư mục "qxldod" có trình điều khiển phù hợp.