.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Podwrapper::Man 1.60.1 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "guestfs-recipes 1" .TH guestfs-recipes 1 2026-07-14 libguestfs-1.60.1 "Virtualization Support" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" guestfs\-recipes \- دستورالعمل‌های کاربردی libguestfs، guestfish و ابزارهای virt .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" این صفحه شامل دستورالعمل‌ها و پیوندهایی برای کارهایی است که می‌توانید با استفاده از libguestfs، \fBguestfish\fR\|(1) و ابزارهای virt انجام دهید. .SH "دسترسی به یک ایمیج دیسک راه دور با استفاده از guestfish" .IX Header "Access a remote disk image using guestfish" اگر ایمیج دیسک روی یک کارساز راه دور قرار دارد که از طریق SSH،‏ HTTP،‏ FTP،‏ NBD،‏ iSCSI یا موارد مشابه در دسترس است، می‌توانید آن را مستقیماً باز کنید. برای چندین مثال، بخش «ADDING REMOTE STORAGE» در \fBguestfish\fR\|(1) را ببینید. این کار نیازمند libguestfs ≥ 1.22 و qemu ≥ 1.5 است. .SH "بازرسی یک ماشین مجازی برای فایل‌های setuid" .IX Header "Audit a virtual machine for setuid files" ببینید: بخش «EXAMPLES» در \fBvirt\-ls\fR\|(1). .SH "بازرسی یک ماشین مجازی برای آسیب‌پذیری‌ها و مشکلات امنیتی" .IX Header "Audit a virtual machine for vulnerabilities and security problems" ببینید: https://rwmj.wordpress.com/2013/05/16/scanning\-offline\-guests\-using\-openscap\-and\-guestmount/#content .SH "تغییر تصویر پس‌زمینه در یک ماشین مجازی Windows XP" .IX Header "Change the background image in a Windows XP VM" پیوندهای زیر نحوه استفاده از \fBguestfish\fR\|(1) را برای تغییر تصویر پس‌زمینه یک کاربر در یک ماشین مجازی Windows XP شرح می‌دهند. متأسفانه به نظر می‌رسد این روش برای هر نسخه از Windows به میزان قابل‌توجهی متفاوت است. .PP https://lists.fedoraproject.org/pipermail/virt/2011\-May/002655.html https://lists.fedoraproject.org/pipermail/virt/2011\-May/002658.html .SH "محاسبه چکسام یک فایل یا دستگاه در یک ایمیج دیسک" .IX Header "Checksum a file or device within a disk image" برای محاسبه چکسام یک دستگاه کامل، یا یک پارتیشن، LV و غیره در یک ایمیج دیسک: .PP .Vb 1 \& guestfish \-\-ro \-a disk.img run : checksum\-device md5 /dev/sda1 .Ve .PP عبارت \f(CW\*(C`md5\*(C'\fR را با نوع چکسام مورد نظر خود جایگزین کنید. برای فهرستی از انواع پشتیبانی‌شده، بخش «guestfs_checksum_device» در \fBguestfs\fR\|(3) را ببینید. .PP عبارت \&\fI/dev/sda1\fR به معنی «نخستین پارتیشن» است. می‌توانید از \fI/dev/sda\fR برای محاسبه چکسام کل ایمیج دیسک، یا از نام یک حجم منطقی (LV) یا دستگاه RAID استفاده کنید. .PP برای محاسبه چکسام یک فایل منفرد: .PP .Vb 1 \& guestfish \-\-ro \-a disk.img \-i checksum sha256 /etc/passwd .Ve .PP یا برای یک مهمان Windows: .PP .Vb 2 \& guestfish \-\-ro \-a disk.img \-i \e \& checksum sha256 \*(Aqwin:\ewindows\esystem32\econfig\eSOFTWARE\*(Aq .Ve.SH "کلون کردن ماشین مجازی (Cloning a virtual machine)" .IX Header "Cloning a virtual machine" از ترکیبی از ابزارهایی مانند \fBcp\fR\|(1)، \fBdd\fR\|(1) و ابزارهای virt مانند \fBvirt\-sysprep\fR\|(1)، \fBvirt\-sparsify\fR\|(1) و \fBvirt\-resize\fR\|(1) استفاده کنید. .SH "تبدیل CD\-ROM / DVD / ISO به تاربال (Convert a CD\-ROM / DVD / ISO to a tarball)" .IX Header "Convert a CD-ROM / DVD / ISO to a tarball" این دستور ورودی \fIcd.iso\fR را به خروجی \fIcd.tar.gz\fR تبدیل می‌کند: .PP .Vb 1 \& guestfish \-\-ro \-a cd.iso \-m /dev/sda tgz\-out / cd.tar.gz .Ve .PP برای صادر کردن تنها یک زیردایرکتوری، برای مثال \fI/files\fR، این‌گونه عمل کنید: .PP .Vb 1 \& guestfish \-\-ro \-a cd.iso \-m /dev/sda tgz\-out /files cd.tar.gz .Ve .SH "تبدیل از یک قالب/سیستم‌فایل به دیگری (Convert from one format/filesystem to another)" .IX Header "Convert from one format/filesystem to another" اگر دیسک داده‌ای در یک قالب / سیستم‌فایل / پارتیشن / مدیر حجم (volume manager) دارید، می‌توانید با استفاده از این روش آن را به نوع دیگری تبدیل کنید. .PP در این مثال، کار را با یک دیسک داده که شامل یک پارتیشن تکیِ دارای سیستم‌فایل است آغاز می‌کنیم و می‌خواهیم دیسک دیگری بسازیم که شامل همان فایل‌ها باشد، اما روی یک سیستم‌فایل ext3 که در یک حجم منطقی (logical volume) روی دیسکی با قالب خام تنک (sparse raw\-format) قرار گرفته است. .PP ابتدا دیسک مقصد قالب‌بندی‌شده اما خالی را بسازید: .PP .Vb 2 \& truncate \-s 10G target.img \& virt\-format \-a target.img \-\-partition=mbr \-\-lvm \-\-filesystem=ext3 .Ve .PP اکنون، دو نمونه از guestfish را با لوله‌کشی (pipe) به یکدیگر متصل کنید تا داده‌های قدیمی به دیسک جدید منتقل شوند: .PP .Vb 2 \& guestfish \-\-ro \-a source.img \-m /dev/sda1 \-\- tar\-out / \- | \e \& guestfish \-\-rw \-a target.img \-m /dev/VG/LV \-\- tar\-in \- / .Ve .PP برای مرور ایمیج دیسک نهایی، این‌گونه عمل کنید: .PP .Vb 2 \& guestfish \-\-ro \-a target.img \-m /dev/VG/LV \& > ll / .Ve .PP این تکنیک بسیار قدرتمند است و برای نمونه به شما امکان می‌دهد دایرکتوری‌های مبدأ را بین سیستم‌فایل‌های مقصد تقسیم کنید. .PP توجه داشته باشید که این روش برای دیسک‌های ماشین مجازی قابل بوت کار نخواهد کرد (دست‌کم نه به‌طور مستقیم)، زیرا بوت‌لودر را کپی نمی‌کند. .SH "تبدیل DVD ویندوز به فلش USB قابل بوت (Convert Windows DVD to bootable USB key)" .IX Header "Convert Windows DVD to bootable USB key" http://rwmj.wordpress.com/2013/05/09/tip\-convert\-a\-windows\-dvd\-iso\-to\-a\-bootable\-usb\-key\-using\-guestfish/#content .SH "تبدیل ایمیج بدون پارتیشن سبک زن به ایمیج پارتیشن‌بندی‌شده (Convert Xen\-style partitionless image to partitioned disk image)" .IX Header "Convert Xen-style partitionless image to partitioned disk image" ایمیج‌های دیسک Xen اغلب بدون پارتیشن هستند؛ بدین معنا که سیستم‌فایل بدون هیچ جدول پارتیشنی، مستقیماً از ابتدای دیسک آغاز می‌شود. در واقع می‌توانید این ایمیج‌ها را مستقیماً در KVM استفاده کنید (به شرطی که سیستم‌عامل مهمان ویندوز نباشد)، اما برخی افراد ترجیح می‌دهند آن‌ها را به ایمیج‌های دیسک استاندارد پارتیشن‌بندی‌شده تبدیل کنند، و این کار برای مهمان‌های ویندوزی الزامی است. در اینجا نحوه استفاده از guestfish برای این کار آورده شده است: .PP .Vb 12 \& guestfish \& > add\-ro input.img \& > sparse output.img 10G # adjust the output size \& > run \& # Create a partition table on the output disk: \& > part\-init /dev/sdb mbr \& > part\-add /dev/sdb p 2048 \-2048 \& # Copy the data to the target partition: \& > copy\-device\-to\-device /dev/sda /dev/sdb1 sparse:true \& # Optionally resize the target filesystem. Use ntfsresize \& # for Windows guests: \& > resize2fs /dev/sdb1 .Ve .PP چنین ایمیج دیسکی مستقیماً قابل بوت نخواهد بود. ممکن است لازم باشد آن را با یک کرنل خارجی و initramfs بوت کنید (زیر را ببینید). یا می‌توانید از دستورهای guestfish یعنی \f(CW\*(C`syslinux\*(C'\fR یا \f(CW\*(C`extlinux\*(C'\fR برای نصب بوت‌لودر SYSLINUX استفاده کنید. .SH "ایجاد ایمیج‌های دیسک خالی (Create empty disk images)" .IX Header "Create empty disk images" ابزار \fBvirt\-format\fR\|(1) می‌تواند این کار را مستقیماً انجام دهد. .PP از \fBvirt\-make\-fs\fR\|(1) برای ایجاد یک ایمیج دیسک دارای محتوا استفاده کنید. این ابزار همچنین می‌تواند برخی از ایمیج‌های دیسک استاندارد مانند دستگاه‌های فلاپی مجازی (VFDs) را ایجاد کند. .PP همچنین می‌توانید از گزینهٔ \fI\-N\fR در \fBguestfish\fR\|(1) برای ایجاد ایمیج‌های دیسک خالی استفاده کنید. راهنمای کاربردی زیر گزینه‌های موجود را شرح می‌دهد. .PP https://rwmj.wordpress.com/2010/09/08/new\-guestfish\-n\-options\-in\-1\-5\-9/#content .PP \&\fBvirt\-builder\fR\|(1) می‌تواند سیستم‌های مهمان مینیمال ایجاد کند. .SH "حذف فایل (یا سایر عملیات سادهٔ فایلی) (Delete a file (or other simple file operations))" .IX Header "Delete a file (or other simple file operations)" از guestfish استفاده کنید. برای حذف یک فایل: .PP .Vb 1 \& guestfish \-a disk.img \-i rm /file/to/delete .Ve .PP برای touch کردن یک فایل (به‌روزرسانی تاریخچه زمانی آن یا ایجاد آن): .PP .Vb 1 \& guestfish \-a disk.img \-i touch /file/to/touch .Ve .PP برای دریافت وضعیت (stat) یک فایل. از آنجا که این یک عملیات فقط‌خواندنی است، می‌توانیم با افزودن پرچم \fI\-\-ro\fR آن را ایمن‌تر کنیم. .PP .Vb 1 \& guestfish \-\-ro \-a disk.img \-i stat /file/to/stat .Ve .PP ده‌ها مورد از این دستورها وجود دارد. \fBguestfish\fR\|(1) یا خروجی دستور \f(CW\*(C`guestfish \-h\*(C'\fR را ببینید..SH "مقایسه دو سیستم مهمان؛ مقایسه یک اسنپ‌شات با نسخه کنونی" .IX Header "مقایسه دو سیستم مهمان؛ مقایسه یک اسنپ‌شات با نسخه کنونی" از نسخه libguestfs ≥ 1.26 به بعد، از \fBvirt\-diff\fR\|(1) برای بررسی تفاوت‌های میان دو سیستم مهمان (برای نمونه اگر در ابتدا از یک منبع مشترک کلون شده باشند) یا میان دو اسنپ‌شات از یک سیستم مهمان استفاده کنید. در نسخه‌های پیشین libguestfs، از \fBvirt\-ls\fR\|(1) استفاده کنید. .SH "غیرفعال کردن یک سرویس systemd" .IX Header "غیرفعال کردن یک سرویس systemd" دستور زیر معادل \f(CW\*(C`systemctl mask ...\*(C'\fR است. برای غیرفعال کردن سرویس \f(CW\*(C`cloud\-init\*(C'\fR به‌گونه‌ای که در بوت بعدی راه‌اندازی نشود: .PP .Vb 2 \& guestfish \-a disk.img \-i \e \& ln\-sf /dev/null /etc/systemd/system/cloud\-init.service .Ve .PP برای غیرفعال کردن tmp\-on\-tmpfs: .PP .Vb 2 \& guestfish \-a disk.img \-i \e \& ln\-sf /dev/null /etc/systemd/system/tmp.mount .Ve .PP یک مشکل در دستورهای بالا این است که اگر نام سرویسی را که قصد ماسک کردن آن را دارید اشتباه وارد کنید، هیچ بازخوردی دریافت نمی‌کنید. با این حال می‌توانید از \&\fBvirt\-ls\fR\|(1) برای فهرست کردن سرویس‌های موجود systemd به این صورت استفاده کنید: .PP .Vb 1 \& virt\-ls \-a /tmp/fedora\-19.img \-R /lib/systemd/system .Ve .SH "حروف درایو از طریق FUSE" .IX Header "حروف درایو از طریق FUSE" فرض کنید یک سیستم مهمان Windows دارید و می‌خواهید حروف درایو را به عنوان نقاط اتصال FUSE (\fI/C/...\fR، \fI/D/...\fR و غیره) در دسترس قرار دهید. به جای \&\fBguestmount\fR\|(1)، از این اسکریپت Perl استفاده کنید: .PP .Vb 10 \& #!/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)\en" if $@; \& } \& $g\->mount_local ($mp); \& print "filesystem ready on $mp\en"; \& $g\->mount_local_run; \& $g\->shutdown; .Ve .PP می‌توانید از این اسکریپت به این صورت استفاده کنید: .PP .Vb 3 \& $ mkdir /tmp/mnt \& $ ./drive\-letters.pl /tmp/mnt windows7.img \& filesystem ready on /tmp/mnt .Ve .PP در یک پنجره دیگر: .PP .Vb 12 \& $ cd /tmp/mnt \& $ ls \& C D \& $ cd C \& $ ls \& Documents and Settings \& PerfLogs \& ProgramData \& Program Files \& [etc] \& $ cd ../.. \& $ guestunmount /tmp/mnt .Ve .SH "استخراج محتوای خام سیستم‌فایل از داخل یک ایمیج دیسک یا ماشین مجازی" .IX Header "استخراج محتوای خام سیستم‌فایل از داخل یک ایمیج دیسک یا ماشین مجازی" می‌توانید از دستور \f(CW\*(C`download\*(C'\fR در \fBguestfish\fR\|(1) برای استخراج محتوای خام سیستم‌فایل از هر سیستم‌فایلی درون یک ایمیج دیسک یا یک ماشین مجازی استفاده کنید (حتی موردی که رمزنگاری شده باشد یا در یک دستگاه LV یا RAID قرار داشته باشد): .PP .Vb 1 \& guestfish \-\-ro \-a disk.img run : download /dev/sda1 sda1.img \& \& guestfish \-\-ro \-d Guest run : download /dev/vg_guest/lv_root lv.img .Ve .PP برای ارسال خروجی دریافت شده به stdout، نام فایل را با نویسه \f(CW\*(C`\-\*(C'\fR جایگزین کنید: .PP .Vb 1 \& guestfish \-\-ro \-a disk.img run : download /dev/sda1 \- | gzip > sda1.gz .Ve .PP برای فهرست کردن سیستم‌فایل‌های موجود در یک ایمیج دیسک، از \fBvirt\-filesystems\fR\|(1) استفاده کنید. .PP همچنین بخش «Uploading raw filesystem content» را ببینید. .SH "ویرایش پیکربندی grub در یک ماشین مجازی" .IX Header "ویرایش پیکربندی grub در یک ماشین مجازی" می‌توانید از این دستور برای موارد زیر استفاده کنید: .IP \(bu 4 تعمیر یک ماشین مجازی که بوت نمی‌شود. .IP \(bu 4 تغییر کرنلی که برای بوت کردن ماشین مجازی استفاده می‌شود. .IP \(bu 4 تغییر گزینه‌های خط فرمان کرنل. .PP از \fBvirt\-edit\fR\|(1) برای ویرایش پیکربندی grub استفاده کنید: .PP .Vb 1 \& virt\-edit \-d BrokenGuest /boot/grub2/grub.cfg .Ve .PP یا برای کاوش و دستکاری‌های عمومی درون یک ماشین مجازی غیرقابل بوت، از \fBvirt\-rescue\fR\|(1) به این صورت استفاده کنید: .PP .Vb 1 \& virt\-rescue \-d BrokenGuest .Ve.SH "برون‌بری هر دایرکتوری از یک ماشین مجازی" .IX Header "برون‌بری هر دایرکتوری از یک ماشین مجازی" برای برون‌بری \fI/home\fR از یک ماشین مجازی (VM) به یک دایرکتوری محلی، از \&\fBvirt\-copy\-out\fR\|(1) استفاده کنید: .PP .Vb 1 \& virt\-copy\-out \-d Guest /home . .Ve .PP نکات: .IP \(bu 4 نقطه پایانی دستور اشتباه چاپی نیست. این نقطه بدین معنی است که می‌خواهیم عملیات کپی به دایرکتوری فعلی انجام شود. .IP \(bu 4 این دستور دایرکتوری‌ای به نام \f(CW\*(C`home\*(C'\fR را در دایرکتوری فعلی ایجاد می‌کند. .PP اگر مهمان یک سیستم ویندوزی باشد، می‌توانید از حروف درایو و بک‌اسلش استفاده کنید، اما باید پیشوند \f(CW\*(C`win:\*(C'\fR را در ابتدای مسیر قرار داده و آن را داخل نقل‌قول بگذارید تا در برابر تفسیر توسط شل محافظت شود، مانند زیر: .PP .Vb 1 \& virt\-copy\-out \-d WinGuest \*(Aqwin:c:\ewindows\esystem32\econfig\*(Aq . .Ve .PP برای دریافت خروجی به عنوان یک فایل تاربال فشرده، این دستور را اجرا کنید: .PP .Vb 1 \& virt\-tar\-out \-d Guest /home \- | gzip \-\-best > home.tar.gz .Ve .PP اگرچه وسوسه‌انگیز به نظر می‌رسد، اما این کار معمولاً روشی قابل اتکا برای تهیه نسخه پشتیبان از یک سیستم مهمانِ در حال اجرا نیست. مدخل مربوطه را در FAQ مشاهده کنید: http://libguestfs.org/FAQ.html#backup .SH "برون‌بری هسته خارجی و initramfs (initrd)" .IX Header "برون‌بری هسته خارجی و initramfs (initrd)" اگر یک مهمان لینوکسی فاقد بوت‌لودر باشد یا بوت‌لودر آن خراب شده باشد، معمولاً می‌توانید آن را با استفاده از یک هسته خارجی و initramfs بوت کنید. در این پیکربندی، هایپروایزر مانند یک بوت‌لودر عمل کرده، هسته را از دیسک میزبان در حافظه مهمان بارگذاری می‌کند و مستقیماً اجرای هسته را آغاز می‌نماید. .PP با این حال، ممکن است این پرسش مطرح شود که چگونه هسته مناسب متناظر با ایمیج دیسک خود را به دست آورید. از نسخه 1.24 libguestfs به بعد، \&\fBvirt\-builder\fR\|(1) می‌تواند آخرین هسته و initramfs متناظر با آن را برای شما استخراج کند: .PP .Vb 3 \& mkdir outputdir \& virt\-builder \-\-get\-kernel disk.img \-o outputdir \& ls \-lh outputdir .Ve .SH "یافتن کاربری که بیشترین فضا را مصرف می‌کند" .IX Header "یافتن کاربری که بیشترین فضا را مصرف می‌کند" این اسکریپت ساده یک مهمان لینوکسی را بررسی می‌کند تا دریابد کدام کاربر بیشترین فضا را در دایرکتوری خانگی خود مصرف کرده است: .PP .Vb 1 \& #!/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 \*(Aq\et\*(Aq \& guestfish \-\-remote du "$dir/$d"; \& done | sort \-nr \-k 2 \& \& guestfish \-\-remote exit .Ve .SH "دریافت آدرس DHCP از یک ماشین مجازی" .IX Header "دریافت آدرس DHCP از یک ماشین مجازی" پیوند زیر روش‌های گوناگون ممکن را برای به دست آوردن آخرین آدرس DHCP تخصیص‌یافته به یک ماشین مجازی توضیح می‌دهد. .PP https://rwmj.wordpress.com/2011/03/31/tip\-code\-for\-getting\-dhcp\-address\-from\-a\-virtual\-machine\-disk\-image/#content .PP در دایرکتوری نمونه‌های کد منبع libguestfs، آخرین نسخه برنامه \fIvirt\-dhcp\-address.c\fR را خواهید یافت. .SH "دریافت رشته نام محصول سیستم‌عامل" .IX Header "دریافت رشته نام محصول سیستم‌عامل" اسکریپت زیر را در فایلی با نام \fIproduct\-name.sh\fR ذخیره کنید: .PP .Vb 6 \& #!/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 .Ve .PP اسکریپت را قابل اجرا کرده و آن را روی یک مهمان مشخص اجرا کنید: .PP .Vb 2 \& $ product\-name.sh fedora\-40.img \& Fedora Linux 40 (Forty) .Ve .PP همچنین می‌توانید با استفاده از ابزار خط فرمان \f(CW\*(C`xpath\*(C'\fR یا از طریق زبان برنامه‌نویسی دلخواه خود، یک پرسمان XPath روی XML حاصل از \fBvirt\-inspector\fR\|(1) اجرا کنید: .PP .Vb 5 \& $ virt\-inspector \-a fedora\-40.img > xml \& $ xpath \-e \*(Aq//product_name\*(Aq < xml \& Found 1 nodes in stdin: \& \-\- NODE \-\- \& Fedora Linux 40 (Forty) .Ve .SH "دریافت هسته بوت پیش‌فرض برای یک ماشین مجازی لینوکس" .IX Header "دریافت هسته بوت پیش‌فرض برای یک ماشین مجازی لینوکس" پیوند زیر حاوی برنامه‌ای برای چاپ هسته بوت پیش‌فرض برای یک ماشین مجازی لینوکس است. .PP https://rwmj.wordpress.com/2010/10/30/tip\-use\-augeas\-to\-get\-the\-default\-boot\-kernel\-for\-a\-vm/#content .PP این روش از Augeas استفاده می‌کند و این تکنیک عموماً برای بسیاری از کارهای مختلف قابل استفاده است، از جمله: .IP \(bu 4 فهرست کردن حساب‌های کاربری در سیستم مهمان .IP \(bu 4 مشاهده مخازنی که سیستم برای استفاده از آن‌ها پیکربندی شده است .IP \(bu 4 سرورهای NTP که سیستم به آن‌ها متصل می‌شود .IP \(bu 4 پیام‌های راه‌اندازی در آخرین باری که سیستم بوت شده است .IP \(bu 4 فهرست کردن افرادی که اخیراً وارد سیستم شده‌اند .PP http://augeas.net.SH "سیستم‌های مهمان قفل‌شده (Hanging guests)" .IX Header "Hanging guests" روش‌های گوناگونی برای استفاده از libguestfs جهت پی بردن به این که چرا یک سیستم مهمان قفل شده یا بدون پاسخ است وجود دارد: .IP 1. 4 خواندن فایل‌های لاگ با استفاده از virt\-cat: .Sp .Vb 1 \& virt\-cat Guest /var/log/messages | less .Ve .IP 2. 4 خواندن Windows Event Log (تنها در Windows Vista یا جدیدتر): .Sp https://rwmj.wordpress.com/2011/04/17/decoding\-the\-windows\-event\-log\-using\-guestfish/#content .IP 3. 4 یافتن فایل‌هایی که اخیراً در یک سیستم مهمان به‌روزرسانی شده‌اند: .Sp https://rwmj.wordpress.com/2012/02/27/using\-libguestfs\-to\-find\-out\-why\-a\-windows\-guest\-was\-hanging/#content .Sp این کار ممکن است سرنخی از این که چه برنامه‌ای در حال اجراست به شما بدهد. .SH "دامپ هگزادسیمال سکتورها از مهمان (Hex\-dumping sectors from the guest)" .IX Header "Hex-dumping sectors from the guest" تهیه دامپ هگزادسیمال از پارتیشن بوت (Master Boot Record / سکتور نخست): .PP .Vb 2 \& guestfish \-\-ro \-a disk.img run : pread\-device /dev/sda 0x200 0 | \& hexdump \-C .Ve .PP (\f(CW0x200\fR = 512 بایت که اندازه سکتورهای سنتی رایانه‌های شخصی است) .PP برای تهیه دامپ هگزادسیمال از پارتیشن Nام، در دستور زیر یک عدد را جایگزین \f(CW\*(C`N\*(C'\fR کنید: .PP .Vb 3 \& guestfish \-\-ro \-a disk.img \e \& run : pread\-device /dev/sda 0x200 $((N*0x200)) | \& hexdump \-C .Ve .SH "ویرایش هگزادسیمال سکتورها در مهمان (Hex\-editing sectors in the guest)" .IX Header "Hex-editing sectors in the guest" ویرایش هگزادسیمال پارتیشن بوت (Master Boot Record / سکتور نخست): .PP .Vb 1 \& guestfish \-\-rw \-a disk.img run : hexedit /dev/sda 0x200 .Ve .SH "نصب بسته‌ها (RPMها، بسته‌های دبیان) در مهمان (Install packages (RPMs, Debian packages) in a guest)" .IX Header "Install packages (RPMs, Debian packages) in a guest" از نسخه 1.26 نرم‌افزار libguestfs، دستورهای \fBvirt\-builder\fR\|(1)، \fBvirt\-customize\fR\|(1) و \&\fBvirt\-sysprep\fR\|(1) دارای گزینه \fI\-\-install\fR برای نصب بسته‌ها در سیستم‌های مهمان لینوکس هستند. (اگر یک سیستم مهمان از قبل موجود دارید از virt\-customize استفاده کنید، یا اگر می‌خواهید یک سیستم مهمان را از ابتدا بسازید از virt\-builder استفاده نمایید). .PP برای نمونه: .PP .Vb 1 \& virt\-builder fedora\-20 \-\-install emacs .Ve .SH "نصب بسته‌ها از یک مخزن جایگزین (Install packages from an alternate repository)" .IX Header "Install packages from an alternate repository" از نسخه 1.26 نرم‌افزار libguestfs، می‌توانید از گزینه \fI\-\-edit\fR در \fBvirt\-builder\fR\|(1)، \&\fBvirt\-customize\fR\|(1) یا \fBvirt\-sysprep\fR\|(1) برای ویرایش فراداده‌های مخزن پیش از نصب بسته‌ها استفاده کنید. .PP به‌عنوان مثال، این دستور بسته‌ها را از مخزن updates\-testing در Fedora نصب می‌کند: .PP .Vb 4 \& virt\-builder fedora\-20 \e \& \-\-edit \*(Aq/etc/yum.repos.d/fedora\-updates\-testing.repo: \& s/enabled=0/enabled=1/\*(Aq \e \& \-\-install emacs .Ve .SH "نصب بارگذار بوت SYSLINUX در مهمان (Install SYSLINUX bootloader in a guest)" .IX Header "Install SYSLINUX bootloader in a guest" ‏SYSLINUX یک بارگذار بوت کوچک با پیکربندی آسان برای سیستم‌های مهمان لینوکس و ویندوز است. اگر سیستم مهمان شما قابل راه‌اندازی (bootable) نیست، می‌توانید بارگذار بوت SYSLINUX را با استفاده از دستورهای guestfish شامل \f(CW\*(C`syslinux\*(C'\fR (برای مهمان‌های مبتنی بر FAT) یا \f(CW\*(C`extlinux\*(C'\fR (برای مهمان‌های مبتنی بر ext2/3/4 و btrfs) نصب کنید. .PP این راهنما یک سیستم مهمان لینوکس را فرض می‌کند که در آن \fI/dev/sda1\fR همان \fI/boot\fR، \&\fI/boot/vmlinuz\fR هسته سیستم مهمان، و \fI/dev/sda3\fR پارتیشن ریشه است. برای یک سیستم مهمان ویندوز به یک پارتیشن بوت با فرمت FAT نیاز دارید و باید در عوض از دستور \f(CW\*(C`syslinux\*(C'\fR استفاده کنید. .PP یک فایل پیکربندی \fIsyslinux.cfg\fR بسازید. شما باید مستندات SYSLINUX را در http://www.syslinux.org بررسی کنید، اما ساختار آن می‌تواند چیزی شبیه به این باشد: .PP .Vb 6 \& DEFAULT linux \& LABEL linux \& SAY Booting the kernel \& KERNEL vmlinuz \& INITRD initrd \& APPEND ro root=/dev/sda3 .Ve .PP مکان Master Boot Record مربوط به syslinux را مشخص کنید (فایلی با نامی شبیه به \&\fI/usr/share/syslinux/mbr.bin\fR). .PP .Vb 10 \& guestfish \-a disk.img \-i \& # Upload the master boot record and configuration file: \& > upload ..../mbr.bin /boot/mbr.bin \& > upload ..../syslinux.cfg /boot/syslinux.cfg \& # Put the MBR into the boot sector: \& > copy\-file\-to\-device /boot/mbr.bin /dev/sda size:440 \& # Install syslinux on the first partition: \& > extlinux /boot \& # Set the first partition as bootable: \& > part\-set\-bootable /dev/sda 1 true .Ve .PP همچنین ببینید: http://rwmj.wordpress.com/2013/04/04/new\-in\-libguestfs\-use\-syslinux\-or\-extlinux\-to\-make\-bootable\-guests/#content .SH "فهرست کردن برنامه‌های نصب‌شده در ماشین مجازی (List applications installed in a VM)" .IX Header "List applications installed in a VM" دستورهای زیر را در یک فایل به نام \fIlist\-apps.sh\fR ذخیره کنید: .PP .Vb 6 \& #!/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 .Ve .PP فایل را قابل اجرا کنید؛ پس از آن می‌توانید آن را روی هر ماشین مجازی نام‌گذاری‌شده‌ای اجرا کنید: .PP .Vb 10 \& # 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:\eProgram Files\eMozilla 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:\eProgram Files\eVideoLAN\eVLC \& app_trans_path: \& app_publisher: VideoLAN \& app_url: http://www.videolan.org \& app_source_package: \& app_summary: \& app_description: \& } .Ve .PP اگر می‌خواهید اسکریپت را بر روی ایمیج‌های دیسک (به جای ماشین‌های مجازی libvirt) اجرا کنید، \f(CW\*(C`\-d "$1"\*(C'\fR را به \f(CW\*(C`\-a "$1"\*(C'\fR تغییر دهید. همچنین ببینید: \&\fBvirt\-inspector\fR\|(1)..SH "فهرست کردن فایل‌ها و دایرکتوری‌ها در یک VM" .IX Header "List files and directories in a VM" از \fBvirt\-ls\fR\|(1) استفاده کنید. .SH "فهرست کردن سرویس‌ها در یک VM ویندوز" .IX Header "List services in a Windows VM" پیوند زیر حاوی اسکریپتی است که می‌توان از آن برای استخراج فهرست سرویس‌های یک VM ویندوز و اینکه آیا این سرویس‌ها هنگام بوت اجرا می‌شوند یا بر اساس تقاضا بارگذاری می‌شوند، استفاده کرد. .PP https://rwmj.wordpress.com/2010/12/10/tip\-list\-services\-in\-a\-windows\-guest/#content .SH "کم‌پشت کردن ایمیج دیسک (sparse)" .IX Header "Make a disk image sparse" از \fBvirt\-sparsify\fR\|(1) استفاده کنید. .SH "نظارت بر مصرف دیسک در گذر زمان" .IX Header "Monitor disk usage over time" می‌توانید از \fBvirt\-df\fR\|(1) برای نظارت بر مصرف دیسک ماشین‌های مهمان خود در گذر زمان استفاده کنید. پیوند زیر حاوی یک راهنما است. .PP http://web.archive.org/web/20130214073726/http://virt\-tools.org/learning/advanced\-virt\-df .SH "خواندن Windows Event Log از ویندوز Vista (یا جدیدتر)" .IX Header "Reading the Windows Event Log from Windows Vista (or later)" \&\fBguestfish\fR\|(1) به همراه ابزارهای شرح‌داده‌شده در پیوند زیر می‌تواند برای خواندن Windows Event Log از هر ماشین مجازی که Windows Vista یا نسخه‌های جدیدتر را اجرا می‌کند، استفاده شود. .PP https://rwmj.wordpress.com/2011/04/17/decoding\-the\-windows\-event\-log\-using\-guestfish/#content .SH "حذف گذرواژه ریشه (Linux)" .IX Header "Remove root password (Linux)" با استفاده از گزینه \fI\-e\fR در \fBvirt\-edit\fR\|(1) می‌توانید جایگزینی‌های ساده‌ای را روی فایل‌ها انجام دهید. یک کاربرد آن، حذف گذرواژه root از یک ماشین مهمان لینوکس است: .PP .Vb 1 \& virt\-edit \-d domname /etc/passwd \-e \*(Aqs/^root:.*?:/root::/\*(Aq \& \& virt\-edit \-a disk.img /etc/passwd \-e \*(Aqs/^root:.*?:/root::/\*(Aq .Ve .SH "حذف گذرواژه Administrator (ویندوز)" .IX Header "Remove Administrator password (Windows)" پیوند زیر حاوی روشی برای حذف گذرواژه Administrator از یک VM ویندوز است، یا دقیق‌تر بگوییم، در ورود بعدی یک خط فرمان (command prompt) در اختیارتان می‌گذارد که می‌توانید از آن برای دور زدن هرگونه تدابیر امنیتی استفاده کنید: .PP https://mdbooth.wordpress.com/2010/10/18/resetting\-a\-windows\-guests\-administrator\-password\-with\-guestfish .SH "آماده‌سازی با Sysprep در یک ماشین مجازی (Windows)" .IX Header "Sysprepping a virtual machine (Windows)" انجام یک «sysprep» صرفاً با استفاده از libguestfs امکان‌پذیر است، هرچند چندان سرراست نیست. در حال حاضر کدی در پروژه Aeolus Oz وجود دارد که این کار را (با استفاده از libguestfs) انجام می‌دهد. این احتمال وجود دارد که در آینده این قابلیت را به \&\fBvirt\-sysprep\fR\|(1) اضافه کنیم. .PP https://github.com/clalancette/oz https://www.redhat.com/archives/virt\-tools\-list/2011\-May/msg00019.html .SH "باز کردن یک دیسک زنده (Live CD)" .IX Header "Unpack a live CD" دیسک‌های زنده (Live CD) لینوکس اغلب حاوی چندین لایه از ایمیج‌های دیسک هستند که مانند عروسک‌های ماتریوشکای روسی تو در تو قرار گرفته‌اند. می‌توانید از \&\fBguestfish\fR\|(1) برای کاوش در این لایه‌های چندگانه استفاده کنید، همان‌طور که در راهنمای زیر شرح داده شده است. .PP https://rwmj.wordpress.com/2009/07/15/unpack\-the\-russian\-doll\-of\-a\-f11\-live\-cd/#content .SH "بارگذاری و دریافت فایل‌ها" .IX Header "Uploading and downloading files" پیوند زیر حاوی نکات عمومی درباره بارگذاری (رونوشت به داخل / copying in) و بارگیری (رونوشت به خارج / copying out) فایل‌ها از ماشین‌های مجازی است. .PP https://rwmj.wordpress.com/2010/12/02/tip\-uploading\-and\-downloading/#content .SH "بارگذاری محتوای خام سیستم‌فایل" .IX Header "Uploading raw filesystem content" می‌توانید از \&\fBguestfish\fR\|(1) برای بارگذاری کل سیستم‌فایل‌ها در یک VM استفاده کنید، حتی درون سیستم‌فایلی که رمزگذاری شده یا درون یک دستگاه LV یا RAID جای گرفته است: .PP .Vb 1 \& guestfish \-\-rw \-a disk.img run : upload sda1.img /dev/sda1 \& \& guestfish \-\-rw \-d Guest run : upload lv.img /dev/vg_guest/lv_root .Ve .PP یک مشکل رایج این است که اندازه سیستم‌فایل برای مقصد مناسب نیست. اگر بیش از اندازه بزرگ باشد، کار چندانی از دست libguestfs برنمی‌آید \- باید سیستم‌فایل را به گونه‌ای دیگر آماده کنید. اما اگر سیستم‌فایل نیاز به گسترش در مقصد داشته باشد، می‌توانید از guestfish برای تغییر اندازه آن به اندازه مناسب استفاده کنید: .PP .Vb 3 \& guestfish \-\-rw \-d Guest run : \e \& upload lv.img /dev/vg_guest/lv_root : \e \& resize2fs /dev/vg_guest/lv_root .Ve .PP (یا در صورتی که سیستم‌فایل NTFS است از \f(CW\*(C`ntfsresize\*(C'\fR استفاده کنید). .SH "استفاده از ابزارهای libguestfs روی ماشین‌های مهمان VMware ESX" .IX Header "Use libguestfs tools on VMware ESX guests" پیوند زیر نحوه استفاده از libguestfs، \&\fBguestfish\fR\|(1) و ابزارهای virt را روی ماشین‌های مهمان VMware ESX، با به اشتراک‌گذاری اولیه VMware VMFS از طریق sshfs توضیح می‌دهد. .PP https://rwmj.wordpress.com/2011/05/10/tip\-use\-libguestfs\-on\-vmware\-esx\-guests/#content .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fBguestfs\fR\|(3), \&\fBguestfish\fR\|(1), \&\fBguestfs\-examples\fR\|(3), \&\fBguestfs\-erlang\fR\|(3), \&\fBguestfs\-golang\fR\|(3), \&\fBguestfs\-java\fR\|(3), \&\fBguestfs\-lua\fR\|(3), \&\fBguestfs\-ocaml\fR\|(3), \&\fBguestfs\-perl\fR\|(3), \&\fBguestfs\-python\fR\|(3), \&\fBguestfs\-ruby\fR\|(3), http://libguestfs.org. .SH "نویسندگان (AUTHORS)" .IX Header "AUTHORS" Richard W.M. Jones (\f(CW\*(C`rjones at redhat dot com\*(C'\fR) .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" Copyright (C) 2009\-2025 Red Hat Inc. .SH "مجوز (LICENSE)" .IX Header "LICENSE" این صفحه راهنما شامل مثال‌هایی است که امیدواریم در برنامه‌هایتان از آن‌ها استفاده کنید. این مثال‌ها را می‌توان برای هر مقصودی، آزادانه و بدون هیچ محدودیتی کپی، دستکاری و توزیع کرد..SH "گزارش باگ‌ها (BUGS)" .IX Header "BUGS" برای دریافت فهرستی از باگ‌های libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools .PP برای گزارش یک باگ جدید در libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools .PP هنگام گزارش باگ، لطفاً موارد زیر را ارائه دهید: .IP \(bu 4 نسخه libguestfs. .IP \(bu 4 جایی که libguestfs را از آن تهیه کرده‌اید (برای نمونه: کدام توزیع لینوکس، کامپایل‌شده از سورس و غیره). .IP \(bu 4 باگ را به‌دقت شرح داده و روشی برای بازتولید آن ارائه دهید. .IP \(bu 4 دستور \fBlibguestfs\-test\-tool\fR\|(1) را اجرا کرده و خروجی \fBکامل و دست‌نخورده\fR آن را در گزارش باگ قرار دهید.