guestfs-performance(1) Virtualization Support guestfs-performance(1)

guestfs-performance - مهندسی و بهینه‌سازی libguestfs برای دستیابی به بالاترین کارایی

این صفحه نحوه دستیابی به بیشترین کارایی را از libguestfs، به‌ویژه زمانی که قصد دارید از libguestfs برای کار با هزاران ماشین مجازی یا ایمیج دیسک استفاده کنید، مستند می‌کند.

سه زمینه اصلی پوشش داده شده است. Libguestfs یک اپلاینس (یک توزیع کوچک لینوکس) را درون qemu/KVM اجرا می‌کند. دو بخش نخست عبارتند از: به حداقل رساندن زمان لازم برای راه‌اندازی این اپلاینس، و تعداد دفعاتی که اپلاینس باید راه‌اندازی شود. بخش سوم، کوتاه‌تر کردن زمان لازم برای بازرسی (inspection) ماشین‌های مجازی است.

پیش از اعمال تغییرات در نحوه استفاده از libguestfs، اندازه‌گیری‌های پایه را انجام دهید.

روی یک ماشین بدون بار، مدت‌زمان لازم برای راه‌اندازی اپلاینس را اندازه‌گیری کنید:

time guestfish -a /dev/null run

این دستور را چندین بار متوالی اجرا کرده و چند اجرای اول را نادیده بگیرید تا یک وضعیت معمولی «کش گرم» (hot cache) را اندازه‌گیری نمایید.

نکته جانبی برای توسعه‌دهندگان: برنامه‌ای به نام boot-benchmark در https://github.com/libguestfs/libguestfs-analysis-tools وجود دارد که همین کار را انجام می‌دهد، اما چندین اجرا انجام داده و میانگین و انحراف معیار را چاپ می‌کند.

توضیحات

دستور guestfish بالا، اپلاینس libguestfs را روی یک دیسک خالی (null) راه‌اندازی کرده و بلافاصله آن را خاموش می‌کند. نخستین باری که این دستور را اجرا می‌کنید، یک اپلاینس ایجاد کرده و آن را کش می‌کند (معمولاً در مسیر /var/tmp/.guestfs-*). اجراهای بعدی باید از اپلاینس کش‌شده مجدداً استفاده کنند.

نتایج مورد انتظار

باید انتظار زمان‌های زیر ۶ ثانیه را داشته باشید. اگر زمان‌هایی که در یک ماشین بدون بار مشاهده می‌کنید بیشتر از این مقدار است، به بخش «عیب‌یابی کارایی ضعیف» در ادامه مراجعه کنید.

برای این آزمایش، به یک ماشین بدون بار و دست‌کم یک سیستم مهمان واقعی یا ایمیج دیسک نیاز خواهید داشت. اگر قصد دارید از libguestfs تنها برای مهمان‌های X استفاده کنید (مثلاً X = ویندوز)، استفاده از یک مهمان X در اینجا مناسب‌ترین گزینه خواهد بود. اگر قصد دارید libguestfs را روی ترکیبی از مهمان‌ها اجرا کنید، برای آزمایش در اینجا از ترکیبی از مهمان‌ها استفاده نمایید.

مدت‌زمان لازم برای انجام بازرسی و سوار کردن دیسک‌های مهمان را اندازه بگیرید. اگر از ایمیج‌های دیسک استفاده می‌کنید از دستور نخست، و اگر از libvirt استفاده می‌کنید از دستور دوم بهره بگیرید:

time guestfish --ro -a disk.img -i exit
time guestfish --ro -d GuestName -i exit

این دستور را چندین بار متوالی اجرا کرده و چند اجرای اول را نادیده بگیرید تا یک وضعیت معمولی «کش گرم» را اندازه‌گیری کنید.

توضیحات

این دستور، اپلاینس libguestfs را روی ایمیج دیسک یا مهمان libvirt مشخص‌شده راه‌اندازی می‌کند، بازرسی libguestfs را روی آن انجام می‌دهد (بخش "INSPECTION" در guestfs(3) را ببینید)، دیسک‌های مهمان را سوار می‌کند، سپس تمام این نتایج را دور ریخته و خاموش می‌شود.

