guestfs-recipes(1) Virtualization Support guestfs-recipes(1)

guestfs-recipes - دستورالعمل‌های کاربردی libguestfs، guestfish و ابزارهای virt

این صفحه شامل دستورالعمل‌ها و پیوندهایی برای کارهایی است که می‌توانید با استفاده از libguestfs، guestfish(1) و ابزارهای virt انجام دهید.

اگر ایمیج دیسک روی یک کارساز راه دور قرار دارد که از طریق SSH،‏ HTTP،‏ FTP،‏ NBD،‏ iSCSI یا موارد مشابه در دسترس است، می‌توانید آن را مستقیماً باز کنید. برای چندین مثال، بخش «ADDING REMOTE STORAGE» در guestfish(1) را ببینید. این کار نیازمند libguestfs ≥ 1.22 و qemu ≥ 1.5 است.

ببینید: بخش «EXAMPLES» در virt-ls(1).

ببینید: https://rwmj.wordpress.com/2013/05/16/scanning-offline-guests-using-openscap-and-guestmount/#content

پیوندهای زیر نحوه استفاده از guestfish(1) را برای تغییر تصویر پس‌زمینه یک کاربر در یک ماشین مجازی Windows XP شرح می‌دهند. متأسفانه به نظر می‌رسد این روش برای هر نسخه از Windows به میزان قابل‌توجهی متفاوت است.

https://lists.fedoraproject.org/pipermail/virt/2011-May/002655.html https://lists.fedoraproject.org/pipermail/virt/2011-May/002658.html

برای محاسبه چکسام یک دستگاه کامل، یا یک پارتیشن، LV و غیره در یک ایمیج دیسک:

guestfish --ro -a disk.img run : checksum-device md5 /dev/sda1

عبارت "md5" را با نوع چکسام مورد نظر خود جایگزین کنید. برای فهرستی از انواع پشتیبانی‌شده، بخش «guestfs_checksum_device» در guestfs(3) را ببینید.

عبارت /dev/sda1 به معنی «نخستین پارتیشن» است. می‌توانید از /dev/sda برای محاسبه چکسام کل ایمیج دیسک، یا از نام یک حجم منطقی (LV) یا دستگاه RAID استفاده کنید.

برای محاسبه چکسام یک فایل منفرد:

guestfish --ro -a disk.img -i checksum sha256 /etc/passwd

یا برای یک مهمان Windows:

 guestfish --ro -a disk.img -i \
   checksum sha256 'win:\windows\system32\config\SOFTWARE'
از ترکیبی از ابزارهایی مانند cp(1)، dd(1) و ابزارهای virt مانند virt-sysprep(1)، virt-sparsify(1) و virt-resize(1) استفاده کنید.

این دستور ورودی cd.iso را به خروجی cd.tar.gz تبدیل می‌کند:

guestfish --ro -a cd.iso -m /dev/sda tgz-out / cd.tar.gz

برای صادر کردن تنها یک زیردایرکتوری، برای مثال /files، این‌گونه عمل کنید:

guestfish --ro -a cd.iso -m /dev/sda tgz-out /files cd.tar.gz

اگر دیسک داده‌ای در یک قالب / سیستم‌فایل / پارتیشن / مدیر حجم (volume manager) دارید، می‌توانید با استفاده از این روش آن را به نوع دیگری تبدیل کنید.

در این مثال، کار را با یک دیسک داده که شامل یک پارتیشن تکیِ دارای سیستم‌فایل است آغاز می‌کنیم و می‌خواهیم دیسک دیگری بسازیم که شامل همان فایل‌ها باشد، اما روی یک سیستم‌فایل ext3 که در یک حجم منطقی (logical volume) روی دیسکی با قالب خام تنک (sparse raw-format) قرار گرفته است.

ابتدا دیسک مقصد قالب‌بندی‌شده اما خالی را بسازید:

