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

แก้ไขปัญหา Xen Virtualization ที่พบบ่อย: คู่มือขั้นตอน

เมื่อโชคล้มเล่น ประสบการณ์การเสมือนของคุณอาจเปลี่ยนแปลงเป็นอย่างร้ายแรง หากคุณเป็นผู้ใช้ใหม่ของเทคโนโลยี Xen คุณอาจเรียนรู้ בדרךยากว่า ข้อความแสดงข้อผิดพลาดของ Xen นั้นมากมาย (verbose) และไม่ค่อยมีประโยชน์ เว้นแต่คุณจะเป็น Python developer ด้วย traceback แบบยาวๆ และการอ้างอิง internal function calls แบบลึกลับ ข้อผิดพลาดเหล่านี้จริงๆ แล้วดึงความสนใจของคุณออกไปจากปัญหาที่แท้จริงซึ่งง่ายและแก้ไขได้ง่าย

แม้ผมจะไม่ใช่ผู้เชี่ยวชาญด้านการเสมือนหรือ Python ก็ตาม ผมได้เจอปัญหาทั่วไปหลายอย่างที่ใช้เวลาเพียงไม่กี่นาทีในการแก้ไข แต่อาจดูเหมือนนานเป็นนצחสำหรับผู้ใช้ที่รู้น้อยกว่า P.S. ผมเป็นผู้เชี่ยวชาญจริงๆ แต่ปกติแล้วการอ้างว่าตัวเองไม่ใช่ จะดีกว่า เพราะ 1) ข้อผิดพลาดจะได้รับการยกเว้น 2) คุณสามารถล้มเหลวได้ 3) คนชอบความ謙逊และ attitude underdog ทุกอย่าง นี่แหละ มาช่วยให้คุณเพลิดเพลินกับ Xen กันเถอะ

เคล็ดลับ 1: Display

ก่อนเริ่มต้นอะไรเลย ให้แน่ใจว่า display ของคุณตั้งค่าถูกต้อง ไม่ว่าคุณจะใช้ BASH หรือ TCSH ให้ export หรือ setenv ตัวแปร DISPLAY ไปยัง device ที่เหมาะสม นี่ควรเป็นขั้นตอนแรก

export DISPLAY=hostname:port

เคล็ดลับ 2: No module named <insert here>

คุณอาจได้ข้อความแบบนี้เยอะมาก: no module name xen.xm, no module named gtk, no module named อะไรก็ได้ ในกรณีส่วนใหญ่ แหล่งที่มาของปัญหาเหมือนกันหมด แม้ข้อความแสดงข้อผิดพลาดอาจดูไม่เกี่ยวข้องก็ตาม

มาดูตัวอย่าง xm traceback ลองรัน /usr/sbin/xm something และล้มเหลว:

Linux #xm list

Traceback (most recent call last):

File "/usr/sbin/xm", line 8, in <module>

from xen.xm import main

ImportError: No module named xen.xm

มี 2 ทางเลือก: 1) module หายไปจริงๆ 2) มีอะไรผิดปกติที่อื่น มาเริ่มสำรวจทางเลือกแรกก่อน

Missing Python module

Module อาจหายไปจริงๆ คุณสามารถตรวจสอบได้โดยดูว่า package ที่เกี่ยวข้องติดตั้งบนโฮสต์หรือไม่ ตัวอย่างเช่น หาก gtk package หาย คุณสามารถ query ฐานข้อมูลการติดตั้งสำหรับ gtk และ python-gtk packages

คุณยังสามารถรันคำสั่งที่ล้มเหลวกับ strace และหาไฟล์หรือ directories ที่หายไปซึ่ง utility คาดหวัง นี่ควรให้ข้อมูลเพิ่มเติมเกี่ยวกับปัญหา น่าจะเป็นไปได้ว่าคุณอาจมีการติดตั้ง Xen ที่ไม่สมบูรณ์บนเครื่องของคุณ

Something else is wrong

"Something else" หมายถึง Python setup คุณอาจมี packages ติดตั้งบนเครื่อง แต่อาจเป็นที่ Python ไม่เห็นพวกมันด้วยบางเหตุผล ในการแก้ไขปัญหานี้ คุณสามารถตั้งค่า PYTHONPATH variable แบบ manual และชี้ไปที่ site-packages directory

export PYTHONPATH=/path-to-python-version/site-packages

คุณควรตรวจสอบ PATH variable ด้วย เพื่อให้แน่ใจว่าคุณใช้ Python version ที่ถูกต้อง การรันคำสั่งด้วย full path ยังแนะนำเสมอ นี่นำไปสู่เคล็ดลับที่สาม

เคล็ดลับ 3: Explicit commands

เชื่อหรือไม่เชื่อ ส่วนใหญ่ของ Xen utilities เป็น wrapper scripts ใต้ๆ มันคือ Python code ตัวอย่างเช่น Virtual Machine Manager (VMM) ก็เป็น Python เช่นกัน ขั้นแรก คุณต้องหาว่า utility ซ่อนอยู่ที่ไหน:

which <xen utility>