نخستین باری که این دستور را اجرا می‌کنید، یک اپلاینس ساخته و آن را کش خواهد کرد (معمولاً در مسیر /var/tmp/.guestfs-*). اجراهای بعدی باید مجدداً از اپلاینس کش‌شده استفاده کنند.

نتایج مورد انتظار

باید انتظار زمان‌هایی را داشته باشید که حداکثر ۵ ثانیه بیشتر از مقدار اندازه‌گیری‌شده در نخستین آزمون پایه بالا باشند. (برای مثال، اگر اولین آزمون پایه در ۵ ثانیه اجرا شد، این آزمون باید در زمان ≤ ۱۰ ثانیه اجرا شود).

نخستین باری که از libguestfs استفاده می‌کنید، یک اپلاینس را ساخته و کش می‌کند. این معمولاً در مسیر /var/tmp/.guestfs-* است، مگر اینکه $TMPDIR یا $LIBGUESTFS_CACHEDIR را تنظیم کرده باشید که در این صورت زیر آن دایرکتوری موقت قرار خواهد گرفت.

برای اطلاعات بیشتر درباره نحوه ساخت اپلاینس، بخش "SUPERMIN APPLIANCES" در supermin(1) را ببینید.

هر بار که libguestfs اجرا می‌شود، بررسی می‌کند که هیچ‌یک از فایل‌های میزبان مورد استفاده اپلاینس تغییر نکرده باشند. اگر تغییری رخ داده باشد، اپلاینس مجدداً ساخته می‌شود. این حالت معمولاً زمانی رخ می‌دهد که یک بسته روی میزبان نصب یا به‌روزرسانی شود (مثلاً با استفاده از برنامه‌هایی مانند "yum" یا "apt-get"). دلیل بازسازی اپلاینس، امنیت است: برنامه جدیدی که نصب شده ممکن است حاوی یک وصله امنیتی باشد، بنابراین می‌خواهیم برنامه اصلاح‌شده به‌صورت خودکار در اپلاینس گنجانده شود.

پیامدهای این موضوع بر کارایی به شرح زیر است:

  • فرآیند ساخت (یا بازسازی) اپلاینس کش‌شده کند است، و می‌توانید با استفاده از یک اپلاینس ثابت از وقوع آن جلوگیری کنید (در ادامه ببینید).
  • در صورت عدم استفاده از یک اپلاینس ثابت، آگاه باشید که به‌روزرسانی نرم‌افزار روی میزبان موجب یک‌بار بازسازی اپلاینس خواهد شد.
  • دایرکتوری /var/tmp (یا $TMPDIR و $LIBGUESTFS_CACHEDIR) باید روی یک دیسک سریع قرار داشته باشد و فضای کافی برای اپلاینس داشته باشد.

برای کنترل کامل بر زمان ساخت اپلاینس، می‌توانید یک اپلاینس ثابت بسازید. این اپلاینس باید روی یک دیسک محلی سریع ذخیره شود.

برای ساخت اپلاینس، دستور زیر را اجرا کنید:

libguestfs-make-fixed-appliance <directory>

که در آن "<directory>" با نام دایرکتوری محل ذخیره اپلاینس جایگزین می‌شود (معمولاً یک زیردایرکتوری را مشخص می‌کنید، برای مثال: /usr/local/lib/guestfs/appliance یا /dev/shm/appliance).

سپس $LIBGUESTFS_PATH را مقداردهی کنید (و مطمئن شوید این متغیر محیطی در برنامه libguestfs شما تنظیم شده است)، یا برنامه خود را به‌گونه‌ای تغییر دهید که "guestfs_set_path" را فراخوانی کند. برای مثال:

export LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

اکنون می‌توانید برنامه‌های libguestfs، ابزارهای virt، guestfish و غیره را طبق روال معمول اجرا کنید. این برنامه‌ها از اپلاینس ثابت شما استفاده خواهند کرد و هرگز اپلاینس اختصاصی خود را نمی‌سازند، بازسازی نمی‌کنند یا کش نخواهند کرد.

