ขอเตือนไว้ก่อนเริ่มต้น: หากคุณลองใช้ Xen โดยไม่มีการเสมือนฮาร์ดแวร์ การเดินทางของคุณจะเต็มไปด้วยปัญหา นี่คือข้อความชี้แจงที่ไม่ได้ซ่อนเร้นเลยว่า คุณไม่ควรลอง Xen หากไม่มี CPU รุ่นใหม่ที่รองรับส่วนขยายการเสมือน (virtualization extensions) ซึ่งต่างจากโซลูชันสำหรับบ้านอย่าง VirtualBox หรือ VMware Player มาก เพราะ Xen มุ่งเป้าไปที่กลุ่มตลาดที่แตกต่างกันโดยสิ้นเชิง
แต่ถ้าคุณขี้อายอย่างผมและอยากเอาชนะโลกด้วยบทช่วยสอน คุณจะลอง Xen paravirtualization และล้มเหลว อุปสรรคใหญ่ที่สุดคือการให้ Xen guests บูตจากแผ่น CD หรือ ISO images เพื่อเริ่มการติดตั้ง และเครือข่าย paravirtualized ก็ไม่ได้สนุกสนานเลย วันนี้ผมจะพยายามทำให้เรื่องราวง่ายขึ้น จุดเน้นอยู่ที่คำว่า "พยายาม"
เราจะได้เรียนรู้ว่ามีปัญหาอะไร อาการเป็นอย่างไร วิธีหลีกเลี่ยยังไง ถ้าทำได้เลย การทำงานกับ kernel และ initrd แบบ paravirtualized และวิธีตั้งค่า network adapters แบบ bridged สำหรับ guests ทั้งหมดนี้และอื่นๆ อีกมากมาย ห่อหุ้มอยู่ในความไม่แน่นอน ติดตามผมมาเลย
ทำไม Paravirtualization ถึงทำให้ปวดหัว
นี่คือคำอธิบายทางการ:
Paravirtualization เป็นเทคนิคการเสมือนที่มีประสิทธิภาพและเบาเบา ซึ่ง Xen นำเสนอเป็นครั้งแรก และต่อมาโซลูชันการเสมือนอื่นๆ ก็นำไปใช้ด้วย Paravirtualization ไม่ต้องการส่วนขยายการเสมือนจาก CPU ของโฮสต์ อย่างไรก็ตาม guests แบบ paravirtualized ต้องการ kernel 特製ที่ถูกพอร์ตให้ทำงานบน Xen โดยตรง ทำให้ guests รู้จัก hypervisor และทำงานได้อย่างมีประสิทธิภาพโดยไม่ต้องมีการจำลองหรือฮาร์ดแวร์จำลอง
จุดเน้นอยู่ที่คำว่า "guests ต้องการ kernel 特製" หากคุณไม่รู้ว่านี่คืออะไรหรือจะหาได้อย่างไร คุณจะต้องทำงานหนักมากเพื่อให้สิ่งต่างๆ ทำงานได้ สิ่งที่เด่นชัดที่สุดคือปัญหาเมื่อพยายามบูตจาก live CD image ซึ่งควรเป็นขั้นตอนแรกในการติดตั้งระบบ
บูตจาก CD หรือ ISO image
ปัญหาจะเริ่มขึ้นเมื่อคุณพยายามตั้งค่า virtual machine ใหม่ เหมือนที่เราทำมาแล้วล้านครั้ง เราต้องการให้ guest บูตจาก CD ก่อน


แต่แล้วคุณจะได้ข้อผิดพลาดแบบน่าเกลียดนี้ แม้จะลองใช้ ISO ก็ตาม:


ถ้าคุณค้นหาบนอินเทอร์เน็ต จะพบสูตรวิธี 7 ล้านสูตรบอกว่าสามารถหรือไม่สามารถทำได้ แต่ไม่มีอะไรที่เป็น one-liner หรือ plug-and-play เลย วิธีแก้ที่พบบ่อยที่สุดแตกต่างกันระหว่างการแยก image และอัปโหลดไปยัง HTTP server และการ mount image เป็น loopback device
P.S. โปรดดูส่วน "More reading" ด้วย เอกสารอ้างอิงอธิบายว่าทำไม Ubuntu ที่เราเลือกทดสอบข้างต้น จึงไม่บูตเป็น paravirtualized guest ได้จริงๆ โดยไม่ต้องทำงานเพิ่มเติมและแก้ไขมากมาย
ควรทำอย่างไร?
คำแรกสุด: ไม่ต้องทำอะไรเลย วิธีที่เสนอส่วนใหญ่ทำได้ยาก และทำไม่ค่อยได้ สิ่งที่คุณต้องทำคือตรวจสอบข้อความแสดงข้อผิดพลาด คลิกที่ Details และหวังดีๆ คำอธิบายอาจมีประโยชน์
โดยไม่ขยายรายละเอียดทุกกรณี ปัญหาหลักของ paravirtualization ลดทอนเหลือ 2 ประเด็นหลัก: 1) คุณต้องการ kernel และ initrd ที่ถูกต้องเพื่อบูตระบบ guest 2) paravirtualized network interfaces ไม่ดี และการผสมผสานของทั้งสองนี้จะป้องกันไม่ให้คุณบูต virtual machines จาก CD/DVD ได้
Kernel & initrd image
กับ full virtualization มันง่ายมาก ในไฟล์ตั้งค่า virtual machine คุณต้องระบุ builder, kernel และ boot directives ให้ถูกต้อง kernel hvmloader พร้อมใช้งานตลอดเวลา จึงไม่มีปัญหาที่นี่