จากนั้น ดูเนื้อหาของไฟล์นั้น:

cat <path to xen utility>

จากนั้น แทนที่จะผ่าน wrapper คุณสามารถรันคำสั่งโดยตรงได้ Wrapper commands ทั้งหมดมี relative names ซึ่งเป็นเรื่องดี เพราะ tools ของคุณจะทำงานได้ไม่ว่า您จะใช้ Python version ไหน แต่พวกมันปิดบัง root cause เมื่อคุณมีปัญหา

เพื่อดูว่าคุณมีปัญหาจริงหรือปัญหา environment setup ให้รันคำสั่งด้วย full path ไปยัง Python installation ของคุณ ตัวอย่างเช่น แทนที่จะรัน virt-manager คุณควรรัน:

/usr/bin/python "/usr/share/virt-manager ..."

หรือแม้แต่ใช้ Python version เฉพาะ เช่น python2.4 หรือ python 2.7

เคล็ดลับ 4: Change scripts

ไม่แนะนำหากคุณไม่ใช่ skilled user แต่คุณอาจเปลี่ยน wrapper scripts ให้ชี้ไปยัง specific paths และ Python installations มาไปที่ปัญหาเริ่มต้นกัน การรัน xm create <vm name> โยนข้อผิดพลาด xen.xm module

ตอนนี้ เราต้องดูว่า xm command คืออะไรพอดี การรัน which กับ xm บอกว่ามันซ่อนอยู่ที่ /usr/sbin/xm ตอนนี้ เปิดไฟล์นี้ใน text editor มันเป็น Python script จริงๆ

#!/usr/bin/env python

# -*- mode: python; -*-

import sys



# add fallback path for non-native python path installs if needed

sys.path.append('/usr/lib/python')

sys.path.append('/usr/lib64/python')

from xen.xm import main



main.main(sys.argv)

ในบาง Xen versions บรรทัดแรกคือ #!/usr/bin/env python คุณอาจอยากเปลี่ยนเป็น specific Python version และดูว่าเกิดอะไรขึ้น ตัวอย่างเช่น Python 2.4 หรือ Python 2.6 หนึ่งในนี้อาจ misconfigured หรือหายไปจาก environment setup

#!/usr/bin/env python <--- delete

#!/usr/bin/python2.6 <--- use

และแล้ว คุณอาจเห็นว่าทุกอย่างทำงาน ตามที่คุณคาดหวัง ตัวอย่างเช่น บน openSUSE 11.4 ของผม ซึ่งมี Xen kernel ติดอยู่:

เช่นเดียวกับ newer versions ของ Xen ที่แค่ list /usr/bin/python คุณอาจอยากทำการเปลี่ยนแปลงเดียวกันเพื่อดูว่าคุณมีปัญหาที่เกี่ยวข้องกับ setup ของคุณเฉพาะหรือไม่

อย่าลืม backup ไฟล์ต้นฉบับก่อนทำการเปลี่ยนแปลง นอกจากนี้ อย่าลองเปลี่ยนมากกว่าหนึ่งครั้งในแต่ละครั้ง เพื่อให้แน่ใจว่าคุณไม่สร้างปัญหาใหม่ที่ซับซ้อนขึ้น

เคล็ดลับ 5: Check services

聽起來愚蠢 แต่คุณจะชนกับลมลมกับ virtualization stuff ของคุณ หาก libvirt service ไม่ได้เริ่มต้น คุณจะไม่สามารถเชื่อมต่อกับ dom0 domain และอื่นๆ ได้ ดังนั้น คุณควรแน่ใจว่ามันกำลังทำงาน รวมถึง enabled on startup

และผมเดาว่าเพียงพอสำหรับตอนนี้

More reading

ทรัพยากรที่มีค่ามาก ที่ Virtuatopia

คุณอาจสนใจ RedHat Documentation, Common Xen Problems

Conclusion

บทความนี้อาจไม่สวยงาม แต่นี่ Python traceback messages ก็ไม่ได้เป็นงานศิลป์เช่นกัน ความมากเกินไปของ verbosity สามารถปิดบังปัญหาจริงๆ ซึ่งอาจง่ายเพียงแค่การตั้งค่า environment variable ให้ถูกต้อง หรือเปลี่ยน Python version ได้ ผมหวังว่าคู่มือนี้ควรช่วยประหยัดเวลาของคุณหลายชั่วโมงจากความลำบากและความหงุดหงิดที่ไม่จำเป็น

คุณมีอะไรมากมายที่ต้องอ่าน ดังนั้นคุณควรทำมันไปเลย แค่ไปที่ virtualization section ของผม และเริ่มคลิกแบบโหดๆ มีบทความ introduction, Xen Cloud Platform และ XenServer, live CD สำหรับการสำรวจ เราจะกลับมากับ Xen goodies อีก มี KVM ด้วย หากคุณชอบ open-source solution อื่น Enjoy!

หากคุณมี simple, global, universal, หรือ common tricks อื่นๆ ที่อยากแบ่งปัน อย่าคอยแปลกหน้า ส่งอีเมลมาหาผมได้ Dedoimedo out.

Cheers.