Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เครื่องเสมือน

แก้ไข Windows 8.1 Boot Error ใน VirtualBox (Error 0x000000C4)

Windows 8 อาจจะหายไปเร็วๆ นี่ ซึ่งเป็นเหตุผลที่การใช้มันเป็น guest OS ใน VM มีความ appealing (ดึงดูด) มากกว่าก่อน บทความนี้ จะแสดงวิธี workaround (แก้ไขชั่วคราว/หลีกเลี่ยง) ปัญหาเล็กแต่น่าสนใจนี้ เพื่อให้คุณติดตั้ง Windows 8.1 เป็น guest OS ภายใน VirtualBox ได้ คุณจะเรียนรู้นิดหน่อยเกี่ยวกับ nerdy things (เรื่องน่ารังเกียจ/เฉพาะทาง) ที่เกิดขึ้นใน background ติดตามมา

ปัญหา (Problem)

ง่ายๆคือ คุณได้ข้อความต่อไปนี้บนหน้าจอหลายวินาทีหลัง boot VM ที่ตั้งค่าสำหรับ Windows 8.1 ใช้ Windows 8.1 DVD หรือ ISO image เกิดขึ้นกับ VirtualBox 4.0 และสูงกว่า

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

ดูน่าสยดสยอง โดยเฉพาะเพราะคุณต้องปิด VirtualBox window instance สำหรับ VM นี้ และลองใหม่ แต่ผลลัพธ์จะ identical (เหมือนกันทุกประการ) ตอนนี้ทำไง?

วิธีแก้ (Solution)

มีหลายอย่างที่ต้องทำ ขั้นแรก อ่านและเข้าใจ error หากคุณ familiar (คุ้นเคย) กับ Windows BSOD มันจะดูคล้ายกัน นี่คือ machine instruction exception (ข้อยกเว้นคำสั่งเครื่อง) หมายถึง OS กำลังพยายามทำ illegal operation แต่ตอนนี้เรารู้ว่าต้องหาอะไร มันจะง่ายแล้ว

หากค้นหา VirtualBox forums, tickets และออนไลน์โดยทั่วไป จะพบ references หลายแห่งเกี่ยวกับความหมายของมัน มัน归结为 (boils down to) ข้อเท็จจริงว่า CMPXCHG16B instruction ถูก disabled และต้อง enabled มัน mandatory (บังคับ) สำหรับ Windows 8.1 เพื่อ boot อ้างอิงจาก Wikipedia:

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

จริงๆ Virtualization คือการสร้าง VIRTUAL hardware บาง features ถูก expose (เปิดเผย) บางอย่างไม่ VirtualBox ถูก design ไม่ expose CMPXCHG16B instruction ให้ guests โดย default ซึ่งสร้าง issue ที่เราเผชิญ ดังนั้นเราต้อง enable มัน ทำได้โดยใช้ VirtualBox command line

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

เพื่อให้คำสั่งนี้สำเร็จ คุณยังต้องการ modern processor บน host system ไม่ว่าจะอย่างไร หาก processor ของคุณไม่มี NX/XD bit หรือ disabled ใน BIOS คุณต้องแก้ปัญหาบน host ก่อน ก่อนจะไปต่อ ในบางกรณี อาจเป็นไปไม่ได้

หลังจาก execute คำสั่งนี้ คุณจะมี instruction พร้อมใช้ และ Windows 8.1 จะ boot สำเร็จ หลังจากนั้น คุณสามารถทำสิ่งที่ต้องการได้ เช่น ติดตั้งระบบ ฯลฯ

สรุป

นี่คือ tutorial ยาวหน่อยใช่ไหม ตอนนี้ ผมอาจแค่โพสต์ link ไปที่ Oracle tickets database แต่นั่นจะ miss the point (พลาดจุดประสงค์) Dedoimedo คือการศึกษา (education) คุณอยากเข้าใจปัญหา ไม่ใช่แค่ blindly execute (รันตามลำดับโดยไม่คิด) random และอาจ dangerous commands ไม่ว่าคุณจะรู้ว่านี่เกี่ยวกับอะไร มัน effectively (อย่างมีประสิทธิภาพ) เหมือนกับการ switch option on/off ใน BIOS/UEFI OK ตอนนี้คุณพูด business (พูดจริง/เข้าจัง) แล้ว

ไม่ว่าจะอย่างไร คุณเรียนรู้เพิ่มเติมนิดหน่อยเกี่ยวกับ CPU architecture, virtualization software, VirtualBox behavior และการควบคุม hidden features และ settings จาก command line really neat (เยี่ยมมาก) และผมคิดว่าเราจบที่นี่แล้ว

ขอแสดงความนับถือ