Windows 10 UEFI Vật lý sang KVM / libvirt ảo


1

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.

Câu trả lời:


1

QEMU / Libvirt mong bạn cung cấp đĩa ảo: các tệp QCOW2 của bạn phải là đĩa chứ không phải phân vùng. Bằng cách làm những gì bạn đã làm, bạn có 4 tệp qcow2, mỗi tệp có một phân vùng duy nhất. Bạn đã phá vỡ cấu trúc trước đó, không có gì ngạc nhiên khi GRUB không thể khởi động hệ thống của bạn nữa.

Tôi khuyên bạn nên chuyển đổi toàn bộ ổ đĩa vật lý thành một tệp QCOW2, sau đó gắn ổ đĩa ảo này vào máy ảo của bạn.

Bạn có thể xóa tệp GRUB EFI khỏi phân vùng EFI (xem các công cụ libguestfs) và sử dụng menu khởi động, vì trình tải khởi động Windows sẽ được tải bởi UEFI của VM.


0

Nếu bất cứ ai khác vấp phải câu hỏi này, có một cách khác để sử dụng cài đặt windows gốc như một máy ảo trong Linux:

  1. Hình ảnh toàn bộ thiết bị theo câu trả lời được chấp nhận của Dylan.
  2. Chạy VM từ bộ lưu trữ thô.

Tôi đã quản lý số 2 ở trên, nhưng nó có thể khá liên quan. Nó trở nên khá phức tạp và rủi ro nếu cả Linux và Windows chia sẻ cùng một thiết bị.

Nó chỉ đáng giá cho những nỗ lực thêm vì nhiều lý do:

  • Đã có và giống như một thiết lập khởi động kép.
  • Cần chạy windows trực tiếp trên phần cứng.
    • Hiệu suất đồ họa cho các trò chơi (và không có bo mạch chủ / thiết lập có thể thực hiện thông qua PCI với GPU 2x, v.v.).
    • Các ứng dụng âm thanh quá nhạy cảm như Skype for Business hoạt động kém thông qua các thiết bị âm thanh ảo hóa.
  • Muốn có sự tiện lợi của VM để chạy các ứng dụng windows ít đòi hỏi khác như MS office, v.v.

Có rất nhiều cảnh báo / cách giải quyết:

  • Tôi đã có một cuộc chiến để các cửa sổ vẫn được kích hoạt vì rõ ràng là nó buộc giấy phép vào phần cứng. Làm việc với việc thêm số sê-ri bo mạch chủ / BIOS, kiểu CPU chính xác và số sê-ri thiết bị lưu trữ dường như có ích.
  • Thêm quy tắc udev để làm cho trình quản lý tệp Linux / Nautilus / Gnome bỏ qua các phân vùng windows.
  • Do hoang tưởng (các bản cập nhật Windows lo lắng có thể ảnh hưởng đến thiết lập grub / boot), tôi không chỉ chia sẻ toàn bộ ổ đĩa thô của mình với VM. Thay thế:
    • Tôi đã sao chép bảng phân vùng (GPT) và phân vùng EFI vào các tệp và cũng tạo một kết thúc giả của tệp hình ảnh thiết bị.
    • Đã sử dụng trình điều khiển loopback để coi hình ảnh nhân bản là thiết bị
    • Đã sử dụng trình điều khiển MD (đa thiết bị) thông qua thiết lập tuyến tính mdadm để xâu chuỗi tất cả các bộ phận cần thiết lại với nhau như một thiết bị thô và hình ảnh lai cho VM. Ví dụ. md0 được xây dựng từ <GPT table clone image/loopback> + <recovery raw> + <EFI clone image/loopback> + <windows system raw> + <end of device GPT backup table/loopback>.
    • Sử dụng gdisk và testdisk để sửa / điều chỉnh các bảng phân vùng khi cần.
    • 1803 bản cập nhật windows 10 đã ném vào một phân vùng phụ tôi phải điều chỉnh cho! Phân vùng mới xuất hiện sau khi cài đặt Windows 10 April Update . Cần sửa lại ...

Tôi đã sử dụng một thiết lập tương tự trên hệ thống thứ 2, nhưng làm cho cuộc sống của tôi dễ dàng hơn nhiều, có 2 thiết bị lưu trữ riêng biệt, một cho Linux, một cho Linux.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.