درباره bhyve
bhyve یک hypervisor مجانی برای FreeBSD و مشتقات آن نظیر PC-BSD و nanoBSD است
bhyve چیست؟
bhyve یا BSD Hypervisor یک hypervisor (مدیر ماشینهای مجازی) رایگان است که به صورت فعال برای سیستم عامل FreeBSD و استفاده از ویژگیهای cpu های امروزی نظیر EPT (Extended Page Table) توسعه می یابد.
bhyve روی چه سخت افزاری اجرا میشود؟
bhyve در حال حاضر از پردازنده های Intel همراه با EPT پشتیبانی می کند و پشتیبانی از پردازنده های AMD نیز در حال گذراندن مراحل تست است.
bhyve چگونه کار می کند؟
در اینجا با یک تصویر مروری بر چگونگی کارکرد bhyve می کنیم:
چه نسخه هایی از FreeBSD از bhyve پشتیبانی می کنند؟
bhyve می تواند بر روی FreeBSD9.0 ساخته و اجرا شود اما محل توسعه فعال آن ۱۰-CURRENT می باشد.البته در نظر داشته باشید که اجرای اساسیاش بروی سری ۹ و ۸ سیستم عامل FreeBSD امکانپذیر است.
bhyve از چه سییستم عامل هایی به عنوان guest پشتیبانی میکند؟
به عنوان یک hypervisor رایگان bhyve در حال حاضر می تواند سیستم عامل FreeBSD به عنوان guest روی host خود boot کند.
bhyve از چه نرمافزار هایی تشکیل شده است؟
bhyve از یک ماژول قابل بارگذاری در کرنل با نام vmm.ko و کتابخانههای libvmmapi و ابزارهای کنترلی bhyveload و bhyvectl که حجم آنها در حدود ۲۵۰K است تشکیل شده است.
نصب bhyve
برای اینکه bhyve را در سیسیتم های قدیمی نصب کنید باید کرنل را مجدد کامپایل کنید. اما در اکثر سیستمهای امروزی ماژول های مربوطه به صورت پیش فرض وجود دارند اما بارگذاری نشدهاند. برای این کار شما ابتدا فایل /boot/loader.conf را ویرایش کرده و خطوط زیر را به آن اضافه می کنیم
vmm_load="YES" if_tap_load="YES" bridgestp_load="YES" if_bridge_load="YES" bridgestp_load="YES"
آماده سازی هارد دیسک مجازی
بعد از این کار باید یک فایل برای استفاده به عنوان hard disk در ماشین مجازی بسازیم . برای این منظور دستور زیر را اجرا می کنیم
truncate -s 80G disk.img
بعد از ساخته شدن فایل باید آن را به عنوان یک md disk در بیاوریم
mdconfig disk.img
و بعد باید آن را آماده کنیم تا بتوانیم آن را در slice ها به کار ببریم
fdisk -BI md0
******* Working on device /dev/md0 ******* fdisk: invalid fdisk partition table found
بعد از اتمام این مرحله md disk را باید به عنوان یک استاندارد لیبل و بوت کد در slice1 سیستم بنویسیم.
bsdlabel -wB /dev/md0s1
و بعد باید یک فایل سیستم در slice 1a بسازیم
newfs -U /dev/md0s1a
بعد از ساختن فایل سیستم آن را در مسیر /mnt مانت می کنیم
mount /dev/md0s1a /mnt
مرحله ساختن هارد دیسک مجازی و ساخت سیستم فایل در اینجا به پایان می رسد و باید سیستم عامل جدیدمان را بر روی فایل سیستم بسازیم و نصب کنیم.
کامپایل و نصب سیستم عامل مجازی
برای این کار به مسیر /usr/src میرویم و دستورات زیر را اجرا می کنیم
make installworld DESTDIR=/mnt make installkernel DESTDIR=/mnt make distribution DESTDIR=/mnt
بعد از اتمام کار کامپایل و نصب سیستم عامل مجازی ما باید fstab ماشین خود را با استفاده از /dev/vtbd0s1a ویرایش کنیم.
echo "/dev/vtbd0s1a / ufs rw 1 1" > /mnt/etc/fstab
سپس باید کنسول سیستم عامل مجازی خود را تنظیم کنیم
echo 'console "/usr/libexec/getty std.9600" vt100 on secure' > /mnt/etc/ttys echo 'console="userboot"' > /mnt/boot/loader.conf
در آخرین قسمت این مرحله باید به کرنل ماشین مجازیمان کمک کنیم تا متوجه شود بر روی ماشین مجازی در حال اجراست. برای این منظور فایل /mnt/etc/sysctl.conf را ویرایش می کنیم و مقادیر زیر را به آن اضافه می کنیم
smbios.bios.vendor="Bochs" Avoid clock drift kern.timecounter.hardware="TSC" kern.timecounter.invariant_tsc="1" PCI pass-through support as it caused hangs hw.pci.enable_msix="0" hw.pci.honor_msi_blacklist="0"
خوب مرحله نصب سیستم عامل هم به پایان رسید .
ابتدا فایل سیستمهایی که mount کرده بودیم را unmount می کنیم
umount /mnt
و بعد md disk را به اصطلاحی detach می کنیم
mdconfig -d -u 0
mdconfig -l
تنظیمات کارت شبکه برای استفاده ماشین مجازی
ابتدا ماژول هایی که در ابتدا معرفی کردیم را بارگذاری می کنیم
kldload vmm kldload if_tap kldload bridgestp kldload if_bridge
برای اینکه شبکه ماشینهای مجازیمان بدون مشکل کار کند باید یک اینترفیس tap و bridge برای ارتباط با اینترفیس ماشین مجازیمان بسازیم.برای این منظور دستورات زیر را اجرا می کنیم
ifconfig tap0 create up ifconfig bridge0 create up ifconfig bridge0 addm tap0 addm re0 up
ifconfig tap0 destroy ifconfig bridge0
مرحله آماده سازی شبکه ماشین مجازی نیز به پایان رسید. حال باید ماشین را start کنیم.
Start کردن ماشین مجازی
برای شروع به کار کردن ماشین مجازی از دستور زیر استفاده می کنیم
sudo bhyveload -d /path/to/disk.img -m 256 vmname && sudo bhyve -c 1 -a -A -m 256 -I -H -g 0 -s 0:0,hostbridge -s 2:0,virtio-blk,/path/to/disk.img -s 1:0,virtio-net,tap0 -S 31,uart,stdio vmname
برای خاموش کردن ماشین مجازی از دستور زیر استفاده می کنیم
bhyvectl --vm=vmname –destroy