#mv /etc/grub.d/20_linux_xen /etc/grub.d/09_linux_xen#update-grub
xen-create-image میباشد که تقریبا این فرآیند را خودکارسازی میکند. تنها پارامتر ضروری آن --hostname است که نام domU را مشخص میکند؛ سایر گزینهها نیز مهم هستند ولی میتوانند درون فایل پیکربندی /etc/xen-tools/xen-tools.conf قرار بگیرند که نبود آنها خطایی را در هنگام اجرای دستور صادر نمیکند. بنابراین مهم است که محتوای این فایل را قبل از ایجاد هر image بررسی کرده یا از پارامترهای اضافی هنگام فراخوانی xen-create-image استفاده کنیم. پارامترهای مهم قابل ذکر عبارتند از:
--memory، برای مشخص کردن میزان RAM اختصاص یافته به سیستم جدید؛
--size و --swap، برای تعریف اندازه "دیسکهای مجازی" موجود برای domU؛
--debootstrap، برای نصب شدن سیستم جدید با استفاده از debootstrap؛ در این مورد، از گزینه --dist اغلب استفاده میشود (همراه با نام یک توزیع مانند jessie).
--dhcp بیان میکند که پیکربندی شبکه domU باید از طریق DHCP انجام شود در صورتی که --ip امکان استفاده از نشانی ایستای IP را فراهم میکند.
--dir، ایجاد یک فایل در dom0 به ازای هر دستگاه domU فراهمکننده آن است. برای سیستمهایی که از LVM استفاده میکنند، گزینه جایگزین استفاده از --lvm است، که همراه با نام یک گروه آرایه آورده میشود؛ سپس xen-create-image اقدام به ایجاد یک گروه منطقی درون آرایهها میکند که این گروه منطقی به عنوان یک درایو هارد دیسک به domU معرفی میگردد.
#xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=2G --dist=jessie --role=udev[...] General Information -------------------- Hostname : testxen Distribution : jessie Mirror : http://ftp.debian.org/debian/ Partitions : swap 128Mb (swap) / 2G (ext3) Image type : sparse Memory size : 128Mb Kernel path : /boot/vmlinuz-3.16.0-4-amd64 Initrd path : /boot/initrd.img-3.16.0-4-amd64 [...] Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : jessie MAC Address : 00:16:3E:8E:67:5C IP-Address(es) : dynamic RSA Fingerprint : 0a:6e:71:98:95:46:64:ec:80:37:63:18:73:04:dd:2b Root Password : adaX2jyRHNuWm8BDJS7PcEJ
vif*، veth*، peth* و xenbr0. hypervisor موجود در Xen با توجه به لایه تعریف شده آنها را مرتبسازی میکند که این کار با استفاده از ابزارهای سمت-کاربر صورت میگیرد. از آنجا که مدلهای NAT و routing تنها برای موارد خاص کاربرد دارند، تنها به بررسی مدل bridge میپردازیم.
xend طوری پیکربندی شده است تا رابطهای مجازی شبکه را با هر شبکه bridge از پیش موجود یکپارچه سازد (در صورت وجود چندین bridge گزینه xenbr0 اولویت مییابد). برای اینکار نیازمند برپایی یک bridge در /etc/network/interfaces هستیم تا مدخل موجود eth0 جایگزین گردد (که نیازمند نصب بسته bridge-utils میباشد، به همین دلیل است که بسته xen-utils-4.4 توصیه میشود):
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
xl، آغاز کنیم. این دستور امکان چندین تغییر روی دامنهها را همراه با فهرستسازی آنها و آغاز/پایان هر کدام فراهم میآورد.
#xl listName ID Mem VCPUs State Time(s) Domain-0 0 463 1 r----- 9.8 #xl create /etc/xen/testxen.cfgParsing config from /etc/xen/testxen.cfg #xl listName ID Mem VCPUs State Time(s) Domain-0 0 366 1 r----- 11.4 testxen 1 128 1 -b---- 1.1
hvc0 همراه با دستور xl console است:
#xl console testxen[...] Debian GNU/Linux 8 testxen hvc0 testxen login:
xl pause و xl unpause میتواند به صورت موقت متوقف شده یا ادامه یابد. به یاد داشته باشید که یک domU متوقف شده با اینکه از قدرت پردازنده استفاده نمیکند، اما هم اکنون حافظه اختصاص یافته به خود را دارد. استفاده از دستورات xl save و xl restore نیز قابل توجه است: ذخیرهسازی یک domU تمام منابع اختصاص یافته به آن، از جمله RAM، را آزادسازی میکند. در زمان بازگرداندن (یا ادامه، به این منظور) یک domU چیزی به جز گذشت زمان را احساس نمیکند. اگر هنگام خاموش کردن dom0 یک domU در حال اجرا باشد، اسکریپتهای پیکربندی به صورت خودکار domU را ذخیرهسازی کرده تا در راهاندازی بعدی از سر گرفته شود. این عمل البته ناملایمتهای عملیات hibernate کردن یک رایانه لپتاپ را به همراه دارد، برای نمونه؛ به طور مشخص اگر domU به مدت زمان طولانی در حالت تعلیق باشد، ارتباطات شبکه ممکن است منقضی گردند. به یاد داشته باشید که Xen به شدت ناسازگار با بخش مدیریت قدرت ACPI است، که عملیات متوقفسازی سیستم میزبان (dom0) را انجام میدهد.
shutdown) یا از طریق dom0 با استفاده از xl shutdown یا xl reboot انجام شود.
init با یکدیگر ترکیب شده که نتیجه نهایی آن مشابه با ماشین مجازی است. نام رسمی چنین تنظیمی “مخزن” است (با توجه به نام LXC که برابر است با: LinuX Containers) اما تفاوت عمده آن با ماشینهای مجازی “واقعی” مانند Xen یا KVM در نبود یک کرنل دوم است؛ مخزن از همان کرنل سیستم میزبان استفاده میکند. اینکار مزایا و معایب خود را دارد: مزایای آن شامل عملکرد فوقالعاده به دلیل نبود overhead و این حقیقت که کرنل یک دید سراسری نسبت به تمام فرآیندهای اجرایی روی سیستم دارد، به این منظور که عملیات زمانبندی میتواند به شیوهای موثرتر انجام شود نسبت به حالتی که دو کرنل جداگانه باید مجموعههای مختلف از وظایف را مدیریت میکردند. از میان معایت نیز میتوان به غیرممکن بودن اجرای یک کرنل مختلف درون یک مخزن اشاره کرد (خواه یک نسخه متفاوت لینوکس خواه یک سیستم عامل دیگر).
/sys/fs/cgroup متصل میشود. از آنجا که دبیان ۸ به systemd روی آورده، که خود مبتنی بر گروههای کنترل است، اینکار در زمان راهاندازی سیستم بدون هیچ پیکربندی خاص صورت میگیرد.
/etc/network/interfaces، انتقال پیکربندی برای رابط فیزیکی (برای نمونه eth0) به رابط bridge (معمولا br0) و پیکربندی پیوند بین آنها است. برای نمونه، اگر فایل پیکربندی رابط شبکه شامل مدخلهای زیر باشد:
auto eth0 iface eth0 inet dhcp
#auto eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge-ports eth0
eth0 همراه با رابطهای تعریف شده برای مخازن میباشد.
/etc/network/interfaces سپس به صورت زیر در میآید:
# Interface eth0 is unchanged auto eth0 iface eth0 inet dhcp # Virtual interface auto tap0 iface tap0 inet manual vde2-switch -t tap0 # Bridge for containers auto br0 iface br0 inet static bridge-ports tap0 address 10.0.0.1 netmask 255.255.255.0
br0 پاسخ دهد.
root@mirwiz:~#lxc-create -n testlxc -t debiandebootstrap is /usr/sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-jessie-amd64 ... Downloading debian minimal ... I: Retrieving Release I: Retrieving Release.gpg [...] Download complete. Copying rootfs to /var/lib/lxc/testlxc/rootfs... [...] Root password is 'sSiKhMzI', please change ! root@mirwiz:~#
/var/cache/lxc ایجاد شد، سپس به مقصد خود انتقال یافت. اینکار امکان ایجاد مخازن مشابه را با سرعت بیشتری فراهم میکند، چرا که تنها عملیات رونوشتگیری مورد نیاز است.
--arch به منظور تعیین معماری سیستم و یک گزینه --release به منظور نصب نسخهای بجز نسخه انتشار اصلی از دبیان را قبول میکند. همچنین میتوانید با استفاده از متغیر محیطی MIRROR از یک mirror مخصوص به دبیان استفاده کنید.
/var/lib/lxc/testlxc/config) پرداخته و چندین مدخل lxc.network.* را در آن ایجاد میکنیم:
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 4a:49:43:49:79:20
br0 متصل میشوند؛ که نشانی MAC آن مطابق بالا خواهد بود. در صورت فقدان یا غیرفعال بودن این گزینه آخر، از یک نشانی MAC تصادفی استفاده خواهد شد.
lxc.utsname = testlxc
root@mirwiz:~#lxc-start --daemon --name=testlxcroot@mirwiz:~#lxc-console -n testlxcDebian GNU/Linux 8 testlxc tty1 testlxc login:rootPassword: Linux testlxc 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@testlxc:~#ps auxwfUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 28164 4432 ? Ss 17:33 0:00 /sbin/init root 20 0.0 0.1 32960 3160 ? Ss 17:33 0:00 /lib/systemd/systemd-journald root 82 0.0 0.3 55164 5456 ? Ss 17:34 0:00 /usr/sbin/sshd -D root 87 0.0 0.1 12656 1924 tty2 Ss+ 17:34 0:00 /sbin/agetty --noclear tty2 linux root 88 0.0 0.1 12656 1764 tty3 Ss+ 17:34 0:00 /sbin/agetty --noclear tty3 linux root 89 0.0 0.1 12656 1908 tty4 Ss+ 17:34 0:00 /sbin/agetty --noclear tty4 linux root 90 0.0 0.1 63300 2944 tty1 Ss 17:34 0:00 /bin/login -- root 117 0.0 0.2 21828 3668 tty1 S 17:35 0:00 \_ -bash root 268 0.0 0.1 19088 2572 tty1 R+ 17:39 0:00 \_ ps auxfw root 91 0.0 0.1 14228 2356 console Ss+ 17:34 0:00 /sbin/agetty --noclear --keep-baud console 115200 38400 9600 vt102 root 197 0.0 0.4 25384 7640 ? Ss 17:38 0:00 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.e root 266 0.0 0.1 12656 1840 ? Ss 17:39 0:00 /sbin/agetty --noclear tty5 linux root 267 0.0 0.1 12656 1928 ? Ss 17:39 0:00 /sbin/agetty --noclear tty6 linux root@testlxc:~#
/var/lib/lxc/testlxc/rootfs را شامل میشود. با استفاده از کلید ترکیبی Control+a q میتوانیم از کنسول خارج شویم.
--daemon از lxc-start. با استفاده از دستور lxc-stop --name=testlxc میتوانیم مخزن را متوقف کنیم.
lxc-autostart است که به صورت خودکار مخازن شامل گزینه lxc.start.auto برابر ۱ را راهاندازی میکند). با استفاده از lxc.start.order و lxc.group میتوان کنترل بیشتری روی ترتیب اجرای مخازن اعمال کرد: به صورت پیشفرض، اسکریپت راهاندازی ابتدا مخازنی را آغاز میکند که جزو گروه onboot باشند سپس به سراغ مخازن دیگر میرود). در هر دو مورد، ترتیب درون هر گروه توسط گزینه lxc.start.order مشخص میشود.
qemu-* را مشاهده کنید: تمام آنها مرتبط با KVM هستند.
/proc/cpuinfo بگردید.
virtual-manager یک رابط گرافیکی است که با استفاده از libvirt ماشینهای مجازی را مدیریت میکند.
apt-get install qemu-kvm libvirt-bin virtinst virt-manager virt-viewer بستههای مورد نیاز را نصب میکنیم. libvirt-bin فرآیند پسزمینه libvirtd را فراهم میکند، که امکان مدیریت (معمولا راه دور) ماشینهای مجازی اجرای در سیستم میزبان را فراهم کرده و ماشینهای مجازی مورد نیاز را در زمان راهاندازی میزبان آغاز میکند. علاوه بر این، این بسته ابزار خط-فرمان virsh را فراهم میکند که امکان کنترل ماشینهای libvirtd را بوجود میآورد.
virt-install میشود که امکان ایجاد ماشینهای مجازی از خط فرمان را فراهم میکند. در نهایت، virt-viewer اجازه دسترسی به کنسول گرافیکی یک ماشین مجازی را بوجود میآورد.
eth0 و bridge br0 است ادامه مییابد، به طوری که اولی به دومی متصل شده است.
/var/lib/libvirt/images/ مناسب باشد.
root@mirwiz:~#mkdir /srv/kvmroot@mirwiz:~#virsh pool-create-as srv-kvm dir --target /srv/kvmPool srv-kvm created root@mirwiz:~#
virt-install بیندازیم. این دستور، ماشین مجازی و پارامترهای آن را در libvirtd ثبت میکند سپس به اجرای آن پرداخته تا فرآیند نصب ادامه یابد.
#virt-install --connect qemu:///system--virt-type kvm
--name testkvm
--ram 1024
--disk /srv/kvm/testkvm.qcow,format=qcow2,size=10
--cdrom /srv/isos/debian-8.1.0-amd64-netinst.iso
--network bridge=br0
--vnc
--os-type linux
--os-variant debianwheezy
Starting install... Allocating 'testkvm.qcow' | 10 GB 00:00 Creating domain... | 0 B 00:00 Guest installation complete... restarting guest.
گزینه --connect مشخص میکند از کدام “hypervisor” استفاده شود. فرم استفاده از آن شامل یک URL همراه با سیستم مجازیسازی مرتبط (xen://، qemu://، lxc://، openvz://، vbox://) و ماشینی که باید از آن میزبانی کند میباشد (در صورت استفاده از localhost میتواند خالی باشد). علاوه بر این و در مورد QEMU/KVM، هر کاربر میتواند با استفاده از مجوزهای محدودشده ماشینهای مجازی را مدیریت کند و مسیر URL امکان تفاوت قائل شدن بین ماشینهای “سیستم” (/system) را از دیگر (/session) فراهم میکند.
| |
از آنجا که KVM به شیوه مشابه QEMU مدیریت میشود، --virt-type kvm امکان مشخص کردن استفاده از KVM با وجود تشابه با URL QEMU را فراهم میکند.
| |
گزینه --name یک نام (منحصربفرد) برای ماشین مجازی تعریف میکند.
| |
گزینه --ram میزان RAM (به مگابایت) اختصاص یافته به ماشین مجازی را تعریف میکند.
| |
گزینه --disk مکان فایل تصویری که قرار است هارد دیسک ماشین مجازی در آن قرار گیرد را تعریف میکند؛ این فایل با استفاده از پارامتر size (به گیگابایت) در صورت موجود نبودن، ایجاد میگردد. پارامتر format امکان ذخیرهسازی فایل تصویر را در قالبهای گوناگون بوجود میآورد. قالب پیشفرض (raw) یک فایل تکی است که با محتوا و اندازه دیسک سازگاری داشته باشد. در اینجا از یک قالب پیشرفتهتر استفاده کردهایم، که مختص به QEMU میباشد و امکان شروع با یک فایل کوچک را میدهد که به مرور زمان و نیاز ماشین مجازی به فضای بیشتر، بزرگتر میشود.
| |
گزینه --cdrom به منظور یافتن دیسک نوری برای فرآیند نصب استفاده میشود. مسیر میتواند شامل یک مسیر محلی برای فایل ISO، یک URL که فایل میتواند از آنجا دریافت شود یا فایل دستگاه مربوط به یک درایو فیزیکی CD-ROM باشد (/dev/cdrom).
| |
گزینه --network مشخص میکند کارت مجازی شبکه چطور با پیکربندی سیستم میزبان ادغام شود. عملکرد پیشفرض آن (که در این نمونه به صورت صریح بیان کردهایم) ادغام آن با شبکه bridge از قبل موجود در سیستم است. اگر چنین bridge موجود نباشد، ماشین مجازی تنها با استفاده از NAT میتواند به شبکه فیزیکی دسترسی یابد، بنابراین یک نشانی در محدوده زیرشبکه 192.168.122.0/24 دریافت میکند.
| |
گزینه --vnc بیان میکند که کنسول گرافیکی باید توسط VNC قابل ارائه باشد. عملکرد پیشفرض سرور VNC این است که تنها به رابط local گوش دهد؛ اگر برنامه VNC در یک میزبان دیگر قرار داشته باشد، برقراری ارتباط نیازمند برپایی تونل SSH میباشد (
قسمت 9.2.1.3, “ایجاد تونلهای رمزگذاری شده با پورت فورواردینگ”
را مشاهده کنید). به همین ترتیب، از --vnclisten=0.0.0.0 میتوان برای دسترسی به سرور VNC از طریق تمام رابطهای شبکه استفاده کرد؛ به یاد داشته باشید که در این صورت باید از یک طراحی firewall بهرهمند شوید.
| |
گزینههای --os-type و --os-variant، با توجه به برخی از ویژگهای سیستم عامل اشاره شده، امکان بهینهسازی چندین پارامتر ماشین مجازی را فراهم میکنند.
|
virt-viewer با استفاده از هر محیط گرافیکی برای باز کردن کنسول گرافیکی میتواند اجرا شود (به یاد داشته باشید که دو مرتبه گذرواژه root درخواست میشود چرا که ۲ ارتباط SSH مورد نیاز است):
$virt-viewer --connect qemu+ssh://root@server/system testkvmroot@server's password: root@server's password:
libvirtd برای فهرستی از ماشینهای مجازی موجود است:
#virsh -c qemu:///system list --all Id Name State ---------------------------------- - testkvm shut off
#virsh -c qemu:///system start testkvmDomain testkvm started
vncviewer استفاده شود):
#virsh -c qemu:///system vncdisplay testkvm:0
virsh عبارتند از:
reboot برای راهاندازی مجدد یک ماشین مجازی؛
shutdown برای درخواست یک shutdown تمیز؛
destroy برای توقف خشن آن؛
suspend برای توقف عادی آن؛
resume برای ادامه فعالیت آن؛
autostart برای فعال کردن (یا غیر فعال کردن با گزینه --disable) راهاندازی ماشین مجازی به صورت خودکار در زمان راهاندازی میزبان؛
undefine برای حذف تمام نشانههای ماشین مجازی از libvirtd.
debootstrap همانطور که توضیح داده شد راهاندازی شود. اما اگر قرار باشد ماشین مجازی به منظور اجرای یک سیستم مبتنی بر RPM (مانند Fedora، CentOS یا Scientific Linux) راهاندازی گردد، اینکار باید با استفاده از ابزار yum صورت گیرد (که در بستهای با همین نام قرار دارد).
rpm به منظور استخراج مجموعهای از فایلها، شامل فایلهای پیکربندی yum، سپس فراخوانی yum برای استخراج سایر بستههای باقیمانده میباشد. اما از آنجا که فراخوانی yum خارج از chroot صورت میگیرد، باید برخی تغییرات موقتی را ایجاد کنیم. در نمونه زیر، chroot هدف عبارت است از /srv/centos.
#rootdir="/srv/centos"#mkdir -p "$rootdir" /etc/rpm#echo "%_dbpath /var/lib/rpm" > /etc/rpm/macros.dbpath#wget http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-release-7-1.1503.el7.centos.2.8.x86_64.rpm#rpm --nodeps --root "$rootdir" -i centos-release-7-1.1503.el7.centos.2.8.x86_64.rpmrpm: RPM should not be used directly install RPM packages, use Alien instead! rpm: However assuming you know what you are doing... warning: centos-release-7-1.1503.el7.centos.2.8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY #sed -i -e "s,gpgkey=file:///etc/,gpgkey=file://${rootdir}/etc/,g" $rootdir/etc/yum.repos.d/*.repo#yum --assumeyes --installroot $rootdir groupinstall core[...] #sed -i -e "s,gpgkey=file://${rootdir}/etc/,gpgkey=file:///etc/,g" $rootdir/etc/yum.repos.d/*.repo