Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Khắc phục lỗi boot Windows 8.1 trong VirtualBox (Error 0x000000C4)

Windows 8 sắp "biến mất", nên việc dùng nó làm guest OS trong VM càng hấp dẫn. Bài viết này. Tình huống: bạn thử boot Windows 8.x 64-bit làm guest trong VirtualBox. Có thể là Windows 8 hoặc cao hơn. Boot ban đầu fail trong vài giây, VM phải close. Error Code: 0x000000C4.

Bài viết chỉ cách workaround để cài Windows 8.1 guest trong VirtualBox. Cũng học chút về những điều nerdy diễn ra background. Follow me.

Vấn đề

Đơn giản: sau vài giây boot VM cấu hình cho Windows 8.1 (dùng DVD hoặc ISO), màn hình hiện:

Your PC needs to restart.
Please hold down the power button.
Error Code: 0x000000C4
Parameters:
...

Kinh khủng, phải close cửa sổ VirtualBox, thử lại. Kết quả y hệt. Làm sao?

Giải pháp

Nhiều việc. Đầu tiên, đọc hiểu lỗi. Nếu quen Windows BSOD, sẽ thấy tương tự. Đây là machine instruction exception: OS cố gắng thực hiện illegal operation. Biết cái cần tìm, dễ rồi.

Tìm trên forum VirtualBox, ticket, online... thấy nhiều reference. Cốt lõi: instruction CMPXCHG16B bị disable, cần enable. Bắt buộc cho Windows 8.1 boot. Trích Wikipedia:

Early AMD64 processors lacked the CMPXCHG16B instruction, an extension of CMPXCHG8B present on most post-80486 processors. Similar to CMPXCHG8B, CMPXCHG16B allows atomic operations on octal words. Useful for parallel algorithms using compare-and-swap on data larger than pointer size, common in lock-free/wait-free algorithms. Without CMPXCHG16B must use workarounds... This also prevents 64-bit Windows from having user-mode address space larger than 8 terabytes. The 64-bit version of Windows 8.1 requires this feature.

Đúng, ảo hóa là tạo VIRTUAL hardware. Một số feature expose, một số không. VirtualBox mặc định không expose CMPXCHG16B cho guest, gây issue. Cần enable qua command line:

"<VirtualBox Installation>\VBoxManage.exe" setextradata "<Virtual machine name>" VBoxInternal/CPUM/CMPXCHG16B 1

Vẫn cần processor hiện đại trên host. Nếu CPU không có NX/XD bit, hoặc disabled trong BIOS, fix ở host trước. Trong vài trường hợp không thể.

Sau khi chạy lệnh, instruction available, Windows 8.1 boot thành công. Sau đó làm việc bình thường (cài hệ thống...).

Kết luận

Hơi dài, phải không? Tôi có thể chỉ post link Oracle ticket database, nhưng bỏ lỡ mục đích. Dedoimedo là về education. Muốn hiểu vấn đề, không blindly chạy lệnh nguy hiểm. Bây giờ bạn hiểu, nó giống như bật/tắt option trong BIOS/UEFI. OK, talking business.

Dù sao, bạn học thêm chút về CPU architecture, phần mềm ảo hóa, cách VirtualBox behave, work, và control hidden features/settings từ command line. Really neat. Done.

Cheers.