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

แก้ไขข้อผิดพลาดการนำเข้า OVA ของ VirtualBox: E_INVALIDARG 0x80070057

VirtualBox, การนำเข้า OVA และข้อผิดพลาด E_INVALIDARG 0x80070057

อัปเดต: 9 ธันวาคม 2025

เมื่อเร็วๆ นี้ผมเจอปัญหาใหม่ในการผจญภัยเสมือนจริง ผมต้องการส่งออก VM Linux หนึ่งตัว เพื่อใช้บนโฮสต์อื่น ในทฤษฎี ฟังก์ชันนี้มีใน VirtualBox File > Export Appliance จากนั้นเลือก VM ที่ต้องการ กำหนดรูปแบบ ตั้งค่า MAC addresses และปล่อยให้ VirtualBox สร้างไฟล์ ova บนโฮสต์เป้าหมาย คุณนำเข้า appliance นี้

ผมลองทำและเจอข้อผิดพลาด GUI แสดง E_INVALIDARG 0x80070057 โดยไม่มีรายละเอียดมาก อ่าน tickets บนฟอรัม VirtualBox พบว่าอาจมีปัญหาหลายอย่างที่ทำให้นำเข้า失敗 แทนที่จะพยายามแก้ปัญหาทีละอย่าง ผมเลือกเส้นทางอื่น: การนำเข้า VM แบบ manual โดยไม่ใช้กระบวนการ OVA มาดูกัน

OVA เพียงแค่ archive

ทางเทคนิค appliance คือข้อมูล VM ทั้งหมดที่บรรจุอยู่ในไฟล์เดียว ภายในมี virtual disks (และ snapshots), virtual machine manifest และอื่นๆ ไม่มีความลับอะไร กระบวนการนำเข้าแค่ unpack เหล่านี้ parse ไฟล์ config (.vbox) และหากมีข้อผิดพลาดที่ไม่สามารถแก้ไขได้ เช่น path ของ virtual CD drive หรือ shared folder จะหยุดทำงาน

ดังนั้นเราสามารถทำอย่างเดียวกันได้ด้วยตนเอง

ขั้นตอนที่ 1: สร้างโคลนของ virtual machine

เหตุผลที่ต้องการทำนี้: อนุญาตให้โคลนเฉพาะ latest snapshot หากคุณใช้ snapshots ทำให้ VM ใหม่เล็กลง คุณจะมี snapshots น้อยลงที่ต้องคำนึงถึงเมื่อคัดลอกข้อมูล VM ไปโฮสต์ใหม่ แต่ไม่บังคับ

เหตุผลที่อาจต้องการคัดลอกเฉพาะ latest state คือ เพื่อทำให้การจัดการ VM เรียบง่าย และลดปริมาณข้อมูลที่ต้องถ่ายโอน หากทำการส่งออกผ่านเครือข่าย อาจทำให้แตกต่างมาก (แม้บน LAN)

แก้ไขข้อผิดพลาดการนำเข้า OVA ของ VirtualBox: E_INVALIDARG 0x80070057

ขั้นตอนที่ 2: คัดลอกโฟลเดอร์ VM ทั้งหมดไปยังโฮสต์ที่สอง

โครงสร้างโฟลเดอร์ VM ของ VirtualBox ประกอบด้วย: directories ชื่อ Logs และ Snapshots, virtual disks หนึ่งหรือหลายตัว (ปกติ .vdi), ไฟล์ config นามสกุล .vbox, บวกอาจมีไฟล์ config อีกตัว .vbox-prev (หากทำการเปลี่ยนแปลง)

ไฟล์ vbox เป็น XML manifest ที่มี declarations ต่างๆ ที่คุณเห็นใน GUI คุณไม่ควรแก้ไขไฟล์นี้ขณะที่ VM กำลังรัน แต่แก้ไขได้อย่างปลอดภัยสำหรับ VM ที่ offline การเปลี่ยนแปลงจะสะท้อนครั้งต่อไปที่คุณเปิด VM ตัวอย่างเช่น ภายใต้ Media จะเห็นส่วน HardDisks รายการ disks และ snapshots:

...
<HardDisks>
<HardDisk uuid="{dfcda294-6feb-4ef8-8bc8-e67ad57e2cc6}"
location="Kubuntu-24.04.vdi"
format="VDI"
type="Normal">
<HardDisk uuid="{f062fe0b-578c-4461-9a10-8d65d28347ac}"
location="Snapshots/{f062fe0b-578c-4461-9a10-8d65d28347ac}.vdi"
format="VDI">
<HardDisk uuid="{f942b89a-49ff-40fa-8d62-e6fdd8a205d9}"
location="Snapshots/{f942b89a-49ff-40fa-8d62-e6fdd8a205d9}.vdi"
format="VDI"/>
</HardDisk>
</HardDisk>
</HardDisks>
...

การประกาศนี้บอกว่า VM นี้ใช้ hard disk ชื่อ Kubuntu-24.04.vdi และมี snapshots สองตัว คุณเข้าใจแล้ว

คัดลอกข้อมูลทั้งหมด โฟลเดอร์ทั้งหมด ไปยังโฮสต์ที่สอง

ขั้นตอนที่ 3: ตรวจสอบ paths