(برای اطلاعات دقیق در این زمینه، ببینید: libguestfs-make-fixed-appliance(1)).

در آزمایش‌های ما مشخص نشد که استفاده از یک اپلاینس ثابت برتری کارایی قابل‌اندازه‌گیری به همراه داشته باشد، حتی زمانی که اپلاینس در حافظه (یعنی روی /dev/shm) قرار داشت. با این حال دو نکته شایان توجه وجود دارد:

1.
استفاده از یک اپلاینس ثابت مانع از آن می‌شود که libguestfs اپلاینس را بازسازی کند؛ به این معنی که libguestfs زمان‌های راه‌اندازی قابل‌پیش‌بینی‌تری خواهد داشت.
2.
اپلاینس در صورت نیاز (on demand) بارگذاری می‌شود. یک آزمایش ساده مانند:
time guestfish -a /dev/null run

بخش زیادی از اپلاینس را بارگذاری نمی‌کند. یک برنامه واقعی libguestfs با استفاده از فراخوانی‌های پیچیده API، بخش بسیار بیشتری از اپلاینس را بر حسب تقاضا بارگذاری خواهد کرد. قابلیت ذخیره اپلاینس در یک مکان مشخص، کارایی را قابل‌پیش‌بینی‌تر می‌سازد.

موثرترین روش، هرچند نه همیشه ساده‌ترین، برای دستیابی به کارایی بالا این است که اطمینان حاصل کنید اپلاینس حداقل دفعات ممکن راه‌اندازی می‌شود. این کار احتمالاً مستلزم تغییر برنامه libguestfs شما خواهد بود.

سعی کنید "guestfs_launch" را حداکثر یک بار به ازای هر ماشین مجازی یا ایمیج دیسک هدف فراخوانی کنید.

به‌جای استفاده از نمونه‌های مجزای guestfish(1) برای اعمال مجموعه‌ای از تغییرات روی یک مهمان، از یک نمونه واحد guestfish استفاده کنید و/یا گزینه --listen دستور guestfish را به کار بگیرید.

نوشتن برنامه خود به صورت یک دیمن (daemon) را در نظر بگیرید که حین انجام مجموعه‌ای از تغییرات، مهمان را باز نگه می‌دارد. یا تمامی عملیاتی را که می‌خواهید انجام دهید پیش از باز کردن مهمان آماده‌سازی و مرتب (marshal) کنید.

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

1.
افزودن چندین مهمان به یک اپلاینس یک مشکل امنیتی است، زیرا ممکن است به یک مهمان اجازه دهد در دیسک‌های مهمان دیگر مداخله کند. این کار را تنها زمانی انجام دهید که به همه مهمان‌ها اعتماد دارید، یا می‌توانید مهمان‌ها را بر اساس سطح اعتماد گروه‌بندی کنید.
2.
یک محدودیت سخت‌افزاری/سیستمی (hard limit) برای تعداد دیسک‌هایی که می‌توانید به یک اپلاینس واحد اضافه کنید وجود دارد. برای به دست آوردن این حد، "guestfs_max_disks" در guestfs(3) را فراخوانی کنید. برای اطلاعات بیشتر، بخش "LIMITS" در guestfs(3) را ببینید.
3.
استفاده از libguestfs به این شیوه پیچیده است. دیسک‌ها ممکن است تداخل‌های غیرمنتظره‌ای داشته باشند: برای نمونه، اگر دو مهمان از یک UUID یکسان برای یک سیستم‌فایل استفاده کنند (به این دلیل که کلون/شبیه‌سازی شده‌اند)، یا گروه‌های حجمی (volume groups) با نام یکسان داشته باشند (اما "guestfs_lvm_set_filter" را ببینید).

دستور virt-df(1) به‌طور پیش‌فرض چندین دیسک را اضافه می‌کند، بنابراین کد منبع این برنامه می‌تواند نقطه شروع مناسبی باشد.