truncate -s 10G target.img
virt-format -a target.img --partition=mbr --lvm --filesystem=ext3

اکنون، دو نمونه از guestfish را با لوله‌کشی (pipe) به یکدیگر متصل کنید تا داده‌های قدیمی به دیسک جدید منتقل شوند:

guestfish --ro -a source.img -m /dev/sda1  -- tar-out / - | \
guestfish --rw -a target.img -m /dev/VG/LV -- tar-in - /

برای مرور ایمیج دیسک نهایی، این‌گونه عمل کنید:

guestfish --ro -a target.img -m /dev/VG/LV
><fs> ll /

این تکنیک بسیار قدرتمند است و برای نمونه به شما امکان می‌دهد دایرکتوری‌های مبدأ را بین سیستم‌فایل‌های مقصد تقسیم کنید.

توجه داشته باشید که این روش برای دیسک‌های ماشین مجازی قابل بوت کار نخواهد کرد (دست‌کم نه به‌طور مستقیم)، زیرا بوت‌لودر را کپی نمی‌کند.

http://rwmj.wordpress.com/2013/05/09/tip-convert-a-windows-dvd-iso-to-a-bootable-usb-key-using-guestfish/#content

ایمیج‌های دیسک Xen اغلب بدون پارتیشن هستند؛ بدین معنا که سیستم‌فایل بدون هیچ جدول پارتیشنی، مستقیماً از ابتدای دیسک آغاز می‌شود. در واقع می‌توانید این ایمیج‌ها را مستقیماً در KVM استفاده کنید (به شرطی که سیستم‌عامل مهمان ویندوز نباشد)، اما برخی افراد ترجیح می‌دهند آن‌ها را به ایمیج‌های دیسک استاندارد پارتیشن‌بندی‌شده تبدیل کنند، و این کار برای مهمان‌های ویندوزی الزامی است. در اینجا نحوه استفاده از guestfish برای این کار آورده شده است:

guestfish
><fs> add-ro input.img
><fs> sparse output.img 10G     # adjust the output size
><fs> run
# Create a partition table on the output disk:
><fs> part-init /dev/sdb mbr
><fs> part-add /dev/sdb p 2048 -2048
# Copy the data to the target partition:
><fs> copy-device-to-device /dev/sda /dev/sdb1 sparse:true
# Optionally resize the target filesystem.  Use ntfsresize
# for Windows guests:
><fs> resize2fs /dev/sdb1

چنین ایمیج دیسکی مستقیماً قابل بوت نخواهد بود. ممکن است لازم باشد آن را با یک کرنل خارجی و initramfs بوت کنید (زیر را ببینید). یا می‌توانید از دستورهای guestfish یعنی "syslinux" یا "extlinux" برای نصب بوت‌لودر SYSLINUX استفاده کنید.

ابزار virt-format(1) می‌تواند این کار را مستقیماً انجام دهد.

از virt-make-fs(1) برای ایجاد یک ایمیج دیسک دارای محتوا استفاده کنید. این ابزار همچنین می‌تواند برخی از ایمیج‌های دیسک استاندارد مانند دستگاه‌های فلاپی مجازی (VFDs) را ایجاد کند.

همچنین می‌توانید از گزینهٔ -N در guestfish(1) برای ایجاد ایمیج‌های دیسک خالی استفاده کنید. راهنمای کاربردی زیر گزینه‌های موجود را شرح می‌دهد.

https://rwmj.wordpress.com/2010/09/08/new-guestfish-n-options-in-1-5-9/#content

virt-builder(1) می‌تواند سیستم‌های مهمان مینیمال ایجاد کند.

از guestfish استفاده کنید. برای حذف یک فایل:

guestfish -a disk.img -i rm /file/to/delete

برای touch کردن یک فایل (به‌روزرسانی تاریخچه زمانی آن یا ایجاد آن):

guestfish -a disk.img -i touch /file/to/touch

