آشنایی با Qemu(4755 مجموع کلمات موجود در متن) (11846 بار مطالعه شده است) مقدمه
QEMU یک شبیه ساز سیستمی است. ایـــن بدان معناست که QEMU میتواند یک سیستم کامل به همراه تمامی پردازشها و درایوها و کاربرها و ... را شبیه ســـازی کند. اجازه دهید از اول بحث چندان وارد جزئیات نشویم و مثل یک کاتالوگ که پر از عکسهای رنگین و مصور است، چند عکس زیبا را به شما نشان
دهیم.
اجرای Windows 2003 Server درون Fedora Core 5
نصب
Microsoft
Office XP درون
Windows
XP در
حال اجرا بر روی Fedora
Core 5
پخش
فیلم "Anger
Management” با
بازی جک نیکلسون توسط PowerDVD
درون
WinXP
نصب
شده بر روی FC5
فکــر
مــیکنم توانسته باشیـد در کمترین زمان
ممکن بیشترین مطلـب را دریافت کنید!
بله،
با QEMU
میتوانید
عملا یک و یا چند دستگاه مجازی و طبعا
سیستمعامل مجازی بـــــــــرای هر کدام
را درون سیستمعامل فعلی خود تعریف کنید.
سیــــستم
عاملهای مجازی نصب شده میتوانند از
منابع سیستم شما همـــچون CD/DVD-ROM
،
کارت گرافیک، کارت صوت، USB
و
غیره استفاده کــــرده و همـــچنین این
سیستمها براحتی قابلیت اتصال به شبکه
(مجازی
و یا واقعی)
را
دارند.
QEMU
یک
نرمافزار آزاد است که توسط فابریک بلارد
نوشته شده است.
کـــار
این نرمافزار دقیقا مثل نمونههای
دیگری چون VMWare،
Bochs
و
VirtualPC
است،
با این تفاوت که این برنامه از مــــعماری
x86
بیشتر
حمایت کرده و در کل با توجه به ساختار
بازمتن خود در حال گستــــــرش بسیار
سریع بر روی معماریهای دیگر نیز میباشد.
از
QEMU
به
دو صورت میتوان استفاده کرد:
User
mode emulation که
عملا یـــک CPU
دیگر
را شبیه سازی کرده و میتوان برنامههای
مختلف را که برای سیستمعاملهای دیگر
نوشته شدهاند را تــحت سیستمعامل
مورد نظر اجرا کرد.
از
این حالت عملا در Wine
و
Dosemu
استفاده
میشود.
System
mode emulation کـــه
هـــــمانا شبیهسازی یک سیستم مجازی
کامل میباشد.
در
این مقاله کوتاه نیز قصد داریم فقط در
این مورد صحبت کنیم.
جناب
بلارد یک کرنل ماژول غیر بازمتن به نام
KQEMU
کـــه
فعلا استفاده از آن رایگان میباشد نیز
منتشر کردهاند که در صورتی که به هنگام
استــــــفاده از QEMU،
این ماژول در کــــرنل قرار گرفته باشد،
عملا سرعت ماشین مجازی به ۱۰ برابر میرسد!
اگر
بخواهــم این مطلب را به گونه دیگری
بــــــازگو کنم، باید بگویم که عملا از
نصب سیستم عاملهای سنگینی چون WinXP
و
یا حتی FC5
به
عنوان سیستمعامل مجازی بدون داشتن KQEMU
کلا
صرف نظر کنید.
شاید
نصب خود سیستمعامل به ۱۵ ساعت برسد و
عملا اجرای آن کـــاری احمقانه است.
گفتم
که این ماژول فـــعلا بصورت closed
source منتشر
شده و فابریک بلارد خود میگوید که تنها
بــه دنبال شرکتی است که حمایت از این
پروژه را قبول کند تا او این ماژول را
نــیز بصورت بازمتن منتشر نماید.
امیدوارم
بـــــــرادر بلارد بتواند این شرکت سوار
بر اسب سفید رویاهایش را بزودی پیدا کند
تا هم ما و هم او به نوایی برسیم.
فواید
ممکن
اســـت بگویید داشتن چند ماشین مهمان
درون یک ماشین میزبــان واقعا چه فایدهای
دارد؟ از فواید QEMU
و
کلا هر ماشین مجازی میتوان به موارد زیر
اشاره کرد:
تست
سیستمعاملهای جدید بدون ریسک نصب واقعی
و به هم زدن partition
table اصلی
عدم
نیاز به restart
مجدد
سیستم برای وارد شدن به سیستمعامل دیگر
استفاده
از QEMU
در
دنیای شبکه و عملا تبدیــل یک سرور
گرانقیمت با منابع hard
و
RAM
بالا
به دو و یا چند سرور
استفاده
از نرمافزارهای محبوب سیستمعاملهای
دیگر درون سیستمعامل میزبان (در
اینجا لینوکس)
backup
گیری
از فایلی که سیستمعامل مجازی درون آن
نصب شــــده و امکان برگرداندن سیستمعامل
مجازی در صورت بروز هر گونه مشکل در کمتر
از چند ثانیه!
ایجاد
honey
potها
در شبکه
تمرین
شبکه در خانه بدون نیاز به خرید یــــک
سیستم اضـــــــافه و کابل کشی بین دو
سیستم واقعی سختافزاری!
مشکلات
به
صورت کامل از مایکروسافت ویندوز
حـــــــــــــــمایت نــمیکند؛
استفـاده از آن برای emulate
کردن
این سیستمها هیچ مشکلی ندارد (
در
مقــــالــــه "آشنایی
با تئوری ماشینهای مجازی"
از
همین شماره در مورد تفاوتهای emulate
و
simulate
بحث
شده است).
درایورهای
خود برای کار با دستگاههـای I/O
را
نــــــدارد؛ این باعث میشود که در
مواردی همچون پخش مالتی مدیا، سرعت عملا
بسیار پایینتر از ماشین واقعی باشد.
با
اینحال اگر تا بحال با یک VMM
کار
نکردهاید،مشکلات ذکر شده قرار نیست در
نظر شما مهم جلوه کند و میتوانید با خیال
راحت از اولــین تجربه خود لذت ببرید.
چنــد
نفر از شما از اینکه هر از گاهی ناچار است
بــــا سیستمعامل عمو بیل کار کند؟ یا
اینکه برای هر بار وارد شدن به یک سیستمعامل
دیگر دستـــگاه را restart
کند؟
یـــا از مشکلات مختلف Windows
مثل
پاک کردن MBR
در
هر بار نصب و ...
خسته
شده است؟ چند نفر از شما هنوز یواشکی و به
هر دلیلی با یک سری از برنامههای ویندوزی
کار میکنید که دوست داشتید میتوانستید
به کار با آنها در لینوکس ادامه دهید؟ و
در نهایت ممکن است جزء آن دسته از افرادی
بــــاشید که هـــیچ پیغامی را شیرینتر
از یک ping
موفقیت
آمیز با آن سری خطوط زیبای ارسال موفــــق
packet
ها
نمیدانید و عملا بـــــــه آن مــعتاد
شـده باشید!
تمام
این کارها را میتوانید با QEMU
عزیز
انجام دهید.
نحوه
نصب
همانند دیگر برنامههای لینوکسی، دو روش برای نصب وجود دارد: کامپایل سورس کد موجود و نصب از روی بستههای آمــادهای چون rpm و deb. به دلیل اینکه میخواهیم کرنل ماژول KQEMU را نیز نصب نماییم و به هنگام نصب لازم است که این گزینه را نیز در configure خود بیاوریم، عملا روش کامپـــایــل از سورس را توصــیه میکنم، چون واقعا این بسته dependencyهای خاصی هم ندارد و به راحتی نصب میشود. برای دانلود کد سورس و یا بسته آماده برای توزیع خود، میتوانید به سایت www.qemu.org مراجعه کنید.
پس از دانلود کد سورس QEMU و extract آن درون شاخه مثلا /hoomand/tmp، بسته KQEMUای که دریافت نمـودهاید را نیز پس از extract درون شاخه /hoomand/tmp/kqemu قرار دهـــــید. نـــکتهای که به هنگام نصب از طریق سورس بسیار اهمیت دارد، ورژن GCC شما میباشد. QEMU را نمیتوان بوسیله GCC 4 کـــــامــــپایل نمود، چیزی که عملا در تمام توزیعهای امروزی وجود دارد. برای کامپایل QEMU باید حتما از GCC نسخـــه 3.2 استفاده کنید. نگران نباشید، لازم نیست که GCC 4 خود را کامل uninstall کرده و GCC 32 نصب کنید. تنها کاری کــه لازم است انجام دهید نصب بسته compat-gcc-32 است. اگر درون Fedora Core هستید میتوانید براحتی با اجراء فـــرمان yum install compat-gcc-32 اینکار را انجام دهید و یا با یک جستجوی ساده در google بسته را پیدا کنید. اکنون وارد شاخه /hoomand/tmp شده و فرمان معمول زیر را برای نصب از طریق
سورس اجراء نمایید:
$
./configure –cc=gcc32 –with-kqemu
همانطور
که میبینید با استفاده از سوئیچ cc
به
configure
میگوییم
که میخــــواهیم از GCC32
به
عنوان کامپایلر استفاده نماییم.
در
صورتی که هیچ errorای
دریافت نکردید، چندان خوشحال نباشــید!
چرا
که باید خروجی زیر را نیز داشته باشید:
SDL
support yes SDL static link yes
اگر
بجای yes
کلمه
no
را
میبــــینید، بایـــــــــد حتما ابتدا
بسته SDL-devel
را
نصب کرده و سپس مجددا اسکریپت configure
را
اجـــرا نمایید، چـــــرا که بسته SDL
بستهای
است که امکانات گرافیکی را برای سیستمعـــامل
مهمان فراهم میکند و در صورت عدم وجود
آن، دیگر خروجی گرافیک در سیستمعامل
مهمان وجود نخواهد داشت و این یعنی افتضاح!
واقعا
دیگر لزومی نمیبینم که در مورد نحوه نصب
این بسته صحبت کنم، با توجه به توزیـــع
خود میتوانید از yum،
apt،
portage
و
یا هر چیز دیگری استفاده کنید.
آیا
تعدد optionها
در لینوکس خوب است؟ قطعا بلی، ولی نه در
هنگامی که مشغول به نوشتن یک مقاله آموزشی
هستید!
پس
از configure
موفقیت
آمیز qemu،
اکنون میتوانید دستورات make
و
make
install (ایــن
آخری قطعا در حالت root)
را
نیز اجرا کنید.
حال
اگر با نوشتن qemu
در
ترمینال و زدن کلید enter،
خروجی غیر از command
not found مشاهده
میکنید، خسته نباشید!
حال
که QEMU
نصب
شده، خان اول را پشت سر گذاشتهاید.
خان
بعد نصب KQEMU
میباشد.
اشتباه
نکنید، به هنگام نصب QEMU
از
سوئیچ with-kqemu
استفاده
کردیم، ولی این سوئیچ تنها امـــــکان
اجرای QEMU
با
KQEMU
در
آینده را فراهم میآورد، تنها در صورتی
که KQEMU
نیز
نصب باشد.
اگـر
از این سوئیچ استفاده نمیکـــردیم،
دیگر هیچ فرقی نمیکرد کـــــه KQEMU
نصب
باشد و یــا خیـــر، ما نمیتوانستیم از
آن استفاده کنیـــم.
نصب
KQEMU
نیز
دقیقا همانند QEMU
و
حتی سادهتر از آن است.
برای
اینکار بــاید درون شـــاخهای که KQEMU
را
در آن extract
کــــــــردهاید
رفــــته (در
مثـــــال مـــا /hoomand/tmp/kqemu)
و
فرمانهای configure,
make و
make
install را
اجرا نمایید.
اگر
از کرنل ورژن 2.6
استفاده
میکنید که عملا دیگر کاری ندارید و نصب
بخوبی انجام شده است.
در
صورت استفاده از کرنل ورژن 2.4،
ابتدا به شما توصیه میکنیم که اگر واقعا
هیچ دلیلی برای استفاده از این کرنل ندارید
و صرفا به جهت تنبلـــی update
نکردهاید،
اینکار را انجام دهید!
اما
اگر دلیل خاصی دارید، حتما بـــه صفحه
زیر مراجعه کنیــــد و نحوه نصـــب سورس
کرنل خود و انجام تغییرات لازم برای
بهرهبرداری از KQEMU
را
مطالعه کنید:
http://fabrice.bellard.free.fr/qemu/kqemu-doc.html#SEC3
اکــــنون
باید بتوانید فایـــل kqemu.ko
را
درون شاخه /lib/modules/KERNEL_VERSION/misc
مشاهــده
کنید.
منـــظور
از KERNEL_VERSION
شماره
ورژن کرنل شما میباشد.
به
عنوان مثـــال در مورد دستگاه من این شاخه
به این صورت است:
/lib/modules/2.6.15-1.2054_FC5/misc/kqemu.ko
اکنون
میتوانید با استفاده از modprobe،
این ماژول را درون کرنل قرار دهید:
$
/sbin/modprobe kqemu
اگر
هر گونه خطــایی از دســـتــــور بـــالا
دریــــافت کردید، بـد نیست که از سوئیچ
f
برای
مجبور کردن modprobe
به
لود ماژول استفاده کنید.
کـــلا
استفاده از سوئیچ f
در
دستورات کار درستی نیست، و لیکن در این
مورد من هر کاری کردم نتوانستــــم KQEMU
را
بصورت درست load
کنم
و آخرین توصیهای که در qemu
IRC داشتم
استفاده از f
بود
که بخوبی کار کرد و بعــد از آن هم هیچ
مشکلی نداشتم!
بنابراین
اگر ایراد عجیب و غریبی به هنگام modprobe
کردن
دریافت میکنید، میتوانید از این سوئیچ
استفاده کنید:
$
/sbin/modprobe kqemu -f
کی گفته که استفـــــــــــاده از عامل فشار بد است؟! بعد از modprobe موفقیت آمیز KQEMU، اکنون باید شاخه /dev/kqemu شما با دسترسی read و write برای root ساخته شده باشد. صحت این امر را میتوانید با یک ls ساده تست کنید. اگر بخواهید میتوانید مجوزهای این شاخه را عوض کنید، مثلا آن را برای همه قابل خواندن و نوشتن کنید. با انجام تمام این کـــارها، اکنون تنها امیدواریم که QEMU و KQEMU شما به درستی نصب شده باشد. تنها راه اینکه بفهمیم آیا واقعا این اتـفاق افتاده است و یا خیر، استفاده از QEMU برای نصب یک سیستمعامل، مثلا Windows XP میباشد که در مرحله بعد این کار را انجام خواهیم داد. تنها نکته قابل ذکر در انتهای این بخش این است که اگر میخواهید در هر بار reboot سیسستم، Kgks درون کرنل مــــجدد لــود شـــود، باید دستــــور modprobe ای که از آن استفاده کردهاید را عینا داخل فایلی همچون /etc/rc.d/rc.local قرار دهید.
نصب Windows XP با استفاده از QEMU
خوب، حالا نوبت این است کـــه کمی از کاری که کردید لذت ببرید و QEMU را در عمل تجربه کنید. برای اینکه بخواهیم سیستمعامل خود را نصب کنــــیم، ابتدا باید قسمتی از دیسک سخت خود را برای نصب سیستمعامل مجازی در آن انتخاب نماییم. این قسمت در قالب یــــــک فایل مشخص میشود، ولی سیستمعامل مجازی در عمل این فایل را یک دیسک سخت میشناسد. عجله نکنید، عملا به چشم خواهید دید. در اینجا با استفاده از دستور qemu-img فایلی که میخواهیم سیستمعامل در آن نصب کنیم را میسازیم:
$
qemu-img create winxp.img 10GB
همانطور
که میبینید پس از اجـــرای دستور فوق،
فایل winxp.img
ساخته
میشود.
منتها
حجم اولیه آن ۱۰ گیگابایت نخواهد بود.
ده
گیگابایت در اینجا تنها حداکثر مقداری
را نشان میدهد که فایل اجازه بزرگ شدن
در آینده دارد؛ یعنی در سیستم مجازی
نمیتوانید بیشتــــــر از ۱۰ گیگابایت
اطلاعات در آینده ذخیره کنید.
البته
قصه نخورید، اگر عدد اولیه را اشتباه
انتخاب کرده باشید و در آینده بخواهید
مثلا ۱۰ گیگابایت را به ۲۰ گیگابایت افزایش
دهید، روشهایی وجود دارد.
اکنون
وقت این رسیده است که سی دی Windows
XP را
درون درایو قرار دهید و سپس دستور زیر را
اجرا کنید:
$
qemu -hda winxp.img -cdrom /dev/hdc -boot d -m 256 -localtime
-kernel-kqemu -soundhw all
اگر
بخواهم یک توضیح سریع در مورد این دستور
داشته باشم، باید بگویم که سوئیچهای به
نظر مشکل بکار رفته شده در اینجا عملا این
کارها را انجام میدهــــــند:
سوئیچ
hda،
فایل winxp.img
ساخته
شده در مرحله قبل را بعنوان هارد دیسک اول
(hda)
به
qemu
معرفـــــی
میکــــند.
سوئیچ
cdrom
نیز
درایو cdrom
ماشین
مجازی را برابر با /dev/hdc
که
همانا درایو واقعی دستگاه ماست، قرار
میدهد و با boot
d نوشـــــته
شده، qemu
بجای
اینکه از هارد دیســــک اول (winxp.img)
سیستم
را بوت کند، از cdromای
که بــــرایش تـــعریف کـــردیم سیستم
را بوت میکند.
چون
در اینجا ما میخواهیم ویندوز را از روی
CD
نصب
کنیم، به اینصورت عمل میکنیم.
فرض
کنید از CD
ویندوز
XP
قبلا
یک img
ساخته
بودیم و دیگر نمیخواستیم از روی CD
آنرا
نصب کنیم.
اگر
باز هم فــــــــرض را بر این بگیریـــم
که اسم این image
مثلا
bijanjoon.img
میبود،
آنگاه تنها لازم بود که درایو cdrom
را
که در دستور قبلی درایو واقعـــــی سیستم
تعریف کردیم، عوض کرده و آنرا برابر با
فایل img
خود
قرار دهیم، نگاه کنید:
$
qemu -hda winxp.img -cdrom
bijanjoon.img -boot d -m 256 -localtime -kernel-kqemu -soundhw
all
تغییر
انجام شده را بصورت زرد مشاهده میکنید.
بعدا
که سیستمعامل را نصب کردید، دیگـــر
لازم نیست که از cd
بوت
کنید، بنابر این تنها کافیست boot
d را
به boot
c تغییر
دهید.
میبینید
چقدر ساده اســـت؟ چه کسی گفته که کار با
shell
سخت
است؟!
عملا
شاید بتوان گفت تنها تفاوت ظاهری (چیزی
که یک کاربر مثل من و شما ممکن است متوجه
شود)
بین
QEMU+KQEMU
و
VMWare
همین
باشد که QEMU
کاملا
با خط فرمان باید کنترل شود و هیچ ظاهر
گرافیکی زیبایی ندارد (در
عوض همه چیز را خودتان باید متوجه شوید و
شاید وقتی به تعریف شبکه و ...
برسید
از اینکه qemu
را
انتخاب کردید از خودتان متنفر شوید!)
ولیکن
VMWare
همانند
یک برنامه ویندوزی کاملا ظاهر گرافیکی
داشته و کار با آن خیلی راحتتر است.
خوب،
سوئیچ بعدی یعنی m
256 مقدار
۲۵۶ مگابایت حافظه مجازی را به سیستم
مجازی شما اختصاص میدهد.[۱]
اگر
پیغامی دریافت کردید مبنی بر اینکه این
مقدار حافظه قابل تخصیص نمیباشد، این
مقدار را فعلا به ۱۲۸ تغییر دهید.
سوئیچ
بعدی یعنی localtime
به
ماشین مجازی میگوید که وقت خود را با
زمان کامپیوتر شما (کامپیوتر
میزبان)
تنظیم
کند.
سوئیچ
kernel-kqemu
را
حتما به هنگام اجراء ماشینهای مجازی خود
بیاورید، سرعت را واقعا بیشتر میکند.
اشـــتباه
نکنید، این سوئیچ برای فعالسازی KQEMU
نمیباشد.
اگر
KQEMU
به
درستی نصب شده باشد، خودش کـــار میکند.
این
سوئیچ تنها به QEMU
میگوید
که از KQEMU
در
حالت کرنلی استفاده کند و نه در user
mode. این
یعنی چه؟ تا جایی که میدانم یعنی اینکه
QEMU
به
خودش اجازه میدهد از زمان و منابع سیستم
واقعی شما استفاده کند، به عبارتی اگر
معماری شما اجازه دهد،[۲]
پردازشهای
اجرایی در خود را به عنوان پردازشهای بومی
در دستگاه شما معرفی کند و به این طریق
سرعت عملا چـــندین برابر نسبت به حالتی
که از KQEMU
تنها
در حالت عادی (کاربری)
استفاده
میشود، گردد.
سوئیچ
آخر که همان soundhw
all مـــــیباشد
نیز تمامی کارتهای صدا را فعال میکند.
اگر
راهنمای رسمی QEMU
موجود
در سایت خودش را مطالعه کنید، میبینید
که میتوانید نامهایی را برای کارتهای
صوتی خود بیاورید، ولی واقعا لزومی به
اینکار نیست.
وقتی
میتوان از کلمه all
استفاده
کرد و دیگر ریسک استفاده از نام غلط را به
جان نخرید، چرا راه دیگری را انتخاب کنیم؟!
خوب،
پس از اجرای دستور، اکنون بایـــــد
ببینید که پنجرهای باز شده و Windows
XP شما
در حال بوت شدن اســـت، تبریکات کامل من
را بپذیرید!
هر
گاه که بخواهید کنترل صفحه کیبرد و ماوس
شما به درون ماشین مجازی منتقل شود، تنها
کافی است که درون پنجره ماشین مجازی کلیک
کنید، و هر گاه خواستید کنترل وسایل ورودی
خود را بــــه درون سیـــستم میزبان
بازگردانید، تنها کافیست کلیدهای alt+ctrl
سمت
چپ را فشار دهید.
برای
نمایش ماشـــین مجازی بصورت تـمام صفحه
[۳]
نیز
میتوانید از کلیدهای alt+ctrl+f
استفاده
نمایید.
فشار
مجدد این کلیدها باعث کوچک شدن صفحه ماشین
مجازی میگردد.
QEMU
Monitor
به
نظر اسم غولی میآید، نه؟ چندان هم غول
نیست.
هنگامی
که دستور QEMU
شما
(دستور
قبلی)
با
موفقیت اجراء شد و صفحه کوچکی که سیستمعامل
مهمان شما را در خود جای داده ظاهر گردید،
با زدن کلیدهای Alt+Ctrl+2
وارد
QEMU
Monitor میشوید.
این
محیط به چه دردی میخورد؟ به خیلی از
دردها!
در
اینجاست که واقعا میتوانید ببینید آیا
KQEMU
در
حال اجراست و یا خیر.
پس
از وارد شدن به QEMU
Monitor میتوانید
با تایپ دستور help،
عملا لیستی از فرمانهای موجود را ببینید.
یکی
از این فرمانها، فرمان info
میباشد.
برای
دیدن وضعیت KQEMU،
میتوانید از فرمان زیر استفاده کنید:
(qemu)
info kqemu
kqemu
support: enabled for user and kernel code
توجه:
از
این به بعد هرگاه از شما خواستم دستوری
را تایپ کنید، اگر قبل از دستور کاراکتر
$
آمده
بود، به معنای این است که دستور را با نام
کاربری خودتان و درون ماشین میزبان
(لینوکس)
اجراء
کنید.
هر
گاه کاراکتر #
را
مشاهده کردید، یعنی باز هم باید دستور را
درون ماشین میزبان، ولی این بار بصورت
root
اجراء
کنید.
اما
هرگاه خط فرمان با (qemu)
شروع
شده بود، یعنی باید دستور را درون QEMU
Monitor یا
همان ماشین مهمان اجراء نمایید.
همانطور
که میبینید، بعد از اجرای این دستور،
با پیغامی مواجه میشویم که بصورت بسیار
شیرین و دلپذیری به ما میگوید که KQEMU
فعال
است و دارد کار میکند.
چیزی
که در این خروجی مهم است همان کلمه enabled
است،
چرا که اگر به هنگام اجراء ماشین مجازی
از سوئیچ kernel-kqemu
استفاده
نمیکردید، خروجی اندکی متفاوت [۴]
ولیکن
باز هم با همان کلمه enabled
دریافت
مینمودید.
اگر
خروجی مبنی بر disabled
بودن
KQEMU
مشاهده
میکنید، دوباره نحوه نصب QEMU
و
KQEMU
توضیح
داده شده در اینجا را مطالعه کنید، چون
همیشه امکان اینکه چیزی را جا انداخته
باشید وجود دارد.
در
صورت رفع نشدن مشکل، قطعا به سایت رسمی
QEMU
و
یا کانال irc
آن
مراجعه کنید.
خلاصه
کلام اینکه اصلا سعی نکنید QEMU
را
بدون KQEMU
استفاده
کنید، قبل از اینکه فرصت آنالیز پیدا کنید
پشیمان خواهید شد!
QEMU
monitor فواید
دیگری نیز دارد.
فرض
کنید به هنگام اجراء ماشین مجازی خود، یک
cd
را
درون cdrom
خود
گذاشته بودید و با استفاده از سوئیچ cdrom
/dev/hdc از
qemu
خواسته
بودید که آن cd
را
برای شما در دستگاه مهمان نیز بیاورد.
این
سناریو بارها اتفاق میافتد.
اگر
بخواهید درون دستگاه مجازی خود مثلا
Office
و
یا هر نرمافزار دیگری نصب کنید، بالاخره
به cd
نیاز
پیدا میکنید.
حال
فرض کنید که کار شما با cd
تمام
شده و میخواهید cd
دیگری
را به ماشین مجازی خود معرفی نمایید.
اگر
از درون ماشین میزبان (در
اینجا لینوکس)،
cd
را
eject
کنید
و cd
دیگری
را درون cdrom
قرار
دهید، توقع نداشته باشید که درون ماشین
مجازی بتوانید cd
جدید
را ببینید!
در
چنین مواقعی میتوانید به QEMU
Monitor آمده
و از دستور change
به
صورت زیر استفاده نمایید:
(qemu)
change cdrom /dev/hdc
همانطور
که میبینید در اینجا من باز هم از QEMU
میخواهم
که درایو cdrom
را
برابر /dev/hdc
قرار
دهد.
اصلا
فرض کنید که میخواستید درایو را برابر
درایو واقعی dvd-romای
که دارید قرار دهید، چکار میکنید؟
(qemu)
change cdrom /dev/hdd
میبینید
که چقدر ساده است؟!
کار
دیگری که میتوان در QEMU
Monitor به
انجام رساند، خاموش کردن سیستم مجازی و
یا به عبارتی بستن پنجره ماشین مهمان
میباشد.
برای
اینکار ابتدا سیستم مجازی را بصورتی که
معمولا خاموش میشود، خاموش کنید.
یعنی
مثلا در ماشین مجازی ویندوز XP،
به منوی Start
رفته
و گزینه Shut
Down را
انتخاب نمایید.
هنگامی
که صفحه مشکی در ماشین مجازی مشاهده شد
که به شما میگوید الان وقت مناسبی برای
خاموش کردن ماشین است، با زدن alt+ctrl+2
به
QEMU
Monitor رفته
و با تایپ دستور quit
یا
تنها مخفف آن یعنی q
و
زدن کلید enter،
ماشین را واقعا خاموش نمایید.
کارهای
بیشمار دیگری همچون ارسال کلیدهای
alt+ctrl+f1
و
یا هر کلید دیگری که ترکیبی از alt+ctrl
باشد
و یا دیدن قسمتی از حافظه که QEMU
در
استفاده دارد و ...
را
نیز میتوان با QEMU
Monitor انجام
داد که در صورت نیاز قطعا خود به دنبال
یادگیری آن خواهید رفت.
نحوه
انتقال داده بین ماشین میزبان و مهمان
حال
که ماشین مجازی خود را ساختهاید و هر
وقت که خواستید آنرا راه انداخته و یا
خاموش میکنید، قطعا به این فکر هم
افتادهاید که چطور میتوان بین این
ماشین و ماشین میزبان ارتباط برقرار کرده
و عملا نقل و انتقال داده را برقرار کرد.
اگر
فایلی که سیستمعامل میزبان را در خود
جای داده از نوع img
باشد،
یعنی همانی که ما اینجا آموزش دادیم، و
فایل سیستم مهمان از نوع VFAT
باشد،
میتوانید با استفاده از نرمافزار
mtools
با
فایل img
ارتباط
برقرار کنید و نقل و انتقال فایل را انجام
دهید.
توجه:
هیچگاه
هنگامی که ماشین مجازی روشن است اینکار
را انجام ندهید!
روش
دیگر استفاده از نرمافزار fsimage
است
[۵]
که
قابلیتهای بیشتری دارد.
این
نرمافزار میتواند فایلهای مختلفی
همچون فایلهای مربوط به نرمافزار VMWare،
QCOW
و
QEMU
را
بخواند.
و
بالاخره اگر فایل سیستم انتخابی بر روی
سیستم مهمان از نوع NTFS
باشد،
میتوانید از نرمافزار lomount
استفاده
کنید.
چگونگی
استفاده از این نرمافزارها خود بحث
دیگری دارد که میتوانید با مراجعه به
سایتهای مادر این نرمافزارها و همچنین
کمک گرفتن از FAQ
سایت
راهنمای غیر رسمیQEMU،که
در اینجا قابل دسترسی است [۶]
اینکار
را به انجام برسانید.
روش
آسانتر که نیاز به نرمافزار خاصی هم
ندارد ایجاد یک شبکه بین ماشین مجازی و
ماشین میزبان است.
این
روش نه تنها به شما اجازه نقل و انتقال
داده را میدهد، بلکه میتوانید از این
طریق بین ماشینهای مجازی مختلف خود با
ماشین مهمان ارتباط برقرار کرده و حتی
ماشینهای مجازی خود را درون شبکه واقعی
قرار دهید، به قسمی که مثلا اگر ۲ کامپیوتر
مجازی درون دستگاه واقعی شما در حال اجرا
میباشند و دستگاه واقعی شما درون شبکهای
با ۵ کامپیوتر قرار دارد، تعداد کامپیوترهای
موجود در شبکه از دید بقیه کاربران به نظر
۷ بیاید و شما از این طریق بتوانید سرویسهای
مختلفی ارائه نمایید.
شبکه
سازی بین ماشین مجازی و دنیای خارج
چنان
که افتد و دانی برای برقراری یک شبکه در
دنیای واقعی، ابتدا نیاز به وسیلهای
داریم که ارتباط بین دو کامپیوتر را ایجاد
کند.
این
وسیله همان کارت شبکه است که کابل شبکه
را در خود جای داده و اطلاعات را گرفته و
یا منتقل مینماید.
منتها
هنگامی که سخن از دستگاه مجازی به عمل
میآید، دیگر نمیتوان از کارت شبکه
واقعی موجود در دستگاه کمک گرفت.
بدین
منظور باید کارت شبکه مجازی خود را نیز
داشته باشیم تا بدین وسیله بتوانیم با
سیستم مجازی ارتباط برقرار نماییم.
در
اینجا ما باید ماژول tun
از
کرنل لینوکس خود را فعال نماییم تا بتوانیم
ارتباط بین ماشین مجازی و میزبان را برقرار
کنیم.
بدین
منظور دستور زیر را در حالت root
تایپ
میکنیم:
#
/sbin/modprobe tun
اگر
پیغام خطایی دریافت نکردید که آفرین و
گرنه به دنبال این باشید که چطور میتوانید
این ماژول را در توزیع لینوکس خود نصب
کنید.
بعد
از این مرحله، باید فایلی به نام qemu-ifup
را
درون شاخه /etc
خود
با محتوای زیر ایجاد نمایید:
#!/bin/bash
IF="$1"
NR=`echo
$IF | sed 's/^[a-z]*//'`
NX=$[NR+10]
IFX="10.0.$NR.1"
BCX="10.0.$NR.255"
RMX="10.0.$NR.2"
echo
-e "\e[33m$IF configured for $IFX/$RMX\e[0m"
/sbin/ifconfig
$IF $IFX netmask 255.255.255.0 broadcast $BCX
/sbin/route
add -net 192.168.$NR.0/24 gw $RMX
echo
1 > /proc/sys/net/ipv4/conf/$IF/proxy_arp
تنها
کاری که این اسکریپت انجام میدهد، تخصیص
tapهایی
برای هر ماشین مجازی است که شما با QEMU
اجرا
میکنید.
Tap چیست؟
میتوانید tap
را
عملا یک نوع کارت شبکه مجازی در نظر بگیرید.
حال
خواهید دید که پس از اجرای QEMU
به
این روش و سپس اجرای دستور ifconfig،
میتوانید tap0
را
نیز به همراه eth0
(کارت
شبکه اولتان)
[۷]
ببینید!
پس
از ذخیره اسکریپت بالا درون /etc/qemu-ifup،
مطمئن شوید که مجوز آنرا برابر با چیزی
شبیه 751
قرار
دادهاید.
نکته:
اگر
از توزیع دیگری غیر از Fedora/Redhat
استفاده
میکنید، به احتمال قوی خطوطی که با نام
شاخه /sbin
شروع
میشوند (همچون
/sbin/ifconfig)
را
بایستی عوض کرده و برابر با مسیر درست آن
دستور در توزیع خود قرار دهید.
اگر
خاطرتان باشد (که
حتما هست!)،
ماشین مجازی خود را به چنین صورتی راه
میانداختید:
$
qemu -hda winxp.img -cdrom /dev/hdc -boot d -m 256 -localtime
-kernel-kqemu -soundhw all
خبر
بدی که برایتان دارم این است که از این به
بعد باید این دستور را بصورت زیر اجرا
کنید:
#
qemu -hda winxp.img -cdrom /dev/hdc -boot d -m 256 -localtime
-kernel-kqemu -soundhw all -net tap -net nic
به
تفاوتها دقت کنید!
بله،
در وهله اول ناچارید که از این به بعد این
دستور را در حالت root
اجراء
نمایید، چون تنها root
است
که میتواند از tun/tap
استفاده
کند.
تغییر
آخر هم که در انتهای فرمان و در قالب دو
سوئیچ تازه آمده است.
با
انجام مراحل فوق، اکنون باید بتوانید
ویندوز XP
مهمان
خود را دوباره اجراء کنید.
اینبار
پس از اجرای دستور بالا، متوجه خط نارنجی
رنگی که IP
ماشین
میزبان و مهمان را به شما نمایش میدهد
باشید.
بله،
همانطور که میبینید چنین چیزی چاپ
میشود:
#
tap0 configured for 10.0.0.1/10.0.0.2
اگر
دستور ifconfig
را
نیز اجراء کنید، میبینید که دستگاه
میزبان شما وسیلهای به نام tap0
با
IP
برابر
با 10.0.0.1
دارد.
تنها
کاری که لازم است انجام دهید این است که
پس از راهاندازی ماشین مهمان، وارد آن
شده و IP آنرا در کلاسی همسان با IP دستگاه
میزبان قرار دهید.
در اینجا همینطور که خود اسکریپت نیز به شما
توصیه میکند، میتوانید IP دستگاه مهمان را برابر با 10.0.0.2
قرار
دهید.
قطعا
فرض را بر این میگذارم که میدانید
چگونه IP
در
ویندوز XP
تعریف
نمایید.
پس
از انجام این کارها، اکنون میتوانید در
ویندوز XP،
ترمینال را باز کرده و دستگاه میزبان را
ping
نمایید:
c:\ping
10.0.0.1
Reply
from 10.0.0.1: bytes=32 time=6ms TTL=64
Reply
from 10.0.0.1: bytes=32 time=6ms TTL=64
Reply
from 10.0.0.1: bytes=32 time=6ms TTL=64
Reply
from 10.0.0.1: bytes=32 time=6ms TTL=64
همانطور
که میبینید کار با موفقیت انجام شده
است.
به
شما گفتم که ناچارید از این به بعد ماشین
مجازی خود را حتما با کاربر root
اجرا
کنید.
خوب،
کمی اغراق کردم!
شما
میتوانید نام کاربری عادی خودتان را در
فایل /etc/sudoers
تعریف
کرده و مجوزهای لازم برای راهاندازی
tun/tap
را
به آن بدهید.
ولی
این روش هم چندان دل چسب و دندانگیر
نیست، چون عملا سوء استفاده از نام root
است!
اگر
خیلی به شبکه سازی بین ماشین مجازی خود و
دنیای خارج علاقهمندید و میخواهید نه
تنها از شر این محدودیت خلاص شده بلکه
امکانات بسیار دیگری را نیز داشته باشید،
عمیقا استفاده از VDE
را
[۸]
به
شما توصیه میکنم.
با
استفاده از VDE
که
بر روی tun/tap
سوار
شده باشد، میتوانید ارتباط دستگاههای
دیگر را با ماشینهای مجازی خود برقرار
نمایید.
میتوانید
برای دیدن VDE
به
سایت پروژه آن یعنی vde.sf.net
مراجعه
کنید.
مطلب
بعد در مورد شبکهسازی این است که من در
اینجا تنها راحتترین روش ساخت شبکه بین
ماشین میزبان و یک ماشین مهمان را توضیح
دادم.
اگر
سعی کنید که ماشین مجازی دوم خود را در
حالی که ماشین مجازی اول در حال اجراء شدن
است، اجراء نمایید، میبینید که اسکریپت
موجود یک IP
از
کلاس 10.0.1.1
را
به tap1
از
سیستمعامل میزبان شما تخصیص داده و
10.0.1.2
را
به ماشین مهمان جدیدتان اختصاص میدهد،
یعنی اینکه هر بار که بخواهید ماشین مجازی
را همزمان با ماشینهای مجازی دیگر اجراء
کنید، IP
از
کلاس دیگر دریافت میکنید.
به
زبان ساده، دیگر دو ماشین مهمان نمیتوانند
همدیگر را ببینند، چرا که کلاس IP
آنها
فرق میکند.
برای
اینکه این دو بتوانند یکدیگر را ببینند،
باید routing
را
بین آنها فعال نمایید.
مساله
بعدی نحوه قرار دادن ماشین مجازی درون یک
شبکه واقعی است.
هیچکدام
از این موارد را من در اینجا مطرح نکردم.
اگر
واقعا دوست دارید که چنین کارهایی را
انجام دهید، ابتدا باید مفهوم آنها در یک
شبکه واقعی را بفهمید، نحوه پیادهسازی
لینوکسی آنرا فرا بگیرید و آنگاه به دنبال
پیادهسازی آن روشها در محیط مجازی
بگردید.
[۹]
همانطور
که گفتم برای راه اندازی این موارد در
QEMU،
باید واقعا همه چیز را متوجه شوید و هیچ
ظاهر گرافیکی برای اینکار وجود ندارد.
برای
به انجام رساندن این موارد و آشنایی با
خیلی از صورت مسالههای دیگر، مجددا
مطالعه مراجع آورده شده در آخر این مقاله
را به شما توصیه میکنم.
سخن
آخر
میتوانم
بگویم تصور داشتن آیکونی بر روی دسکتاپ
لینوکس که با کلیک بر روی آن، ویندوز درون
پنجرهای کوچک همچون GAIM
باز
شود، اولین چیزی بود که من را در نصب QEMU
قلقلک
میداد!
تجربه
کار با VMWare
درون
محیط ویندوزی به دلیل علاقهای که به
مفاهیم شبکه داشتم و نبود یک کامپیوتر
واقعی دیگر که بتوانم آنرا با دستگاه خود
شبکه کنم را از قبل داشتم، ولی همیشه ناچار
بودم برای تمرین شبکه به ویندوز رفته و
پس از پایان کار به دسکتاپ لینوکسی خود
بازگردم که واقعا کار سخت و نفس گیری بود!
به
همین جهت و با تصور داشتن آن آیکون کوچک
و خوشگل بر روی دسکتاپم، تصمیم به کار با
QEMU
گرفتم
که واقعا تجربه شیرین و دلچسبی بود.
پس
از کار با QEMU
بود
که فهمیدم این نرمافزار امکانات بیشماری
همچون ساخت vlanهای
مجازی و اتصال ماشینهای مجازی به آنها را
فراهم میآورد.
مقالهای
که لطف کردید و مطالعه نمودید تنها به
صورت فهرستوار و آنهم از تجربیات یک
ماهه ناچیز بنده در کار با QEMU
سخن
میگفت، ولی بدانید که QEMU
خیلی
حرفها برای گفتن دارد که در اینجا آورده
نشده است.
چندی
پیش یکی از دوستان کتابی تحت عنوان ماشینهای
مجازی را برای ترجمه به من سپرد.
من
که تازه با QEMU
آشنا
شده بودم، نمیدانستم که ماشینهای مجازی
چندین و چند دهه است که در کامپیوتر وجود
دارند و QEMU
تنها
یکی از نرمافزارهای پیادهکننده آنها
میباشد!
با
مطالعه این کتاب و آشنایی با انواع ماشینهای
مجازی، با خود گفتم که بد نیست خواننده
کنجکاو نیم نگاهی نیز به فلسفه این ماشینها
و نحوه کار آنها بدون توجه به نحوه
پیادهسازیشان انداخته و ببیند که
واقعا این ماشینها چگونه کار خود را که
در نظر تنها به رویا میماند، به انجام
میرسانند.
از
اینرو مقالهای با نام "آشنایی
با تئوری ماشینهای مجازی"
در
همین شماره از مجله نوشتهام که تنها
هدفش معرفی آکادمیک ماشینهای مجازی و
انواع آنها میباشد.
این
بخش هیچ ارتباطی به qemu
و
نحوه نصب آن ندارد!
اگر
علاقهمندید که فلسفه وجودی این ماشینها
را درک کنید و با طبقهبندیهای آنها و
کلا دنیای آنها آشنا شوید، مطالعه این
قسمت خالی از لطف نخواهد بود.
نویسنده:
بیژن هومند :
hoomand <AT> gmail.com
پانویسها:
[۱].این
حافظه در واقع از RAM
واقعی
سیستم شما گرفته نمیشود، بلکه از شاخه
/dev/shm
برداشته
میشود.
برای
اینکه بخواهید این مقدار را افزایش دهید،
باید خط زیر را در /etc/fstab
خود
داشته باشید:
tmpfs
/dev/shm tmpfs user,size=1024M 0 0
که
طبیعتا میتوانید مقدار ۱۰۲۴ را هر لحظه
که خواستید عوض نمایید.
[۲].در
مقاله "آشنایی
با تئوری ماشینهای مجازی"
از
همین شماره در این باره بحث میکنیم که
اصلا معماری به چه معناست!
در
اینجا تنها منظور این است که اگر ISA
سیستمها
مثل هم باشند.
[۳].Full
Screen
[۴].طبعا
دیگر قسمت and
kernel code در
خروجی مشاهده نمیشد!
[۵].http://www.smallworks.com/%7Ejim/fsimage
[۶].
http://kidsquid.com/cgi-bin/moin.cgi/FrequentlyAskedQuestions
[۷].اگر
کمی حرفهایم گنگ است اصلا نگران نشوید،
تنها کاری را که میگویم انجام دهید و
مطمئن باشید شبکه شما راه میافتد.
اگر
با مفاهیم عمومی شبکه و یا انجام آن در
لینوکس (شبکه
بین دو دستگاه واقعی لینوکسی)
مشکل
دارید که باید درباره مفاهیم شبکه و نحوه
انجام آن در لینوکس مطالعه کنید.
و
اگر مفهوم tun/tap
را
بخوبی متوجه نمیشوید میتوانید به سایت
kidsquid.com
سری
بزنید و یا عین همین عبارت را گوگل کنید.
[۸].
Virtual Distributed Ethernet یا
VDE
[۹].تا
مفهوم routing،
ip
masquarading و
یا bridge
و
switch
و
vlan
را
ندانید، نمیتوانید از خود توقع داشته
باشید که بتوانید آنها را در سطح کرنل
لینوکس و برای ماشین مجازی خود پیاده سازی
کنید!
مراجع
My
favorite search engine: www.google.com
Qemu
official web site: www.qemu.com
Wikipedia,
the free encyclopedia: http://en.wikipedia.org/wiki/QEMU
The
unofficial qemu wiki: http://qemu.kidsquid.com
Qemu IRC:
irc.freenode.net#qemu
PDF Version
|