Header مدیریت آسان ماشین مجازی با ابزار libguestfs – قسمت اول

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