برای دریافت وضعیت (stat) یک فایل. از آنجا که این یک عملیات فقط‌خواندنی است، می‌توانیم با افزودن پرچم --ro آن را ایمن‌تر کنیم.

guestfish --ro -a disk.img -i stat /file/to/stat

ده‌ها مورد از این دستورها وجود دارد. guestfish(1) یا خروجی دستور "guestfish -h" را ببینید..SH "مقایسه دو سیستم مهمان؛ مقایسه یک اسنپ‌شات با نسخه کنونی" از نسخه libguestfs ≥ 1.26 به بعد، از virt-diff(1) برای بررسی تفاوت‌های میان دو سیستم مهمان (برای نمونه اگر در ابتدا از یک منبع مشترک کلون شده باشند) یا میان دو اسنپ‌شات از یک سیستم مهمان استفاده کنید. در نسخه‌های پیشین libguestfs، از virt-ls(1) استفاده کنید.

دستور زیر معادل "systemctl mask ..." است. برای غیرفعال کردن سرویس "cloud-init" به‌گونه‌ای که در بوت بعدی راه‌اندازی نشود:

guestfish -a disk.img -i \
    ln-sf /dev/null /etc/systemd/system/cloud-init.service

برای غیرفعال کردن tmp-on-tmpfs:

guestfish -a disk.img -i \
    ln-sf /dev/null /etc/systemd/system/tmp.mount

یک مشکل در دستورهای بالا این است که اگر نام سرویسی را که قصد ماسک کردن آن را دارید اشتباه وارد کنید، هیچ بازخوردی دریافت نمی‌کنید. با این حال می‌توانید از virt-ls(1) برای فهرست کردن سرویس‌های موجود systemd به این صورت استفاده کنید:

virt-ls -a /tmp/fedora-19.img -R /lib/systemd/system

فرض کنید یک سیستم مهمان Windows دارید و می‌خواهید حروف درایو را به عنوان نقاط اتصال FUSE (/C/...، /D/... و غیره) در دسترس قرار دهید. به جای guestmount(1)، از این اسکریپت Perl استفاده کنید:

#!/usr/bin/perl -w
use strict;
use Sys::Guestfs;
$| = 1;
die "usage: $0 mountpoint disk.img" if @ARGV < 2;
my $mp = shift @ARGV;
my $g = new Sys::Guestfs;
$g->add_drive_opts ($_) foreach @ARGV;
$g->launch;
my @roots = $g->inspect_os;
die "$0: no operating system found" if @roots != 1;
my $root = $roots[0];
die "$0: not Windows" if $g->inspect_get_type ($root) ne "windows";
my %map = $g->inspect_get_drive_mappings ($root);
foreach (keys %map) {
    $g->mkmountpoint ("/$_");
    eval { $g->mount ($map{$_}, "/$_") };
    warn "$@ (ignored)\n" if $@;
}
$g->mount_local ($mp);
print "filesystem ready on $mp\n";
$g->mount_local_run;
$g->shutdown;

می‌توانید از این اسکریپت به این صورت استفاده کنید:

$ mkdir /tmp/mnt
$ ./drive-letters.pl /tmp/mnt windows7.img
filesystem ready on /tmp/mnt

در یک پنجره دیگر:

$ cd /tmp/mnt
$ ls
C  D
$ cd C
$ ls
Documents and Settings
PerfLogs
ProgramData
Program Files
[etc]
$ cd ../..
$ guestunmount /tmp/mnt

می‌توانید از دستور "download" در guestfish(1) برای استخراج محتوای خام سیستم‌فایل از هر سیستم‌فایلی درون یک ایمیج دیسک یا یک ماشین مجازی استفاده کنید (حتی موردی که رمزنگاری شده باشد یا در یک دستگاه LV یا RAID قرار داشته باشد):

guestfish --ro -a disk.img run : download /dev/sda1 sda1.img
guestfish --ro -d Guest run : download /dev/vg_guest/lv_root lv.img

