- vừa được xem lúc

Ubuntu-QEmu-Reboot-UEFI

0 0 25

Người đăng: Phan Thanh Ngoc

Theo Viblo Asia

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ặc qemu-system-i386 tùy vào 64 hay 32 bit

    Tham khảo thêm: ArchWikiQemu Document để biết thêm về tùy chọn

    • Step 2.1.3: Thêm --enable-kvm hoặc accel=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ó đủ menu
      • sdl: Mình thấy nó khá giống gtk 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ên qemu-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ệnh qemu-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ệnh lsblk 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ệnh lsblk ở 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
  • 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...

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ọn Continue thôi
  • 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) Lên Busybox (initramfs)
    • 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ặc This 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

Thanks

Bình luận

Bài viết tương tự

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 127

- vừa được xem lúc

Các command trên ubuntu (chiếm 80%) - phần 5

Hello 500 ae, sau 4 số trong seri này mình thấy có vẻ ae có hứng thú đọc chủ đề này ghê. Hi vọng những gì mình tìm hiểu được sẽ giúp ích được cho nhiều bạn hơn.

0 0 53

- vừa được xem lúc

Những lệnh command shell linux cơ bản có thể bạn chưa biết - Phần 1

Bài viết này sẽ liệt kê một số command cơ bản thường được dùng trong linux, tiện dụng cho các bạn khi sử dụng linux mà có thể bạn chưa biết. Tôi là ai, câu lệnh này sẽ cho bạn biết bạn đang sử dụng linux bằng tài khoản người dùng nào.

0 0 56

- vừa được xem lúc

Cách sử dụng lệnh SCP để truyền tệp an toàn

SCP (secure copy) là một tiện ích dòng lệnh cho phép bạn sao chép an toàn các tệp và thư mục giữa hai vị trí. . From your local system to a remote system. Between two remote systems from your local system.

0 0 57

- vừa được xem lúc

Người ta làm cách nào để backup thường xuyên thư mục rất lớn?

. Vấn đề về sao lưu thư mục lớn. Mình có lưu "sương sương" 300GB các tệp tin của người dùng upload lên, như hình ảnh hay các tệp đính kèm.

0 0 53

- vừa được xem lúc

Các command trên ubuntu (chiếm 80%) - phần 4

Sau một kì nghỉ tết trong thời buổi đại dịch vừa qua. Không còn những buổi dong chơi đi chúc tết nữa. Ở nhà ra số tiếp theo cho anh em đây. Dưới đây sẽ là 2 command được sử dụng nhiều nhất khi sử dụng file.

0 0 54