توصیه اصلی کاملاً روشن است: بازرسی (که عملیاتی سنگین است) را انجام ندهید مگر آنکه واقعاً به نتایج آن نیاز داشته باشید.

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

برخی دیسک‌ها اصلاً نیازی به بازرسی ندارند: برای نمونه، اگر در حال ساخت یک ایمیج دیسک هستید، یا اگر ایمیج دیسک یک ماشین مجازی نیست، یا اگر ایمیج دیسک ساختار مشخص و شناخته‌شده‌ای دارد.

حتی زمانی که بازرسی اولیه ("guestfs_inspect_os") لازم است، می‌توان از عملیات بازرسی کمکی اجتناب کرد:

  • سوار کردن دیسک‌ها تنها برای دریافت اطلاعات بیشتر درباره سیستم‌فایل ضروری است.
  • فهرست کردن برنامه‌ها ("guestfs_inspect_list_applications") در لینوکس عملیاتی سنگین است، اما در ویندوز تقریباً بدون هزینه است.
  • تولید آیکون مهمان ("guestfs_inspect_get_icon") در لینوکس سبک است اما در ویندوز عملیاتی سنگین به شمار می‌آید.

اپلاینس‌های Libguestfs بیشتر محدود به ورودی/خروجی (I/O bound) هستند و می‌توانید چندین اپلاینس را به‌صورت موازی راه‌اندازی کنید. به شرط وجود حافظه آزاد کافی، تفاوت ناچیزی میان راه‌اندازی ۱ اپلاینس در برابر N اپلاینس به‌صورت موازی وجود خواهد داشت.

روی یک لپ‌تاپ ۲ هسته‌ای (۴ رشته‌ای) با ۱۶ گیگابایت رم، با استفاده از اسکریپت آزمایشی پرل زیر (که البته چندان واقع‌گرایانه نیست)، نمودار زیر مقیاس‌پذیری عالی را هنگام اجرای موازی بین ۱ تا ۲۰ اپلاینس نشان می‌دهد:

 12 ++---+----+----+----+-----+----+----+----+----+---++
    +    +    +    +    +     +    +    +    +    +    *
    |                                                  |
    |                                               *  |
 11 ++                                                ++
    |                                                  |
    |                                                  |
    |                                          *  *    |
 10 ++                                                ++
    |                                        *         |
    |                                                  |
s   |                                                  |
  9 ++                                                ++
e   |                                                  |
    |                                     *            |
c   |                                                  |
  8 ++                                  *             ++
o   |                                *                 |
    |                                                  |
n 7 ++                                                ++
    |                              *                   |
d   |                           *                      |
    |                                                  |
s 6 ++                                                ++
    |                      *  *                        |
    |                   *                              |
    |                                                  |
  5 ++                                                ++
    |                                                  |
    |                 *                                |
    |            * *                                   |
  4 ++                                                ++
    |                                                  |
    |                                                  |
    +    *  * *    +    +     +    +    +    +    +    +
  3 ++-*--+----+----+----+-----+----+----+----+----+---++
    0    2    4    6    8     10   12   14   16   18   20
              number of parallel appliances

امکان اجرای بسیار بیشتر از ۲۰ اپلاینس به‌صورت موازی وجود دارد، اما اگر از بک‌اند libvirt استفاده می‌کنید، باید توجه داشته باشید که libvirt به‌طور پیش‌فرض تعداد اتصال‌های کلاینت را به ۲۰ محدود می‌کند.

اسکریپت ساده پرل زیر برای جمع‌آوری داده‌های نمودار بالا به کار رفته است، اما اطلاعات بسیار بیشتری در این زمینه، از جمله اسکریپت‌های آزمایشی پیشرفته‌تر و نمودارها، در پست‌های وبلاگ زیر در دسترس است:

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-1

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-2

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-3

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-4