برای ارسال خروجی دریافت شده به stdout، نام فایل را با نویسه "-" جایگزین کنید:

guestfish --ro -a disk.img run : download /dev/sda1 - | gzip > sda1.gz

برای فهرست کردن سیستم‌فایل‌های موجود در یک ایمیج دیسک، از virt-filesystems(1) استفاده کنید.

همچنین بخش «Uploading raw filesystem content» را ببینید.

می‌توانید از این دستور برای موارد زیر استفاده کنید:

  • تعمیر یک ماشین مجازی که بوت نمی‌شود.
  • تغییر کرنلی که برای بوت کردن ماشین مجازی استفاده می‌شود.
  • تغییر گزینه‌های خط فرمان کرنل.

از virt-edit(1) برای ویرایش پیکربندی grub استفاده کنید:

virt-edit -d BrokenGuest /boot/grub2/grub.cfg

یا برای کاوش و دستکاری‌های عمومی درون یک ماشین مجازی غیرقابل بوت، از virt-rescue(1) به این صورت استفاده کنید:

 virt-rescue -d BrokenGuest
برای برون‌بری /home از یک ماشین مجازی (VM) به یک دایرکتوری محلی، از
virt-copy-out(1) استفاده کنید:
virt-copy-out -d Guest /home .

نکات:

  • نقطه پایانی دستور اشتباه چاپی نیست. این نقطه بدین معنی است که می‌خواهیم عملیات کپی به دایرکتوری فعلی انجام شود.
  • این دستور دایرکتوری‌ای به نام "home" را در دایرکتوری فعلی ایجاد می‌کند.

اگر مهمان یک سیستم ویندوزی باشد، می‌توانید از حروف درایو و بک‌اسلش استفاده کنید، اما باید پیشوند "win:" را در ابتدای مسیر قرار داده و آن را داخل نقل‌قول بگذارید تا در برابر تفسیر توسط شل محافظت شود، مانند زیر:

virt-copy-out -d WinGuest 'win:c:\windows\system32\config' .

برای دریافت خروجی به عنوان یک فایل تاربال فشرده، این دستور را اجرا کنید:

virt-tar-out -d Guest /home - | gzip --best > home.tar.gz

اگرچه وسوسه‌انگیز به نظر می‌رسد، اما این کار معمولاً روشی قابل اتکا برای تهیه نسخه پشتیبان از یک سیستم مهمانِ در حال اجرا نیست. مدخل مربوطه را در FAQ مشاهده کنید: http://libguestfs.org/FAQ.html#backup

اگر یک مهمان لینوکسی فاقد بوت‌لودر باشد یا بوت‌لودر آن خراب شده باشد، معمولاً می‌توانید آن را با استفاده از یک هسته خارجی و initramfs بوت کنید. در این پیکربندی، هایپروایزر مانند یک بوت‌لودر عمل کرده، هسته را از دیسک میزبان در حافظه مهمان بارگذاری می‌کند و مستقیماً اجرای هسته را آغاز می‌نماید.

با این حال، ممکن است این پرسش مطرح شود که چگونه هسته مناسب متناظر با ایمیج دیسک خود را به دست آورید. از نسخه 1.24 libguestfs به بعد، virt-builder(1) می‌تواند آخرین هسته و initramfs متناظر با آن را برای شما استخراج کند:

mkdir outputdir
virt-builder --get-kernel disk.img -o outputdir
ls -lh outputdir

این اسکریپت ساده یک مهمان لینوکسی را بررسی می‌کند تا دریابد کدام کاربر بیشترین فضا را در دایرکتوری خانگی خود مصرف کرده است:

#!/bin/sh -

set -e

vm="$1"
dir=/home

eval $(guestfish --ro -d "$vm" -i --listen)