ไม่มี kernel หรือ initrd แบบนี้สำหรับ paravirtualized guests ดังนั้นคุณจึงต้องปรับแต่งเองเลย เมื่อคุณลองเปิด virtual machine หลังสร้างด้วย GUI wizard คุณจะได้ข้อผิดพลาด CD-ROM แต่ไฟล์ตั้งค่าจะถูกเขียนลงดิสก์
ไปที่ /etc/xen/vm directory และเปิดไฟล์ใน text editor สังเกตบรรทัด kernel และ initrd ที่ชี้ไปยัง kernel และ initrd images ชั่วคราวภายใต้ /tmp คุณสามารถเปลี่ยนสองรายการนี้ให้ชี้ไปยัง Xen kernel และ initrd files แบบถาวรได้ แต่เรื่องนี้อาจซับซ้อน เพราะคุณอาจต้องดาวน์โหลดแยกกันหรือสร้างเอง คุณอาจอยากตรวจสอบเนื้อหาของ CD image และหาเนื้อหาที่เกี่ยวกับ xen ซึ่งคุณสามารถคัดลอกมาใช้บูต guest ได้ นี่คือตัวอย่าง:

คุณยังสามารถใช้ bootloader directive พร้อมอาร์กิวเมนต์ที่เหมาะสมได้ แต่ก็ยังเป็นกระบวนการที่เหนื่อยล้า เพราะทุก virtual machine จะต้องการ subset ที่ต่างกัน อย่างไรก็ตาม สำหรับ Linux guests ส่วนใหญ่ คำสั่งต่อไปนี้ควรจะทำงาน (กับ maybe ใหญ่โตที่สื่อสารอยู่):
bootloader = '/usr/lib/xen/boot/domUloader.py'
bootentry = '--entry-=xvda1:/boot/vmlinuz-xen,/boot/initrd-xen'
คุณ當然ต้องปรับ virtual device จาก xvda1 เป็นอะไรก็ตามที่คุณใช้ใน setup นี่คือ ugly hack และไม่จำเป็นว่าจะทำงานได้
Paravirtualized network interface
อุปสรรคอีกอย่างคือ vif directive Xen paravirtualized guests อาจไม่ชอบ setup ของคุณ เหตุผลคือ คุณไม่สามารถใช้ network adapters โดยตรงโดยไม่ได้ bridge พวกเขา คุณจะไม่สามารถใช้ devices เช่น eth0 หรือ wlan0 ได้ คุณจะต้องใช้ xenbr0 หรือ br0 และที่คล้ายกัน หากคุณลองเริ่ม virtual machine จาก command line ข้อความแสดงข้อผิดพลาดจะดังและชัดเจน:

ในฐานะ workaround ชั่วคราว ให้ลบหรือ comment directive ออก และ virtual machine ของคุณควรจะบูตได้ อีกครั้ง ไม่เหมือนบทช่วยสอนส่วนใหญ่ของผมที่ใช้ "yes" แบบแน่นอน ตรงนี้เรากำลังจัดการกับ "maybe" ที่น่าหงุดหงิด แทนที่ generic vif ด้วย directive ใดๆ ที่คุณอาจมีในไฟล์ตั้งค่า
#vif=['',]
และแล้ว magic console:


และคุณจะเจอปัญหาเครือข่ายเร็วหรือช้า:
โดยทั่วไป คุณอาจรอดไปได้ด้วยการไม่มี network แต่สิ่งนี้ไม่ค่อยมีประโยชน์ เพราะเราต้องการ connection ให้ guests ดังนั้น คุณจะต้อง bridge adapters ของคุณ บาง network interfaces อาจไม่รองรับ bridging จึงควรคำนึงถึงสิ่งนี้