#!/usr/bin/env perl
use strict;
use threads;
use warnings;
use Sys::Guestfs;
use Time::HiRes qw(time);
sub test {
    my $g = Sys::Guestfs->new;
    $g->add_drive_ro ("/dev/null");
    $g->launch ();
    # You could add some work for libguestfs to do here.
    $g->close ();
}
# Get everything into cache.
test (); test (); test ();
for my $nr_threads (1..20) {
    my $start_t = time ();
    my @threads;
    foreach (1..$nr_threads) {
        push @threads, threads->create (\&test)
    }
    foreach (@threads) {
        $_->join ();
        if (my $err = $_->error ()) {
            die "launch failed with $nr_threads threads: $err"
        }
    }
    my $end_t = time ();
    printf ("%d %.2f\n", $nr_threads, $end_t - $start_t);
}

از /proc/cpuinfo برای اطمینان از در دسترس بودن مجازی‌سازی سخت‌افزاری استفاده کنید. توجه داشته باشید که ممکن است لازم باشد آن را در تنظیمات BIOS خود فعال نمایید.

مجازی‌سازی سخت‌افزاری معمولاً در داخل ماشین‌های مجازی در دسترس نیست، و libguestfs درون یک ماشین مجازی دیگر به هر حال کند اجرا خواهد شد. بر اساس تجربه ما، مجازی‌سازی تو در تو (Nested virtualization) به خوبی کار نمی‌کند و مسلماً جایگزینی برای اجرای libguestfs روی سخت‌افزار واقعی (baremetal) نیست.

اطمینان حاصل کنید که KVM فعال است و برای کاربری که libguestfs را اجرا می‌کند در دسترس قرار دارد. تنظیم دسترسی‌های 0666 روی /dev/kvm باید ایمن باشد و بیشتر توزیع‌ها امروزه این کار را انجام می‌دهند.

از پردازنده‌هایی که فاقد مجازی‌سازی سخت‌افزاری هستند، و برخی پردازنده‌ها که بسیار کند هستند (AMD Geode نمونه بارز آن است) اجتناب کنید.

در ،Xen دامنه dom0 یک ماشین مجازی است، بنابراین مجازی‌سازی سخت‌افزاری در آن در دسترس نیست.

در طول چرخه توسعه ،libguestfs 1.33 ما زمان زیادی را صرف تمرکز روی کارایی بوت کردیم و وصله‌هایی را به ،libguestfs qemu و لینوکس اضافه کردیم که در برخی موارد می‌توانند زمان بوت را به کمتر از ۱ ثانیه کاهش دهند. بنابراین، با مهاجرت به نسخه‌هایی از libguestfs یا qemu که در عنوان ذکر شد، ممکن است به کارایی بسیار بهتری دست یابید.

در نشانی https://github.com/libguestfs/libguestfs-analysis-tools برنامه‌ای به نام "boot-analysis" وجود دارد. این برنامه می‌تواند تفکیک بسیار دقیقی از مراحل بوت (مانند ،qemu ،BIOS کرنل، اسکریپت init مربوط به libguestfs) تولید کند و مدت‌زمان لازم برای انجام هر مرحله را بسنجد.

از دستور ts(1) (از مجموعه moreutils) برای نمایش زمان‌بندی دقیق استفاده کنید:

$ guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: launch: program=guestfish
0.000134 libguestfs: launch: version=1.29.31fedora=23,release=2.fc23,libvirt
0.000044 libguestfs: launch: backend registered: unix
0.000035 libguestfs: launch: backend registered: uml
0.000035 libguestfs: launch: backend registered: libvirt
0.000032 libguestfs: launch: backend registered: direct
0.000030 libguestfs: launch: backend=libvirt
0.000031 libguestfs: launch: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: launch: umask=0002
0.000031 libguestfs: launch: euid=1000
0.000030 libguestfs: libvirt version = 1002012 (1.2.12)
[etc]

برچسب‌های زمانی بر حسب ثانیه هستند (به‌صورت افزایشی از خط قبلی).

می‌توانید با استفاده از gdb به BIOS/kernel اپلاینس متصل شوید. اگر به این کار تسلط دارید، این روش می‌تواند راهکار مفیدی برای عیب‌یابی پسرفت‌های بوت باشد.

