Bật lại máy trong Ubuntu bằng QEmu chuẩn UEFI
Lấy ý tưởng từ QEMUBootTester nhìn thấy trong bộ rescue boot của Anhdv không rõ ai làm ra
Miễn trừ trách nhiệm
Cảnh báo
- Bạn làm theo hướng dẫn này là bạn đang đối mặt với rủi ro hỏng phân vùng và gây mất mát dữ liệu, mình làm theo và cũng đã nghịch ngu và dẫn đến việc mất dữ liệu, không thể cứu được dữ liệu. Làm hay không là lựa chọn của bạn mình cũng đã cảnh báo, lúc hỏng đừng đổ tại do mình xúi giục. Bên cạnh đó mình sẽ ghi ở mỗi phần nên làm gì và tránh làm gì, nếu bạn tìm được thêm các giải pháp hoặc các vấn đề mà mình chưa tốt hãy comment để nói với mình.
Thực hiện
Mình làm theo hướng dẫn của K3A
Step 1: Download QEmu (Đương nhiên òi =)))
- Tùy vào máy bạn là phiên bản nào, máy mình là x86_64 nên mình cài qemu-system-x86, còn một số nền tảng khác bạn tự tra theo máy (ARM, ...).
- Thêm package OVMF cho UEFI
- Cho nhanh copy lun:
sudo apt install qemu-system-x86 ovmf
Step 2: Chuẩn bị Boot thui
Mình chạy trên Ubuntu 22.04 trên máy Dell Inspiron 7591. Copy full rồi chạy xảy ra vấn đề gì mình không chịu trách nhiệm
Cấu hình máy sương sương:
- CPU: Intel i5-9300H (8) @ 4.100GHz
- GPU: NVIDIA GeForce GTX 1050 3 GB Max-Q
- GPU: Intel CoffeeLake-H GT2 (UHD Graphics 630)
- Memory: 16GB
- SSD: BC501 NVMe SK hynix 256GB (/dev/nvme0n1) - format dạng GPT
- HDD: WDC WD10SPZX-00Z10T0 (/dev/sda) - format dạng MBR
- Part 1 : Dựng command cho QEmu (làm cái file sh xịn xịn nào)
- Step 2.1.1: Thêm
sudo
đương nhiên rồi chúng ta sẽ cần gọi /dev để lấy các ổ đĩa, USB, ... - Step 2.1.2: Thêm
qemu-system-x86_64
hoặcqemu-system-i386
tùy vào 64 hay 32 bit
Tham khảo thêm: ArchWiki và Qemu Document để biết thêm về tùy chọn
- Step 2.1.3: Thêm
--enable-kvm
hoặcaccel=kvm
: Cái này dùng để ảo hóa đầy đủ (Kernel-based Virtual Machine), tránh màn hình xanh bên Windows, sử dụng trực tiếp CPU của máy - Step 2.1.4: Đến lượt CPU nào. Mình sẽ sử dụng CPU của host thay vì CPU ảo của QEmu
-cpu host
. Tiếp theo mình sẽ lấy 4 CPU (2 cores, 2threads) là tùy chọn-smp 4,cores=2,threads=2
- Step 2.1.5: Giờ là RAM, máy 16GB nên lấy 8000 thui
-m 8000
- Step 2.1.6: Tiếp theo là giao diện cửa sổ, có vài lựa chọn như:
gtk
: Mình xài cái này, 1 cửa sổ có đủ menusdl
: Mình thấy nó khá giốnggtk
nhưng bỏ đi cái menu- Và còn vài cái nữa phụ thuộc vào máy bạn, xem bằng lệnh:
qemu-system-x86_64 -display help
nhưng mình máy mình chỉ xài được 2 cái trên mà không cần cài thêm nên mình xài-display gtk
- Step 2.1.7: Chọn VGA,
-vga virtio
thôi máy mình mấy cái khác còn chả xuất hình nữa. Để xem thì vẫn tương tự như trênqemu-system-x86_64 -vga help
- Step 2.1.8: Chọn sound card. Tuy cái này bị deprecated rồi nhưng chúng ta vẫn phải tra bằng cách
qemu-system-x86_64 -soundhw help
. WIndows hiện tại sẽ tự động nhận hda (High Definition Audio).
Bạn nghĩ bạn sẽ dùng-soundhw hda
ư? Câu trả lời là không. Bạn sẽ dùng-device intel-hda -device hda-duplex
🙃.
Máy bạn thích hợp xài cái nào thì bạn sẽ xài lệnhqemu-system-x86_64 -soundhw [tên-card]
trước, sau đó nó sẽ ra dòng đại loại kiểu
qemu-system-x86_64: warning: '-soundhw hda' is deprecated, please use '-device intel-hda -device hda-duplex' instead
Giờ chúng ta sẽ copy đoạn trong''
thứ hai - Step 2.1.9: Nhét thêm USB3.0
-device qemu-xhci,id=xhci
- Step 2.1.10: Thêm phần bảng vẽ điện tử
-device virtio-tablet,wheel-axis=true
. Ai xài thì thêm thôi... - Step 2.1.11: Kết nối ổ cứng. Công thức có dạng
-drive file=/dev/[tên ổ/phân vùng],media=disk,driver=raw
. Tên ổ hay phân vùng thì bạn dùng lệnhlsblk
nha. Thường thì dùng phân vùng nào sẽ thêm phân vùng đó. Còn mình lười nên nhét cả. Đây là nội dung của lệnhlsblk
ở máy mình. Nhìn là hiểu sao mình lười rồi đấy... múc lun-drive file=/dev/nvme0n1,media=disk,driver=raw -drive file=/dev/sda,media=disk,driver=raw
- Step 2.1.12: Thêm EFI
-drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/usr/share/OVMF/OVMF_VARS.fd,if=pflash,format=raw,unit=1 -drive file=/dev/nvme0n1,media=disk,driver=raw
. Mọi người tìm trên máy và thay đường dẫn tương ứng. Theo như giải thích từ K3A thìOVMF_CODE.fd
là để load firmware UEFI,OVMF_VARS
là để load NVRAM. Đối với disk GPT nó sẽ load vào EFI partition đầu tiên, còn với MBR, nó sẽ load vào Active Partition (thường là partition đầu tiên đối với cả 2), vậy nên Step 11.1 bạn thêm cho đủ nếu không muốn lỗi không boot được. - Step 2.1.13: Passing USB. Nói trước là làm vậy (Pass - truyền), cái USB đó sẽ được giao cho máy ảo hoàn toàn, mình không thể dùng trên máy tính. Giờ mình sẽ truyền thử camera vào máy ảo. Có nhiều cách nhưng nó lằng nhằng hoặc khó hiểu, mình sẽ lấy cách nhanh nhất và dễ hiểu nhất.
lsusb
để lấy device-id. Camera của mình làBus 001 Device 003: ID 0c45:6d12 Microdia Integrated_Webcam_HD
với vendor id là0x0c45
và product id là0x6d12
- Viết đối số passthrough thôi. Công thức
-usb -device usb-host,vendorid=[vendor id],productid=[product id]
. Với mình sẽ là-usb -device usb-host,vendorid=0x0c45,productid=0x6d12
.
- Mình chưa biết cách Passing PCI nên bước này mình xin bỏ ngỏ...
- Và đây là kết quả của mình sau 13 bước trên:
sudo qemu-system-x86_64 --enable-kvm -cpu host -smp 4,cores=2,threads=2 -m 8000 -display gtk -vga virtio -device intel-hda -device hda-duplex -device qemu-xhci,id=xhci -device virtio-tablet,wheel-axis=true -drive file=/dev/nvme0n1,media=disk,driver=raw -drive file=/dev/sda,media=disk,driver=raw -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/usr/share/OVMF/OVMF_VARS.fd,if=pflash,format=raw,unit=1 -drive file=/dev/nvme0n1,media=disk,driver=raw -usb -device usb-host,vendorid=0x0c45,productid=0x6d12
- Step 2.1.1: Thêm
- Part 2: Kiểm tra trước khi boot
- Step 2.2.1:
umount
toàn bộ phân vùng liên quan. 2 luồng ghi cùng 1 lúc vào phân vùng sẽ dẫn tời phân vùng bị hỏng có thể dẫn đến mất dữ liệu, hỏng phân vùng, đặc biệt là nếu bạn boot thẳng vào vùng đang boot hiện tại thì cứ xác định là tạm biệt phân vùng đó đi, khỏi boot lần sau (Kinh nghiệm xương máu tìm khắp StackOverflow với AskUbuntu để fix). - Step 2.2.2: Do không giả toàn bộ phần cứng được nhất là TPM(Trusted Platform Module) sinh ra để tránh bị passthrough thì mọi người không boot vào các phân vùng của Brunch Framework (ChromeOS), Hackintosh (MacOS), ... những hệ này đòi hỏi phần cứng nghiêm ngặt cũng như về bảo mật nên không lên đâu. Đối với Windows, sử dụng local account do TPM không chạy thì Windows Hello không chạy, không đăng nhập được đâu.
- Đó boot thôi, chạy lên vừa trên nào...
- Step 2.2.1:
Thành quả
Chưa hết đâu giờ mới mệt này
- Trường hợp boot sai partition
- Ở đoạn TianoCore bấm F2
- Mũi tên đi xuống chọn
Boot Maintenance Manager
và Enter - Enter tiếp
- Xuống chọn
Change Boot Order
- Enter tiếp
- Ấn
-
(cạnh số 0 ý) để đẩy Boot Option xuống vàshift + =
(hay + ở Numpad) để đẩy Boot Option lên. Xong thìEnter
, hủy thìEsc
- Ấn
ESC
cho tới khi ra đến màn hình của TianoCore mở đầu rồi chọnContinue
thôi
- Ở đoạn TianoCore bấm F2
- Màn hình Windows bé quá không full 1920x1080 toàn 360x480 @@
- Link driver màn hình Virtio đây
- Chọn
Latest virtio-win-guest-tools.exe
để tải về rồi cài nha
- Ủa sao ở bên Windows, Office 365 đã được kích hoạt cùng Windows có xài crack đâu sao ở đây chưa active?
- Đây là do không có TPM để lấy các loại dữ liệu trên đó.
- Giải pháp mình mất rất thời gian để có thể pass through được TPM cùng dữ liệu nhưng bất thành và phải đi cầu cứu troubleshoot của anh Microsoft
- Link đây. Kéo xuống gần cuối. Tải về rồi làm những gì nó hướng dẫn. Windows và Office sẽ được active lại, account đăng nhập ở Edge cũng bay theo. Tool này tool chính chủ, nói không với crack. Còn nếu bạn dùng KMS (Key Management Service) như msguides chẳng hạn, nó không lưu credential, không lỗi.
- Lỡ tay boot vô phân vùng Linux đang chạy rồi, cứu!!! (ảnh lấy từ ostechnix)
lsblk
để lấy list phân vùng. Như ảnh trên kia, mình đang để root ở/dev/nvme0n1p7
- Nhập lệnh sửa phân vùng, với mình là
fsck /dev/nvme0n1p7 -y
mọi người sẽ khác tùy vào cách chia phân vùng - Cầu nguyện cho mấy dữ liệu bị ghi đè không đứa nào bay màu thui, cảnh báo rồi mà🫥
- Xong rồi thì
reboot
thôi chúc mọi người không phải đọc lại đoạn này lần nữa
- Lỡ tay boot vô phân vùng của Windows đang xài rồi, cứu!!!
- Mở Windows ra, vào
My Computer
hoặcThis PC
, chuột phải vào phân vùng đó, chọn Properties
- Vào Tools chọn Check
- Chọn Scan drive, chờ một lúc rồi chọn Fix.
- Sau đó là giống 2 bước cuối của mục trên
- Mở Windows ra, vào
Thanks
- K3A
- QEmu
- TianoCore
- Những người nào đó đã viết các trang:
- ArchWiki
- Qemu Document
- Fix Busybox (initramfs)
- Unlicensed Product and activation errors in Office cùng tool fix lỗi active kia