อีกครั้ง สิ่งนี้อาจช่วยได้ อาจไม่ช่วยได้ ไม่มีการรับประกันแทบจะไม่มี ตัวอย่างเช่น คุณอาจโชคร้ายและเห็นข้อความแบบนี้บอกว่า: คุณควรหยุดเลย หรือคุณสามารถลองสร้าง bridge ด้วยตนเองโดยใช้ brctl utility
เรามีอะไรอยู่ที่นี่?
คู่มือนี้ค่อนข้างสับสน มาดูสิ่งที่เรามีจนถึงตอนนี้ คุณมี 2 ประเด็นหลัก: หนึ่ง bootloader slash kernel สำหรับ guest ของคุณ สอง network interface การทำงานในโหมด paravirtualized Xen ต้องการ kernel และ initrd files ที่ถูกต้องสำหรับ guests ของคุณ ให้ตั้งอยู่ที่ไหนที่นึงบนดิสก์ มันยังต้องการ bridged network adapters ด้วย
คุณสามารถแก้ปัญหาแรกได้โดยให้ virtual machine wizard สร้าง temporary entries ให้บนฮาร์ดดิสก์ แต่สิ่งนี้ทำงานได้เฉพาะบางประเภทของ guest operating systems ตัวอย่างเช่น Scientific Linux 6 ซึ่งพัฒนาจาก RedHat 6 รองรับสิ่งนี้โดยชัดเจน ดังนั้นคุณโชคดี ดูรายละเอียดเพิ่มเติมด้านล่าง หรือคุณสามารถวาง Xen kernel และ initrd ที่เหมาะสมไว้บนฮาร์ดดิสก์ด้วยตนเอง เป็นทางเลือกสุดท้าย คุณยังสามารถใช้ bootloader โดยตรงอีกครั้ง พร้อมไฟล์ที่ถูกต้อง
ประเด็นที่สองต้องการขั้นตอนเพิ่มเติม คุณต้องตั้งค่า network bridge คุณสามารถ bridge ทั้ง wired และ wireless adapters ได้ อย่างไรก็ตาม ฮาร์ดแวร์บางอย่างอาจไม่รองรับเรื่องนี้
แม้กระนั้น สิ่งต่างๆ อาจไม่ทำงาน และอาจไม่ทำงานจริงๆ จุดสรุป: Xen paravirtualization เป็นเรื่องปวดหัว ควรหลีกเลี่ยง หากเปรียบเทียบความยากลำบากในการทำให้ virtual machines ทำงานแบบนี้ เทียบกับทางเลือกอื่นๆ คำตอบชัดเจนมาก
More reading
หากคุณยังกล้าหลังจากคู่มือนี้ คุณอาจอยากอ่านบทความเพิ่มเติมบางอย่างที่นำเสนอโซลูชันที่เป็นไปได้สำหรับการบูต guests จาก CD-ROM หรือแทนที่จะเป็นการแสดงว่าทำไมมันไม่ได้ทำงาน และทำไมคุณไม่ควรเสียเวลา
Xen domU support - ตัวเลือกยอดนิยมอย่าง Ubuntu และ Fedora ยังไม่ได้รองรับ
How to boot SLES para-virtual domU as a rescue system
Conclusion
การทำงานกับ Xen ในโหมด paravirtualized ไม่ใช่งานที่สนุกสนาน ขึ้นอยู่กับระดับความ进阶ของ guest systems ในการรองรับ para-domU คุณอาจโชคดีและบูตจาก CD หรือ ISO image ได้ แต่คุณก็จะต้องการ bridged networking ซึ่งอาจไม่ทำงานเสมอไป โดยเฉพาะกับ wireless adapters
นอกจากนี้ คุณอาจต้องล่า Xen kernel และ initrd files สำหรับ guest system ของคุณ รวมถึงการ compile เวอร์ชัน custom ของตัวเอง ชนิดงานนี้หนักเกินไปสำหรับคนส่วนใหญ่ ทั้งด้านทักษะ ความอดทน และภาระการบริหาร โดยเฉพาะอย่างยิ่ง เพราะโซลูชันการเสมือนอื่นๆ เสนอเท่าเทียมกันโดยไม่ต้อง流汗
หวังว่าคู่มือนี้ช่วยขจัดหมอก霧ออกไปสักนิด Web server, loopback device, physical drive ไม่ต่างกัน คุณต้องการ special kernel และ initrd images และ bridged networking คุณอาจโชคดีและมี guests ที่รองรับ domU paravirtualization หากไม่ คุณจะเจอปัญหามากมาย คำแนะนำจากใจของผมคือ หลีกเลี่ยงถ้าทำได้ ไปใช้ทางเลือกอื่นๆ แต่ในโหมด full hardware virtualization Xen ค่อนข้าง cool นะ
Cheers.