نخست، باید qemu را طوری تنظیم کنید که با گزینه‌های "-S" و "-s" اجرا شود. این گزینه‌ها موجب مکث qemu هنگام بوت شده و به شما امکان اتصال دیباگر را می‌دهند. برای اطلاعات بیشتر، qemu(1) را بخوانید. Libguestfs دستور qemu را چندین بار فراخوانی می‌کند (جهت بررسی خروجی راهنما و موارد دیگر) و شما تنها می‌خواهید آخرین فراخوانی qemu از این گزینه‌ها استفاده کند؛ بنابراین از یک اسکریپت پوششی (wrapper) برای qemu مانند نمونه زیر استفاده کنید:

#!/bin/bash -
# Set this to point to the real qemu binary.
qemu=/usr/bin/qemu-kvm
if [ "$1" != "-global" ]; then
    # Scanning help output etc.
    exec $qemu "$@"
else
    # Really running qemu.
    exec $qemu -S -s "$@"
fi

اکنون guestfish یا ابزار دیگر libguestfs را به همراه اسکریپت پوششی qemu اجرا کنید (برای درک سازوکار این بخش، "QEMU WRAPPERS" در guestfs(3) را مطالعه نمایید):

LIBGUESTFS_HV=/path/to/qemu-wrapper guestfish -a /dev/null -v run

این دستور باید درست پس از راه‌اندازی qemu مکث کند. در پنجره‌ای دیگر، با استفاده از gdb به qemu متصل شوید:

$ gdb
(gdb) set architecture i8086
The target architecture is assumed to be i8086
(gdb) target remote :1234
Remote debugging using :1234
0x0000fff0 in ?? ()
(gdb) cont

در این مرحله می‌توانید تکنیک‌های استاندارد gdb مانند زدن "^C" برای وقفه در بوت، "bt" برای دریافت ردگیری پشته (stack trace)، تنظیم نقاط شکست (breakpoints) و غیره را به کار ببرید. توجه داشته باشید پس از گذر از BIOS و ورود به کرنل لینوکس، باید معماری را دوباره به ۳۲ یا ۶۴ بیتی برگردانید.

گاهی اوقات پسرفت‌های کارایی در سایر برنامه‌ها (مانند qemu یا کرنل) رخ می‌دهد که مشکلاتی را برای libguestfs به وجود می‌آورند.

در نشانی https://github.com/libguestfs/libguestfs-analysis-tools اسکریپتی به نام boot-benchmark/boot-benchmark-range.pl وجود دارد که می‌تواند برای ارزیابی کارایی (benchmark) libguestfs در بازه‌ای از کامیت‌های گیت در یک پروژه دیگر استفاده شود تا مشخص شود آیا کامیتی باعث افت سرعت (یا بهبود آن) شده است یا خیر.

برای آشنایی با نحوه استفاده از این اسکریپت، راهنمای آن را مطالعه کنید:

./boot-benchmark/boot-benchmark-range.pl --man

supermin(1), guestfish(1), guestfs(3), guestfs-examples(3), guestfs-internals(1), libguestfs-make-fixed-appliance(1), stap(1), qemu(1), gdb(1), http://libguestfs.org

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

Copyright (C) 2012-2025 Red Hat Inc.

این کتابخانه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی جامع‌تر گنو» (GNU Lesser General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، چه نسخه ۲ مجوز و چه (به انتخاب خودتان) هر نسخه بعدی، بازتوزیع کرده و/یا تغییر دهید.

این کتابخانه با این امید توزیع شده است که مفید واقع شود، اما بدون هیچ‌گونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت فروش یا تناسب با یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی جامع‌تر گنو» مراجعه کنید.

شما باید همراه با این کتابخانه یک نسخه از «مجوز عمومی جامع‌تر گنو» را دریافت کرده باشید؛ در غیر این صورت، با بنیاد نرم‌افزارهای آزاد مکاتبه کنید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

برای مشاهده فهرست اشکالات ثبت‌شده علیه 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