این مطلب در دو بخش نوشته شده است. بخش دوم در اینجا
libguestfs شامل کتابخانهها، ابزارها و API هایی برای دسترسی و ایجاد تغییرات در دیسکهای ماشین مجازی است. این ابزار اپنسورس و آزاد بوده و با مجوز الجیپیال و جیپیال منتشر میشود. با استفاده از این ابزار میتوانید:
- به فایلها و دایرکتوریهای داخل ماشین مجازی دسترسی داشته باشید (حذف و ایجاد و تغییر).
- سیستم عامل یک سرور فیزیکی را به ماشین مجازی تبدیل کنید (p2v).
- ماشینهای مجازی متفاوت را به هم تبدیل کنید. (v2v) به عنوان مثال ماشین مجازی vmware را به xen و یا kvm تبدیل کنید.
- کلون کردن ماشینهای مجازی
- و …
جالب است بدانید پروژههای بزرگی مانند اپناستک، virt-tools از این ابزار در پروژههایشان استفاده کردهاند.
نصب: در سیستمعامل سنتاواس و یا ردهت و فدورا با دستور زیر تمام بستهها را نصب میکنیم.
#yum install '*guestf*'
لیست بستهها:
نکته: در مثالهای زیر نیاز است نام دامنه ماشین مجازی را بدانیم. برای به دست آوردن نام ماشین مجازی از دستور virsh استفاده میکنیم. این دستور ماشینهای مجازی سیستم را به همراه نام و وضعیت لیست میکند.
#virsh list --all Id Name State ---------------------------------------------------- - other shut off - test shut off
virt-inspector: این ابزار نسخه سیستمعامل ماشین مجازی و اطلاعات دیگری در مورد ماشین مجازی را نشان میدهد.
سادهترین حالت استفاده از این دستور استفاده از پارامتر -d به همراه نام دامنه و یا -a به همراه آدرس پارتیشن یا ایمیج است.
#virt-inspector -d domname #virt-inspector -a disk.img
خروجی دستور نام و مشخصات سیستم عامل نصب شده، لیست بستههای نصب شده، آیکون سیستم عامل و … و با ساختار XML است. در زیر چند خط اول از خروجی برنامه را میبینید.
#sudo virt-inspector -d vm12 <?xml version="1.0"?> <operatingsystems> <operatingsystem> <root>/dev/sda1</root> <name>linux</name> <arch>i386</arch> <distro>debian</distro> <product_name>6.0.3</product_name> <major_version>6</major_version> <minor_version>0</minor_version> <package_format>deb</package_format> <package_management>apt</package_management> <hostname>debian</hostname> <format>installed</format> <mountpoints> <mountpoint dev="/dev/sda1">/</mountpoint> <mountpoint dev="/dev/sda8">/tmp</mountpoint> <mountpoint dev="/dev/sda5">/usr</mountpoint> <mountpoint dev="/dev/sda6">/var</mountpoint> <mountpoint dev="/dev/sda9">/home</mountpoint> </mountpoints>
virt-ls: فایلها و دایرکتوریهای داخل ایمیج ماشین مجازی را به همراه اطلاعات اضافه دیگر نمایش میدهد. این دستور به شکل زیر استفاده میشود. نام دامنه به همراه آپشن -d و یا مسیر ایمیج به همراه آپشن -a و در انتها مسیر دایرکتوری که میخواهیم اطلاعاتش نمایش داده شود. در صورت استفاده از آپشن -R همه پوشهها و فایلها بصورت تو در تو نمایش داده خواهد شد.
#virt-ls [OPTION] -d domname directory #virt-ls [OPTION] -a vm.img directory
خروجی برنامه در ماشین مجازی نمونه:
#virt-ls -R -a /mnt1/debian/vm /root /.aptitude /.aptitude/config /.bashrc /.profile
virt-format: یک پارتیشن مجازی را فرمت میکند. و در پارتیشن جدید جدول پارتیشن جدید و فایل سیستم ایجاد میکند.
#virt-format [--option] -a vm.img
به عنوان مثال با دستور زیر پارتیشن lvm12 با فایل سیستم ext3 فرمت میکنیم.
#virt-format --filesystem=ext3 -a /dev/VG/lvm12
virt-make-fs: با استفاده از یک فایل tar و یا مجموعهای از فایلها یک پارتیشن با محتویات میسازد. input میتواند یک فایل tar و یا یک فایل tar فشرده و یا یک دایرکتوری باشد. با استفاده از پارامتر –type میتوان فایل سیستم پارتیشن را مشخص کنیم. با استفاده از پارامتر –size میتوان اندازه پارتیشن را مشخص کرد.
#virt-make-fs [OPTION] input output.img
مثالی از ایجاد پارتیشن با فایل سیستم ext3 از دایرکتوری خانگی کاربر:
#virt-make-fs --size=+1G --type=ext3 /home/mahdi/ vm.img Formatting 'vm.img', fmt=raw size=1145413974
virt-edit: فایلهای ماشین مجازی را ویرایش میکند. فایل با ادیتور پیش فرض باز میشود.
#virt-edit [--options] -d domname file #virt-edit [--options] -a disk.img file
به عنوان مثال با دستور زیر فایل /etc/passwd را در ایمیج vm.img ویرایش میکنیم.
#virt-edit -a vm.img /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh mahdi:x:1000:1000:mahdi,,,:/home/mahdi:/bin/bash "/tmp/virteditEZy7PD" 23L, 954C
virt-cat: محتویات یک فایل در ماشین مجازی را نمایش میدهد.
#virt-cat -a vm /boot/grub/grub.cfg # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi ...
virt-rescue: یک شل رسکیو در ماشین مجازی ایجاد میکند. این دستور مشابه سیدی نجات برای سیتسمها فیزیکی عمل میکند. یک شل به همراه تعدادی دستور برای عیب یابی و رفع عیب در اختیار قرار میدهد. از آنجا که نوشتن و ایجاد تغییر در ماشینهای مجازی روشن ممکن است باعث آسیب دیدن سیستم شود باید از آپشن –ro در این مواقع استفاده کرد.
#virt-rescue [--options] -d name #virt-rescue [--options] -a disk.img
در این مثال با virt-rescue وارد ماشین مجازی می شویم و چند دستور را اجرا میکنیم.
#virt-rescue -d vm12 Welcome to virt-rescue, the libguestfs rescue shell. Note: The contents of / are the rescue appliance. You have to mount the guest's partitions under /sysroot before you can examine them. ><rescue>
پس از اجرای این دستور خط فرمان منتظر دریافت دستورات خط فرمان است.
نکته: بعد از اجرای دستور باید فایلسیستمها را مونت کنیم. در صورت استفاده از آپشن –suggest برنامه به ما نحوه مونت کردن هر پارتیشن را پیشنهاد میکند.
#virt-rescue --suggest -d vm12 Inspecting the virtual machine or disk image ... This disk contains one or more operating systems. You can use these mount commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems. # /dev/vda1 is the root of a linux operating system # type: linux, distro: debian, version: 6.0 # 6.0.3 mount /dev/vda1 /sysroot/ mount /dev/vda8 /sysroot/tmp mount /dev/vda5 /sysroot/usr mount /dev/vda6 /sysroot/var mount /dev/vda9 /sysroot/home mount --bind /dev /sysroot/dev mount --bind /dev/pts /sysroot/dev/pts mount --bind /proc /sysroot/proc mount --bind /sys /sysroot/sys # /dev/vdb is the root of a linux operating system # type: linux, distro: debian, version: 6.0 # Debian GNU/Linux 6.0.3 "Squeeze" - Official i386 DVD Binary-1 20111008-13:01 mount /dev/vdb /sysroot/ mount --bind /dev /sysroot/dev mount --bind /dev/pts /sysroot/dev/pts mount --bind /proc /sysroot/proc mount --bind /sys /sysroot/sys
پارتیشنها را در مسیر /sysroot مونت میکنیم.
><rescue>mount /dev/vda1 /sysroot/ ><rescue>mount /dev/vda8 /sysroot/tmp ><rescue>mount /dev/vda5 /sysroot/usr ><rescue>mount /dev/vda6 /sysroot/var ><rescue>mount /dev/vda9 /sysroot/home ><rescue>mount --bind /dev /sysroot/dev ><rescue>mount --bind /dev/pts /sysroot/dev/pts ><rescue>mount --bind /proc /sysroot/proc ><rescue>mount --bind /sys /sysroot/sys
سپس با دستور زیر به داخل سیستمعامل chroot میکنیم و دستورات را اجرا میکنیم.
#chroot /sysroot