for d in $(guestfish --remote ls "$dir"); do
    echo -n "$dir/$d"
    echo -ne '\t'
    guestfish --remote du "$dir/$d";
done | sort -nr -k 2

guestfish --remote exit

پیوند زیر روش‌های گوناگون ممکن را برای به دست آوردن آخرین آدرس DHCP تخصیص‌یافته به یک ماشین مجازی توضیح می‌دهد.

https://rwmj.wordpress.com/2011/03/31/tip-code-for-getting-dhcp-address-from-a-virtual-machine-disk-image/#content

در دایرکتوری نمونه‌های کد منبع libguestfs، آخرین نسخه برنامه virt-dhcp-address.c را خواهید یافت.

اسکریپت زیر را در فایلی با نام product-name.sh ذخیره کنید:

#!/bin/sh -
set -e
eval "$(guestfish --ro -d "$1" --i --listen)"
root="$(guestfish --remote inspect-get-roots)"
guestfish --remote inspect-get-product-name "$root"
guestfish --remote exit

اسکریپت را قابل اجرا کرده و آن را روی یک مهمان مشخص اجرا کنید:

$ product-name.sh fedora-40.img
Fedora Linux 40 (Forty)

همچنین می‌توانید با استفاده از ابزار خط فرمان "xpath" یا از طریق زبان برنامه‌نویسی دلخواه خود، یک پرسمان XPath روی XML حاصل از virt-inspector(1) اجرا کنید:

$ virt-inspector -a fedora-40.img > xml
$ xpath -e '//product_name' < xml
Found 1 nodes in stdin:
-- NODE --
<product_name>Fedora Linux 40 (Forty)</product_name>

پیوند زیر حاوی برنامه‌ای برای چاپ هسته بوت پیش‌فرض برای یک ماشین مجازی لینوکس است.

https://rwmj.wordpress.com/2010/10/30/tip-use-augeas-to-get-the-default-boot-kernel-for-a-vm/#content

این روش از Augeas استفاده می‌کند و این تکنیک عموماً برای بسیاری از کارهای مختلف قابل استفاده است، از جمله:

  • فهرست کردن حساب‌های کاربری در سیستم مهمان
  • مشاهده مخازنی که سیستم برای استفاده از آن‌ها پیکربندی شده است
  • سرورهای NTP که سیستم به آن‌ها متصل می‌شود
  • پیام‌های راه‌اندازی در آخرین باری که سیستم بوت شده است
  • فهرست کردن افرادی که اخیراً وارد سیستم شده‌اند

http://augeas.net.SH "سیستم‌های مهمان قفل‌شده (Hanging guests)" روش‌های گوناگونی برای استفاده از libguestfs جهت پی بردن به این که چرا یک سیستم مهمان قفل شده یا بدون پاسخ است وجود دارد:

1.
خواندن فایل‌های لاگ با استفاده از virt-cat:
virt-cat Guest /var/log/messages | less
2.
خواندن Windows Event Log (تنها در Windows Vista یا جدیدتر):

https://rwmj.wordpress.com/2011/04/17/decoding-the-windows-event-log-using-guestfish/#content

3.
یافتن فایل‌هایی که اخیراً در یک سیستم مهمان به‌روزرسانی شده‌اند:

https://rwmj.wordpress.com/2012/02/27/using-libguestfs-to-find-out-why-a-windows-guest-was-hanging/#content

این کار ممکن است سرنخی از این که چه برنامه‌ای در حال اجراست به شما بدهد.

تهیه دامپ هگزادسیمال از پارتیشن بوت (Master Boot Record / سکتور نخست):

guestfish --ro -a disk.img run : pread-device /dev/sda 0x200 0 |
  hexdump -C

(0x200 = 512 بایت که اندازه سکتورهای سنتی رایانه‌های شخصی است)

برای تهیه دامپ هگزادسیمال از پارتیشن Nام، در دستور زیر یک عدد را جایگزین "N" کنید:

guestfish --ro -a disk.img \
    run : pread-device /dev/sda 0x200 $((N*0x200)) |
  hexdump -C

ویرایش هگزادسیمال پارتیشن بوت (Master Boot Record / سکتور نخست):

guestfish --rw -a disk.img run : hexedit /dev/sda 0x200

از نسخه 1.26 نرم‌افزار libguestfs، دستورهای virt-builder(1)، virt-customize(1) و virt-sysprep(1) دارای گزینه --install برای نصب بسته‌ها در سیستم‌های مهمان لینوکس هستند. (اگر یک سیستم مهمان از قبل موجود دارید از virt-customize استفاده کنید، یا اگر می‌خواهید یک سیستم مهمان را از ابتدا بسازید از virt-builder استفاده نمایید).

برای نمونه:

virt-builder fedora-20 --install emacs

از نسخه 1.26 نرم‌افزار libguestfs، می‌توانید از گزینه --edit در virt-builder(1)، virt-customize(1) یا virt-sysprep(1) برای ویرایش فراداده‌های مخزن پیش از نصب بسته‌ها استفاده کنید.

به‌عنوان مثال، این دستور بسته‌ها را از مخزن updates-testing در Fedora نصب می‌کند:

virt-builder fedora-20 \
  --edit '/etc/yum.repos.d/fedora-updates-testing.repo:
            s/enabled=0/enabled=1/' \
  --install emacs

‏SYSLINUX یک بارگذار بوت کوچک با پیکربندی آسان برای سیستم‌های مهمان لینوکس و ویندوز است. اگر سیستم مهمان شما قابل راه‌اندازی (bootable) نیست، می‌توانید بارگذار بوت SYSLINUX را با استفاده از دستورهای guestfish شامل "syslinux" (برای مهمان‌های مبتنی بر FAT) یا "extlinux" (برای مهمان‌های مبتنی بر ext2/3/4 و btrfs) نصب کنید.

این راهنما یک سیستم مهمان لینوکس را فرض می‌کند که در آن /dev/sda1 همان /boot، /boot/vmlinuz هسته سیستم مهمان، و /dev/sda3 پارتیشن ریشه است. برای یک سیستم مهمان ویندوز به یک پارتیشن بوت با فرمت FAT نیاز دارید و باید در عوض از دستور "syslinux" استفاده کنید.

یک فایل پیکربندی syslinux.cfg بسازید. شما باید مستندات SYSLINUX را در http://www.syslinux.org بررسی کنید، اما ساختار آن می‌تواند چیزی شبیه به این باشد:

DEFAULT linux
LABEL linux
  SAY Booting the kernel
  KERNEL vmlinuz
  INITRD initrd
  APPEND ro root=/dev/sda3

مکان Master Boot Record مربوط به syslinux را مشخص کنید (فایلی با نامی شبیه به /usr/share/syslinux/mbr.bin).

guestfish -a disk.img -i
# Upload the master boot record and configuration file:
><fs> upload ..../mbr.bin /boot/mbr.bin
><fs> upload ..../syslinux.cfg /boot/syslinux.cfg
# Put the MBR into the boot sector:
><fs> copy-file-to-device /boot/mbr.bin /dev/sda size:440
# Install syslinux on the first partition:
><fs> extlinux /boot
# Set the first partition as bootable:
><fs> part-set-bootable /dev/sda 1 true

همچنین ببینید: http://rwmj.wordpress.com/2013/04/04/new-in-libguestfs-use-syslinux-or-extlinux-to-make-bootable-guests/#content

دستورهای زیر را در یک فایل به نام list-apps.sh ذخیره کنید:

#!/bin/sh -
set -e
eval "$(guestfish --ro -d "$1" --i --listen)"
root="$(guestfish --remote inspect-get-roots)"
guestfish --remote inspect-list-applications "$root"
guestfish --remote exit

