مجازی سازی در لینوکس
Xen Virtual Machine Monitor) Xen VMM) یک پروژه اپن سورس است که در آزمایشگاه های کامپیوتر دانشگاه کمبریج انگلیس توسعه داده می شود.
مجازی سازی و به ویژه پروژه Xen، یکی از مهم ترین موضوعاتی هستند که در راس وقایع یک ساله اخیر دنیای اپن سورس بوده اند. پشتیبانی سه توزیع قدرتمند لینوکس (فدوراکور، دبیان و OpenSuSE) از این پروژه، همکاری گروه توسعه دهنده برنامه مجازی سازی VMWare با پروژه Xen، تمایل شرکت های بزرگی مانند اینتل و سان مایکروسیستمز به توسعه Xen، و نهایتاً بهبود چشمگیر کارایی این برنامه در نسخه های جدید، روی هم رفته باعث جلب توجه محافل و صنعت مجازی سازی به سوی این برنامه اپن سورس شد و هزاران شرکت اقدام به آزمایش و به کارگیری آن نمودند که حاصل آن، انتشار هزاران گزارش، بررسی، مقاله و اسناد علمی معتبر درباره Xen و نهایتاً پیشرفت بیشتر در توسعه آن شد. در این نوشتار ابتداً نگاهی به این پروژه و ویژگی های آن خواهیم انداخت و در ادامه راه اندازی یک ماشین مجازی در لینوکس را بررسی می نماییم.
●Xen چیست؟
Xen Virtual Machine Monitor) Xen VMM) یک پروژه اپن سورس است که در آزمایشگاه های کامپیوتر دانشگاه کمبریج انگلیس توسعه داده می شود. خروجی این پروژه یک برنامه مجازی سازی به نام Xen است که امکان ساخت و برپاسازی چندین ماشین مجازی با قابلیت اجرا توسط سیستم عامل های مختلف روی یک سخت افزار واحد را فراهم می کند. با این ابزار، سیستم عامل های میهمان به هسته لینوکس (نسخه های ۲.۴ و ۲.۶) متصل می شوند و امکان یکپارچه سازی آن ها برای هسته سیستم عامل های NetBSD/FreeBSD نیز وجود دارد. نتیجتاً کاربران قادر خواهند بود با برنامه Xen چندین سیستم عامل میهمان را روی سیستم عامل های خانواده یونیکس بدون نیاز به تغییر و اصلاح کد و ساختار هسته سیستم عامل مادر راه اندازی نمایند. در این میان شرکت سان مایکروسیستمز نیز تلاش می کند Xen را برای سیستم عامل سولاریس سازگار نماید.
جالب است به این نکته اشاره شود که پروژه توسعه برنامه Xen از ابتدا منبع باز نبود و چندین سال یک پروژه اصطلاحاً کد بسته تلقی می شد در عوض پروژه های منبع بازی مانند Bochs IA-۳۲ Emulator و qemu در دنیای اپن سورس مطرح بودند که عمدتاً برنامه های شبیه سازی معماری های سخت افزاری بوده و ابداً از کارایی و قابلیت های مورد انتظار برخوردار نبوده اند. در حقیقت موفقیت پروژه Xen در مقایسه با دیگر پروژه های منبع باز، سازگاری و یکپارچه سازی با هسته سیستم عامل لینوکس و فراهم سازی بستری برای پشتیبانی سخت افزار سیستم های کامپیوتری مانند اینتل و ای ام دی است.
جهش دیگر Xen در آگوست ۲۰۰۵ بود که شرکت XenSource (شرکت رسمی پشتیبان و توسعه دهنده تجاری پروژهXen اقدام به انتشار Intel Developer Forum) IDF) نمود که امکان استفاده Xen روی سکوهای سخت افزاری مبتنی بر Intel TV را فراهم نمود و در پی آن امکان اجرای مجازی ویندوز اکس پی سرویس پک دو، در کنار لینوکس فراهم شد. در چنین شرایطی برنامه مجازی سازی تجاری VMWare که برای سرورهای ESX نیز توسعه داده می شود، همکاری جدیدی را با توسعه دهند گان Xen برای دسترسی به کدهای منبع VMware ESX Server و رابط کاربری آن آغاز کرد. مزیت برجسته برنامه VMWare در عدم یکپارچه سازی و اتصال سیستم عامل میهمان و ارائه راه کارهای اجرای سیستم عامل های میهمان روی ویندوز است.
در این زمان واقعه مهم دیگری نیز برای Xen روی داد و آن، پشتیبانی توزیع لینوکس Fedora Core۴، دبیان و SuSE Professional۹.۳ از این برنامه و اضافه شدن آن به توزیع لینوکس سرور RHEL۵ بود. پروژه فدورا حتی به ارائه بسته های نرم افزاری RPM برنامه Xen پرداخت. تمام این وقایع موجب شد برنامه Xen به عنوان گزینه اول برنامه مجازی سازی برای لینوکس و دنیای اپن سورس مطرح شود و شرکت های سخت افزاری مانند IBM و HP به سوی این محصول حرکت نمایند و دیگر توزیع ها و برنامه های اپن سورس Xen را در محصولات خود به کار بگیرند.
●روش مجازی سازی
تفاوت عمده Xen با دیگر برنامه های مجازی سازی و شبیه ساز در شیوه پیاده سازی ماشین های مجازی روی یک سیستم است. برنامه Xen از تکنیک Paravirtualization برای پیاده سازی سیستم عامل های میهمان بهره می گیرد.
Paravirtualization سیستم عامل و سخت افزار مادر را در یک سطح و ماشین های مجازی را در سطح های دیگر پیاده سازی می کند. مزیت این روش، عدم تداخل فرایندهای اجرایی سیستم عامل و امکان افزودن پروسه های جدید به هسته سیستم عامل بدون کامپایل هسته یا دستکاری آن است.
Xen از یک مدل چهار لایه ای برای سیستم های X۸۶، X۳۸۶ و X۶۴ استفاده می کند که به هر لایه یک ring گفته می شود. در ring۰ سیستم عامل مادر و خود برنامه Xen اجرا می شود. به برنامه Xen در این مدل اصطلاحاًHypervisor می گویند؛ چرا که باید در بالاترین سطح دسترسی برای کدهای سیستم عامل میهمان باشد.
ring۱ و ring۲ به سیستم عامل های میهمان اختصاص دارد و در ring۳ برنامه های کاربردی اجرا خواهند شد. در زمان شروع به کار، Xen به حافظه ring۰ مراجعه می نماید و ماشین مجازی پایه که Domain۰ خوانده می شود را در ring۱ اجرا می کند. از این Domain دیگر Domainها ساخته، حذف و جایگزین می شوند.
در حقیقت Xen توسط Domain۰ دیگر ماشین های مجازی و سخت افزار را مدیریت می کند. دایمون xend توسط Domain۰ اجرا می شود که مدیریت ماشین های مجازی را در هسته لینوکس بر عهده می گیرد و کاربر توسط ابزار خط فرمان xm آن را کنترل و مدیریت می کند. توسط این ابزار دیگر ماشین های مجازی نیز برپا می شوند.
درایورهای سخت افزاری نیز در Domain۰ اجرا می شوند. Xen به توابع و ماجول های سخت افزاری موجود در هسته سیستم عامل لینوکس تکیه می کند و خود را از طراحی و ساخت ماجول های سخت افزاری برای ماشین های مجازی فارغ می نماید. این موضوع یک مزیت برای این برنامه محسوب می شود. چون توسعه دهند گان Xen را از نوشتن ماجول های جدید برای درایورهای سخت افزاری بی نیاز می کند.
●دایمون Xend
دایمون Xend عهده دار ساخت Domain جدید و مدیریت آن ها، حذف یک ماشین مجازی موجود یا سوییچ میان چندین ماشین مجازی است. یکی از بزرگ ترین مسئولیت های این دایمون در هسته لینوکس راه اندازی و اجرای سرویس دهنده HTTP است. پورت پیش فرض برای این سرویس دهنده ۸۰۰۰ است که Xend از آن برای ارتباط باDomain ها شامل ارسال یک درخواست برای ساخت Domain، خذف یک Domain یا ذخیره و شروع به کار مجدد آن و سوییچ میان آن ها استفاده می کند.
بخش اعظم دایمون Xend توسط زبان اسکریپت نویسی پایتون نوشته شده است و در کنار آن برخی توابع زبان C نیز فراخوانی می شوند. از پوسته خط فرمان و اجرای فرمان xend start می توان دایمون Xend را برای بوت شدنXen فعال نمود. خود دایمون Xend یک سرویس دهنده با نام XCS را فعال می کند. هنگامی که xend را فعال می نماییم، باید بررسی شود که آیا XCS نیز اجرا شده است یا خیر. در صورت عدم اجرای آن، باید به صورت دستی اجرا شود. XCS در حقیقت هسته اصلی دایمون Xend را تشکیل می دهد و دو پورت TCP برای تبادل اطلاعات و کنترل پروسه های در حال اجرا باز می کند. تفاوت این دو پورت در همزمان سازی درخواست ها و هماهنگ سازی آن ها است.
●Xen در فدوراکور
برنامه Xen همراه با توزیع لینوکس فدوراکور ۴ و ۵ ارائه شده است. همچنین می توان بسته نرم افزاری نصب آن را از سایت این پروژه به نشانی http://www.xensource.com/xen/downloads دریافت نمود. برای نصب این برنامه یک ترمینال خط فرمان را باز کنید و دستورات زیر را به ترتیب اجرا نمایید:
yum update $
yum install xen$
yum install kernel-xen۰ $
yum install kernel-xenU$
از طریق ابزارهای گرافیکی توزیع فدوراکور نیز می توانید به نصب برنامه Xen اقدام کنید. برای این منظور از منوی اصلی وارد بخش System و سپس Software Management شوید و از مجموعه برنامه های فهرست شده Xen را انتخاب نمایید. پس از نصب، یک گزینه جدید به برنامه بوت لودر لینوکس افزوده می شود. برای مشاهده تغییرات انجام شده در برنامه بوت لودر، فایل grub.conf را باز نمایید. ملا حظه می کنید که خطوط زیر به این فایل افزوده شده اند:
title Xen ۳.۰ / XenLinux ۲.۶.۹
kernel /boot/xen.gz dom۰_ mem=۱۳۱۰۷۲
module /boot/vmlinuz-۲.۶.۹-xen۰
root= /dev/hda ۱ ro console=tty۰
اکنون کامپیوتر را Restart نمایید. همان طور که می بینید یک گزینه انتخابی جدید به منوی برنامه گراب اضافه شده است. با استفاده از این گزینه سیستم را بوت کنید. زمانی که لینوکس کاملاً اجرا شد، باید دایمون Xend نیز در پس زمینه لینوکس فعال شده باشد. دستور xm list را اجرا نمایید تا آرگومان های این ابزار مدیریت دایمون xen را مشاهده نمایید. خروجی این دستور باید مشابه با خطوط زیر باشد:
HOSTA:/etc/xen/scripts#xm list
Name Id Mem(MB) CPU State Time(s) Console
Domain-۰ ۰ ۱۲۳ ۰ r---- ۴۱.۲
●برپاسازی ماشین مجازی
اکنون زمان ساخت یک ماشین مجازی فرارسیده است. برای برپاسازی ماشین مجازی چندین راهکار وجود دارد: استفاده از فایل های chroot image توزیع های مختلف که از اینترنت قابل دریافت هستند یا ساختن آن ها توسط خودتان. فایل های chroot یک فایل Image از سیستم عامل میهمان هستند که توسط برنامه Xen گشوده می شوند.
همچنین برنامه Xen می تواند از فایل های پشتیبان بلوک های سخت افزاری(dd ۱f=dev/zero of=vmdisk bs=۱k seek ۲۰۴۸k count=۱)، تجهیزات سخت افزاری فیزیکی (برای مثال dev/hda۹/) و (phy:VolumeGroup/root_volume LVM ) استفاده نماید. حتی امکان به کارگیری فرمت فایلی شبکه NFS برای برپاسازی یک ماشین مجازی وجود دارد.
انتخاب روش راه اندازی ماشین مجازی وابستگی زیادی به نوع کارکرد ماشین مجازی مورد نظرتان و امکانات موجود دارد. اما یکی از ساده ترین روش ها، استفاده از فناوری های LVM است. Logical Volume Manager یک فناوری برای ساخت ماشین های مجازی روی لایه های فیزیکی دیسک سخت و کار با پارتیشن های سیستم است. با LVM می توان بدون اضافه کردن فضای فیزیکی روی سیستم از مقدار حافظه بیشتری استفاده کرد. LVM همچنین قابلیت تغییر اندازه پارتیشن را بدون نیاز به پارتیشن بندی مجدد فراهم می کند. دلیل انتخاب این روش، انعطاف پذیری و سادگی آن است. در ادامه با یک مثال ساده چگونگی انجام دادن کار را مرور می کنیم. فرض کنید روی سیستم شما یک درایو dev/sda۵/ وجود دارد. با استفاده از LVM می خواهیم یک ماشین مجازی روی sda۵ برای استفاده در آینده ایجاد نماییم:
pvcreate /dev/sda۵ $
vgcreate vm_volumes /dev/sda۵ $
vgchange -a y vm_volumes$
lvcreate -L۴۰۹۶ -nroot.dokeos vm_volumes$
lvcreate -L۲۰۸۴ -nvar.dokeos vm_volumes$
nswap.dokeos vmًvolumes $ lvcreate L۲۵۶ -
lvcreate -L۱۰۲۴ -nwww.dokeos vm_volumes$
همان طور که می بینید با دستور lvcreate پارتیشن های مجازی همراه با اندازه هر کدام از آن ها روی sda۵ تعریف شده است. اکنون وارد دایرکتوری ای شوید که پارتیشن های خود را به سیستم فایل لینوکس متصل (mount) نموده اید (برای مثال mnt/) و دایرکتوری vhosts/ را ایجاد نمایید. در ادامه از این دایرکتوری برای نصب فایل image توزیع فدوراکور استفاده می نماییم:
yum --instal lroot=/vhosts/root.dokeos/$
y groupinstall Base-
MAKEDEV-d /path/dev -x console $
MAKEDEV -d /path/dev -x null$
MAKEDEV -d /path/dev -x zer$
فایل پیکربندی برنامه Xen غالباً در دایرکتوری /etc/xen قرار دارد. برای ساخت هر ماشین مجازی لازم است این فایل از نو پیکربندی و تنظیم شود. نهایتاً باید فایل پیکربندی مشابه زیر باشد:
root@xen xen] #cat dokeos.x-tend.be ]
"kernel = "/boot/vmlinu-۲.۶.۱۱-۱.۱۳۶۶-fc۴xenU
memory = ۱۲۸
"name = "dokeos.x-tend.be
nics = ۱
"extra = "selinux=۰ ۳
[vif=[ip="۱۰.۱۰.۱۱.۱۳"ipbridge=xen-br
disk =[phy:vm_volumes/root.dokeos,sda۱,w
phy:vm_volumes/var.dokeos,sda۳,w
phy:vm_volumes/www.dokeos,sda۴,w
phy:vm_volumes/swap.dokeos,sda۲,w
"root = "/dev/sda۱ ro
اکنون همه چیز برای اجرای ماشین مجازی مهیا است. برای این منظور دستور xm create config file را در ترمینال خط فرمان اجرا کنید. اگر آرگومان c- را نیز به این دستور بیفزایید، مراحل بوت شدن ماشین مجازی نیز در خروجی پوسته خط فرمان نمایش داده می شود.
●آینده پیش روی Xen
مجازی سازی در چندین سال اخیر اهمیت بیشتری پیدا کرده است؛ چرا که کاربران کامیپوتر به سکوی تک سیستم عاملی قانع نیستند. انقلاب مجازی سازی دارد به سمت و سویی حرکت می کند که از یک سخت افزار بیشترین استفاده صورت گیرد و چندین سیستم روی یک سخت افزار پیاده سازی شوند. برنامه Xen کاندیدای عینیت بخشیدن به این اهداف در سکوی سیستم عامل و نرم افزارهای اپن سورس است و آزاد بودن پروژه توسعه آن، موجب شده است شرکت های کوچک و بزرگی در آن شرکت نمایند و به پیشرفت آن سرعت بیشتری بدهند.
نسخه سوم این برنامه سروصدای زیادی برپا کرد و در کنفرانس LinuxWorld بوستون یکی از محوری ترین موضوعات کنفرانس بود. فکر می کنم اگر این برنامه مجازی سازی بتواند همچنان به پیشرفت و بهبود خود ادامه بدهد و همکاری های گسترده تری را با بزرگان صنعت مجازی سازی و سخت افزار آغاز کند، در آینده ای نزدیک فناوری مطرحی در دنیای مجازی سازی باشد.