Header مدیریت آسان ماشین مجازی با ابزار libguestfs
گروه آموزشی مجموعه تدبیر
ibguestfsشامل کتابخانهها، ابزارها و API هایی برای دسترسی و ایجاد تغییرات در دیسکهای ماشین مجازی است. این ابزار اپنسورس و آزاد بوده و با مجوز الجیپیال و جیپیال منتشر میشود. با استفاده از این ابزار میتوانید:
- به فایلها و دایرکتوریهای داخل ماشین مجازی دسترسی داشته باشید (حذف و ایجاد و تغییر).
- سیستم عامل یک سرور فیزیکی را به ماشین مجازی تبدیل کنید (p2v).
- ماشینهای مجازی متفاوت را به هم تبدیل کنید. (v2v) به عنوان مثال ماشین مجازی vmware را به xen و یا kvm تبدیل کنید.
- کلون کردن ماشینهای مجازی
- و …
جالب است بدانید پروژههای بزرگی مانند اپناستک، virt-tools از این ابزار در پروژههایشان استفاده کردهاند.
نصب: در سیستمعامل سنتاواس و یا ردهت و فدورا با دستور زیر تمام بستهها را نصب میکنیم.
1
|
#yum install ‘*guestf*’
|
لیست بستهها:
نکته: در مثالهای زیر نیاز است نام دامنه ماشین مجازی را بدانیم. برای به دست آوردن نام ماشین مجازی از دستور virsh استفاده میکنیم. این دستور ماشینهای مجازی سیستم را به همراه نام و وضعیت لیست میکند.
1
2
3
4
5
|
#virsh list –all
Id Name State
—————————————————-
– other shut off
– test shut off
|
virt-inspector: این ابزار نسخه سیستمعامل ماشین مجازی و اطلاعات دیگری در مورد ماشین مجازی را نشان میدهد.
سادهترین حالت استفاده از این دستور استفاده از پارامتر -d به همراه نام دامنه و یا -a به همراه آدرس پارتیشن یا ایمیج است.
1
2
|
#virt-inspector -d domname
#virt-inspector -a disk.img
|
خروجی دستور نام و مشخصات سیستم عامل نصب شده، لیست بستههای نصب شده، آیکون سیستم عامل و … و با ساختار XML است. در زیر چند خط اول از خروجی برنامه را میبینید.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#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 همه پوشهها و فایلها بصورت تو در تو نمایش داده خواهد شد.
1
2
|
#virt-ls [OPTION] -d domname directory
#virt-ls [OPTION] -a vm.img directory
|
خروجی برنامه در ماشین مجازی نمونه:
1
2
3
4
5
|
#virt-ls -R -a /mnt1/debian/vm /root
/.aptitude
/.aptitude/config
/.bashrc
/.profile
|
virt-format: یک پارتیشن مجازی را فرمت میکند. و در پارتیشن جدید جدول پارتیشن جدید و فایل سیستم ایجاد میکند.
1
|
#virt-format [–option] -a vm.img
|
به عنوان مثال با دستور زیر پارتیشن lvm12 با فایل سیستم ext3 فرمت میکنیم.
1
|
#virt-format –filesystem=ext3 -a /dev/VG/lvm12
|
virt-make-fs: با استفاده از یک فایل tar و یا مجموعهای از فایلها یک پارتیشن با محتویات میسازد. input میتواند یک فایل tar و یا یک فایل tar فشرده و یا یک دایرکتوری باشد. با استفاده از پارامتر –type میتوان فایل سیستم پارتیشن را مشخص کنیم. با استفاده از پارامتر –size میتوان اندازه پارتیشن را مشخص کرد.
1
|
#virt-make-fs [OPTION] input output.img
|
مثالی از ایجاد پارتیشن با فایل سیستم ext3 از دایرکتوری خانگی کاربر:
1
2
|
#virt-make-fs –size=+1G –type=ext3 /home/mahdi/ vm.img
Formatting’vm.img’,fmt=raw size=1145413974
|
virt-edit: فایلهای ماشین مجازی را ویرایش میکند. فایل با ادیتور پیش فرض باز میشود.
1
2
|
#virt-edit [–options] -d domname file
#virt-edit [–options] -a disk.img file
|
به عنوان مثال با دستور زیر فایل /etc/passwd را در ایمیج vm.img ویرایش میکنیم.
1
2
3
4
5
6
|
#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: محتویات یک فایل در ماشین مجازی را نمایش میدهد.
1
2
3
4
5
6
7
8
9
10
11
|
#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 در این مواقع استفاده کرد.
1
2
|
#virt-rescue [–options] -d name
#virt-rescue [–options] -a disk.img
|
در این مثال با virt-rescue وارد ماشین مجازی می شویم و چند دستور را اجرا میکنیم.
1
2
3
4
5
6
|
#virt-rescue -d vm12
Welcome tovirt-rescue,the libguestfs rescue shell.
Note:The contents of/are the rescue appliance.
You have tomount the guest’spartitions under/sysroot
before you can examine them.
><rescue>
|
پس از اجرای این دستور خط فرمان منتظر دریافت دستورات خط فرمان است.
نکته: بعد از اجرای دستور باید فایلسیستمها را مونت کنیم. در صورت استفاده از آپشن –suggest برنامه به ما نحوه مونت کردن هر پارتیشن را پیشنهاد میکند.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#virt-rescue –suggest -d vm12
Inspecting the virtual machine ordisk image…
Thisdisk contains one ormore operating systems. You can usethese mount
commands invirt-rescue(at the><rescue>prompt)tomount 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 مونت میکنیم.
1
2
3
4
5
6
7
8
9
|
><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 میکنیم و دستورات را اجرا میکنیم.
1
|
#chroot /sysroot
|