فایل را قابل اجرا کنید؛ پس از آن می‌توانید آن را روی هر ماشین مجازی نام‌گذاری‌شده‌ای اجرا کنید:

# list-apps.sh WinGuest
[0] = {
  app_name: Mozilla Firefox (3.6.12)
  app_display_name: Mozilla Firefox (3.6.12)
  app_epoch: 0
  app_version: 3.6.12 (en-GB)
  app_release:
  app_install_path: C:\Program Files\Mozilla Firefox
  app_trans_path:
  app_publisher: Mozilla
  app_url: http://www.mozilla.com/en-GB
  app_source_package:
  app_summary:
  app_description: Mozilla Firefox
}
[1] = {
  app_name: VLC media player
  app_display_name: VLC media player 1.1.5
  app_epoch: 0
  app_version: 1.1.5
  app_release:
  app_install_path: C:\Program Files\VideoLAN\VLC
  app_trans_path:
  app_publisher: VideoLAN
  app_url: http://www.videolan.org
  app_source_package:
  app_summary:
  app_description:
}

اگر می‌خواهید اسکریپت را بر روی ایمیج‌های دیسک (به جای ماشین‌های مجازی libvirt) اجرا کنید، "-d "$1"" را به "-a "$1"" تغییر دهید. همچنین ببینید: virt-inspector(1)..SH "فهرست کردن فایل‌ها و دایرکتوری‌ها در یک VM" از virt-ls(1) استفاده کنید.

پیوند زیر حاوی اسکریپتی است که می‌توان از آن برای استخراج فهرست سرویس‌های یک VM ویندوز و اینکه آیا این سرویس‌ها هنگام بوت اجرا می‌شوند یا بر اساس تقاضا بارگذاری می‌شوند، استفاده کرد.

https://rwmj.wordpress.com/2010/12/10/tip-list-services-in-a-windows-guest/#content

از virt-sparsify(1) استفاده کنید.

می‌توانید از virt-df(1) برای نظارت بر مصرف دیسک ماشین‌های مهمان خود در گذر زمان استفاده کنید. پیوند زیر حاوی یک راهنما است.

http://web.archive.org/web/20130214073726/http://virt-tools.org/learning/advanced-virt-df

guestfish(1) به همراه ابزارهای شرح‌داده‌شده در پیوند زیر می‌تواند برای خواندن Windows Event Log از هر ماشین مجازی که Windows Vista یا نسخه‌های جدیدتر را اجرا می‌کند، استفاده شود.

https://rwmj.wordpress.com/2011/04/17/decoding-the-windows-event-log-using-guestfish/#content

با استفاده از گزینه -e در virt-edit(1) می‌توانید جایگزینی‌های ساده‌ای را روی فایل‌ها انجام دهید. یک کاربرد آن، حذف گذرواژه root از یک ماشین مهمان لینوکس است:

virt-edit -d domname /etc/passwd -e 's/^root:.*?:/root::/'
virt-edit -a disk.img /etc/passwd -e 's/^root:.*?:/root::/'

پیوند زیر حاوی روشی برای حذف گذرواژه Administrator از یک VM ویندوز است، یا دقیق‌تر بگوییم، در ورود بعدی یک خط فرمان (command prompt) در اختیارتان می‌گذارد که می‌توانید از آن برای دور زدن هرگونه تدابیر امنیتی استفاده کنید:

https://mdbooth.wordpress.com/2010/10/18/resetting-a-windows-guests-administrator-password-with-guestfish

انجام یک «sysprep» صرفاً با استفاده از libguestfs امکان‌پذیر است، هرچند چندان سرراست نیست. در حال حاضر کدی در پروژه Aeolus Oz وجود دارد که این کار را (با استفاده از libguestfs) انجام می‌دهد. این احتمال وجود دارد که در آینده این قابلیت را به virt-sysprep(1) اضافه کنیم.

