ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:1
مجموع:مجموع:1
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با Qemu

(4755 مجموع کلمات موجود در متن)
(11847 بار مطالعه شده است)  نسخه چاپی
مقدمه

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

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.