ก่อน "นำเข้า" VM คุณควรเปิดไฟล์ vbox ใน text editor และหา paths "แปลกๆ" รวมถึง ISO files ที่ mount, shared guest paths หรืออย่างใดอย่างหนึ่ง ที่ hard-coded ไว้กับระบบแรกและอาจไม่มีอยู่บนระบบที่สอง ข้อผิดพลาดแบบนี้จะทำให้การเพิ่ม VM ใหม่ล้มเหลว นี่เป็นสิ่งที่ opaque เมื่อใช้ OVA archives แต่คุณมี visibility และ control เต็มที่เมื่อทำแบบ manual

ตัวอย่าง สมมติคุณใช้ shared guest path ต่างกันบนสองระบบ วิธีง่ายคือค้นหา path เฉพาะที่คุณรู้ว่าใช้บนระบบแรก ดูว่าบอกอะไร:

<SharedFolders>
<SharedFolder name="SHARED_FOLDER"
hostPath="G:\Virtual Machines\SHARED FOLDER"
writable="true"
autoMount="true"
autoMountPoint="SHPATH"/>
</SharedFolders>

ที่นี่ใช้ path บน drive G: (Windows) แต่ path นี้อาจไม่มีบนระบบที่สอง หรืออาจอยู่ภายใต้ drive letter อื่น คุณต้องเปลี่ยนเป็น:

hostPath="P:\Different path\SHARED FOLDER"

และหากระบบที่สองเป็น Linux อาจต้องเป็นอย่างอื่น:

hostPath="/home/dedoimedo/Shared-folder"

นอกจาก hard-coded paths แล้ว คุณยังสามารถปรับตั้งค่าอื่นๆ ได้ รวมถึง memory allocation, CPU cores, graphics adapter และอื่นๆ แต่วิธีที่ดีคือเปลี่ยนทีละอย่าง ลองเพิ่ม VM และดูว่ามี error ไหม

เมื่อแก้ไขไฟล์ vbox เรียบร้อย เพียง double-click ไฟล์นั้น ด้วยการติดตั้ง default ทั้ง Windows และ Linux นามสกุลและประเภทไฟล์นี้จะเชื่อมโยงกับ VirtualBox hypervisor หาก XML config ถูกต้อง VM จะปรากฏในรายการ เสร็จแล้ว

ขั้นตอนที่ 3: วิธีทางเลือก

หากคุณไม่สะดวกแก้ไขไฟล์ XML สามารถทำดังนี้:

  • โคลน VM
  • เปิด Settings (ผ่าน VirtualBox GUI) ลบ hard-coded paths ทั้งหมด เช่น ISO files, shared folders เป็นต้น
  • คัดลอก VM ไปยังปลายทางใหม่
  • Double-click ไฟล์ vbox เพื่อเพิ่มเข้า hypervisor
  • เปิด Settings อีกครั้ง และเพิ่ม paths ใหม่ตามที่ควรเป็นบนอุปกรณ์ที่สอง
  • เปิด VM และทำงาน

ข้อแตกต่างและข้อจำกัดใบอนุญาตที่เป็นไปได้

เห็นได้ว่าผมใช้ Linux VM สำหรับการ copy/migrate คือ Kubuntu เพราะ distro นี้ไม่มีข้อจำกัดการใช้งาน ไม่ว่าจะจำนวนระบบหรือ "ใบอนุญาต"

หากทำกับ OS ที่เป็นเจ้าของ เช่น Windows คุณอาจ de-activate ใบอนุญาตเนื่องจากการเปลี่ยนแปลงฮาร์ดแวร์ หรืออาจต้องซื้อใหม่ หากใช้โปรแกรมที่มีใบอนุญาต (paid) สำหรับโฮสต์เดียวหรือ instance เดียว คุณต้องคำนึงถึงข้อนี้ เพราะการสร้างโคลน VM ใหม่อาจก่อให้เกิดปัญหากับใบอนุญาตหรือเงื่อนไขการใช้งาน

ข้อสรุป

ถ้าขั้นตอนอัตโนมัติที่ห่อหุ้มไว้ไม่ได้ผลสำหรับคุณ วิธี manual ก็อาจได้ผล ผมทดสอบ folder copy + XML change หลายครั้ง หลาย VM ระหว่าง Windows และ Linux ผลลัพธ์ดีเยี่ยม แน่ใจว่าอาจต้องปรับ setting นิดหน่อย แต่แล้วคุณก็พร้อมใช้งาน ในขอบเขตของข้อจำกัดใบอนุญาตซอฟต์แวร์ของคุณ

หวังว่าคู่มือนี้จะมีประโยชน์ การ debug error code เฉพาะเจาะจงอาจน่าเบื่อ เพราะข้อผิดพลาดการนำเข้าเกือบทุกอย่างจะโยน error code นี้ ในขณะที่ workarounds เฉพาะเจาะจงมีมากและหลากหลาย ขั้นตอน manual copy มีความแข็งแกร่ง แต่ต้องคำนึงถึงบางอย่าง โดยเฉพาะ hard-coded paths ใน config คุณสามารถแก้ไขก่อนหรือหลังการคัดลอก เพื่อให้ VM ใหม่เพิ่มได้อย่างราบรื่น ไปแล้วครับ Happy virtualization

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