https://github.com/clalancette/oz https://www.redhat.com/archives/virt-tools-list/2011-May/msg00019.html

دیسک‌های زنده (Live CD) لینوکس اغلب حاوی چندین لایه از ایمیج‌های دیسک هستند که مانند عروسک‌های ماتریوشکای روسی تو در تو قرار گرفته‌اند. می‌توانید از guestfish(1) برای کاوش در این لایه‌های چندگانه استفاده کنید، همان‌طور که در راهنمای زیر شرح داده شده است.

https://rwmj.wordpress.com/2009/07/15/unpack-the-russian-doll-of-a-f11-live-cd/#content

پیوند زیر حاوی نکات عمومی درباره بارگذاری (رونوشت به داخل / copying in) و بارگیری (رونوشت به خارج / copying out) فایل‌ها از ماشین‌های مجازی است.

https://rwmj.wordpress.com/2010/12/02/tip-uploading-and-downloading/#content

می‌توانید از guestfish(1) برای بارگذاری کل سیستم‌فایل‌ها در یک VM استفاده کنید، حتی درون سیستم‌فایلی که رمزگذاری شده یا درون یک دستگاه LV یا RAID جای گرفته است:

guestfish --rw -a disk.img run : upload sda1.img /dev/sda1
guestfish --rw -d Guest run : upload lv.img /dev/vg_guest/lv_root

یک مشکل رایج این است که اندازه سیستم‌فایل برای مقصد مناسب نیست. اگر بیش از اندازه بزرگ باشد، کار چندانی از دست libguestfs برنمی‌آید - باید سیستم‌فایل را به گونه‌ای دیگر آماده کنید. اما اگر سیستم‌فایل نیاز به گسترش در مقصد داشته باشد، می‌توانید از guestfish برای تغییر اندازه آن به اندازه مناسب استفاده کنید:

guestfish --rw -d Guest run : \
  upload lv.img /dev/vg_guest/lv_root : \
  resize2fs /dev/vg_guest/lv_root

(یا در صورتی که سیستم‌فایل NTFS است از "ntfsresize" استفاده کنید).

پیوند زیر نحوه استفاده از libguestfs، guestfish(1) و ابزارهای virt را روی ماشین‌های مهمان VMware ESX، با به اشتراک‌گذاری اولیه VMware VMFS از طریق sshfs توضیح می‌دهد.

https://rwmj.wordpress.com/2011/05/10/tip-use-libguestfs-on-vmware-esx-guests/#content

guestfs(3), guestfish(1), guestfs-examples(3), guestfs-erlang(3), guestfs-golang(3), guestfs-java(3), guestfs-lua(3), guestfs-ocaml(3), guestfs-perl(3), guestfs-python(3), guestfs-ruby(3), http://libguestfs.org.

Richard W.M. Jones ("rjones at redhat dot com")

Copyright (C) 2009-2025 Red Hat Inc.

این صفحه راهنما شامل مثال‌هایی است که امیدواریم در برنامه‌هایتان از آن‌ها استفاده کنید. این مثال‌ها را می‌توان برای هر مقصودی، آزادانه و بدون هیچ محدودیتی کپی، دستکاری و توزیع کرد..SH "گزارش باگ‌ها (BUGS)" برای دریافت فهرستی از باگ‌های libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools

برای گزارش یک باگ جدید در libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

هنگام گزارش باگ، لطفاً موارد زیر را ارائه دهید:

  • نسخه libguestfs.
  • جایی که libguestfs را از آن تهیه کرده‌اید (برای نمونه: کدام توزیع لینوکس، کامپایل‌شده از سورس و غیره).
  • باگ را به‌دقت شرح داده و روشی برای بازتولید آن ارائه دهید.
  • دستور libguestfs-test-tool(1) را اجرا کرده و خروجی کامل و دست‌نخورده آن را در گزارش باگ قرار دهید.
2026-07-14 libguestfs-1.60.1