virt-rescue(1) Virtualization Support virt-rescue(1)

virt-rescue - اجرای یک پوسته نجات روی یک ماشین مجازی

virt-rescue [--options] -d domname
virt-rescue [--options] -a disk.img [-a disk.img ...] [-i]

روش قدیمی:

 virt-rescue [--options] domname
 virt-rescue [--options] disk.img [disk.img ...]
استفاده از "virt-rescue" در حالت نوشتن (write mode) بر روی ماشین‌های مجازی در حال اجرا (live)، یا به طور هم‌زمان با سایر ابزارهای ویرایش دیسک می‌تواند خطرناک باشد و به طور بالقوه موجب خرابی دیسک شود. پیش از استفاده از این دستور، ماشین مجازی باید خاموش شود و نباید ایمیج‌های دیسک را به صورت هم‌زمان ویرایش کرد.
در صورتی که احتمال می‌دهید ایمیج دیسک یا ماشین مجازی در حال اجرا باشد، برای استفادهٔ ایمن از "virt-rescue" از گزینهٔ --ro (فقط‌خواندنی) استفاده کنید. در صورت اجرای هم‌زمان با سایر تغییرات، ممکن است نتایجی عجیب یا ناهماهنگ ببینید، اما با این گزینه خطر خرابی دیسک وجود نخواهد داشت.

ابزار virt-rescue همانند یک دیسک نجات (Rescue CD) است، اما برای ماشین‌های مجازی و بدون نیاز به CD. ابزار virt-rescue یک پوستهٔ نجات و چند ابزار سادهٔ بازیابی در اختیارتان می‌گذارد که می‌توانید از آن‌ها برای بررسی یا نجات دادن یک ماشین مجازی یا ایمیج دیسک استفاده کنید.

می‌توانید virt-rescue را روی هر ماشین مجازی شناخته‌شده برای libvirt، یا مستقیماً روی ایمیج(های) دیسک اجرا کنید:

virt-rescue -d GuestName -i
virt-rescue --ro -a /path/to/disk.img -i
virt-rescue -a /dev/sdc

برای ماشین‌های مجازی در حال اجرا (live)، حتماً باید از گزینهٔ --ro استفاده کنید.

هنگامی که virt-rescue را روی یک ماشین مجازی یا ایمیج دیسک اجرا می‌کنید، وارد یک پوستهٔ تعاملی bash می‌شوید که در آن می‌توانید از بسیاری از دستورهای معمولی لینوکس استفاده کنید. آنچه در / (/bin، /lib و غیره) می‌بینید، ابزارک نجات (rescue appliance) است. شما باید سیستم‌های فایل ماشین مجازی را سوار (mount) کنید. یک دایرکتوری خالی به نام /sysroot وجود دارد که می‌توانید سیستم‌های فایل را در آن سوار کنید.

برای سوار کردن خودکار سیستم‌های فایل ماشین مجازی در /sysroot از گزینهٔ -i استفاده کنید. این کار با استفاده از قابلیت بررسی (inspection) در libguestfs، سیستم‌های فایل را پیدا کرده و آن‌ها را در مکان مناسب سوار می‌کند. همچنین می‌توانید با استفاده از گزینهٔ -m سیستم‌های فایل را به صورت جداگانه سوار کنید.

راه دیگر این است که حجم‌های منطقی (با lvs(8)) و پارتیشن‌ها (با parted(8)) را فهرست کرده و آن‌ها را به صورت دستی سوار نمایید:

><rescue> lvs
LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
lv_root vg_f15x32 -wi-a-   8.83G
lv_swap vg_f15x32 -wi-a- 992.00M
><rescue> mount /dev/vg_f15x32/lv_root /sysroot
><rescue> mount /dev/vda1 /sysroot/boot
><rescue> ls /sysroot

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

برای اجرای دستورها در یک مهمان لینوکسی (به عنوان مثال، grub)، ابتدا باید وارد دایرکتوری /sysroot به صورت chroot شوید:

><rescue> chroot /sysroot

می‌توان Virt-rescue را روی هر فایل ایمیج دیسک یا دستگاهی استفاده کرد، نه صرفاً یک ماشین مجازی. به عنوان مثال، اگر قصد پارتیشن‌بندی یک فایل خام را دارید می‌توانید از آن استفاده کنید (اگرچه توصیه می‌کنیم به جای آن از guestfish(1) استفاده کنید، چرا که برای این منظور مناسب‌تر است). حتی می‌توانید virt-rescue را روی مواردی مانند درایوهای USB، کارت‌های SD و دیسک‌های سخت نیز به کار ببرید.

می‌توانید کاری کنید که virt-rescue دیسک(های) موقت آزمایشی (scratch disks) برای آزمون و خطا در اختیارتان بگذارد. این قابلیت برای آزمایش ابزارهای لینوکس مفید است (گزینهٔ --scratch را ببینید).

ابزار Virt-rescue نیازی به کاربر ریشه (root) ندارد. تنها در صورتی نیاز است آن را با دسترسی root اجرا کنید که برای باز کردن ایمیج دیسک به مجوز root نیاز داشته باشید.

این ابزار صرفاً برای دست‌کاری تعاملی و سریع روی یک ماشین مجازی طراحی شده است. برای دسترسی ساختاریافته‌تر به ایمیج دیسک یک ماشین مجازی، باید از guestfs(3) استفاده کنید. برای داشتن یک پوستهٔ ساختاریافته که بتوانید با آن تغییرات اسکریپت‌پذیر روی مهمان‌ها اعمال نمایید، از guestfish(1) استفاده کنید..SH "گزینه‌ها (OPTIONS)"

نمایش راهنمای مختصر.
افزودن "FILE" که باید یک ایمیج دیسک از یک ماشین مجازی باشد. اگر ماشین مجازی دارای چندین دستگاه بلوکی است، باید همهٔ آن‌ها را با گزینه‌های -a مجزا مشخص کنید.

قالب ایمیج دیسک به‌طور خودکار تشخیص داده می‌شود. برای لغو این حالت و اجبار یک قالب مشخص، از گزینهٔ --format=.. استفاده کنید.

افزودن یک دیسک دوردست. بخش «ADDING REMOTE STORAGE» را در guestfish(1) ببینید.
ارسال گزینه‌های اضافی به هستهٔ rescue.
این پارامتر اندازهٔ سکتور ایمیج دیسک را تعیین می‌کند. این مقدار روی تمامی دیسک‌های بعدی که پس از این پارامتر به‌طور صریح اضافه شوند اثر می‌گذارد. استفاده از --blocksize بدون آرگومان، اندازهٔ سکتور دیسک را به مقدار پیش‌فرض که معمولاً ۵۱۲ بایت است تغییر می‌دهد. همچنین «guestfs_add_drive_opts» را در guestfs(3) ببینید.
در صورت استفاده از libvirt، به URI داده‌شده متصل می‌شود. در صورت حذف، اتصال به hypervisor پیش‌فرض libvirt برقرار خواهد شد.

اگر دستگاه‌های بلوکی مهمان را مستقیماً (-a) مشخص کنید، از libvirt اصلاً استفاده نمی‌شود.

افزودن تمامی دیسک‌ها از مهمان libvirt با نام مشخص‌شده. می‌توان به جای نام‌ها از UUIDهای دامنه استفاده کرد.
غیرفعال کردن کلید گریز (escape key).
تنظیم کلید گریز روی توالی کلید داده‌شده. مقدار پیش‌فرض "^]" است. برای تعیین کلید گریز می‌توانید استفاده کنید از:
"^x"
کلید Control + کلید "x".
"none"
-e none به این معنی است که هیچ کلید گریزی وجود ندارد و توالی‌های گریز غیرفعال هستند.

برای اطلاعات بیشتر، بخش «ESCAPE KEY» را در زیر ببینید.

حالت پیش‌فرض برای گزینهٔ -a تشخیص خودکار قالب ایمیج دیسک است. استفاده از این گزینه، قالب دیسک را برای گزینه‌های -a که در ادامهٔ خط فرمان می‌آیند اجبار می‌کند. استفاده از --format بدون آرگومان، تشخیص خودکار را برای گزینه‌های -a بعدی دوباره فعال می‌کند.

برای مثال:

virt-rescue --format=raw -a disk.img

قالب raw را بدون تشخیص خودکار برای disk.img تحمیل می‌کند.

virt-rescue --format=raw -a disk.img --format -a another.img

قالب raw را بدون تشخیص خودکار برای disk.img تحمیل کرده و برای another.img به حالت تشخیص خودکار بازمی‌گردد.

اگر ایمیج‌های دیسک مهمان نامعتمد در قالب raw دارید، باید از این گزینه برای تعیین قالب دیسک استفاده کنید. این کار از یک مشکل امنیتی احتمالی توسط مهمان‌های مخرب جلوگیری می‌کند (CVE-2010-3851).

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

سیستم‌های فایل بر روی /sysroot در محیط rescue سوار می‌شوند.

تغییر مقدار حافظهٔ تخصیص‌یافته به سیستم rescue. مقدار پیش‌فرض توسط libguestfs تنظیم می‌شود و کوچک است اما برای اجرای ابزارهای سیستمی کفایت می‌کند. گاهی ممکن است برنامه‌ای به حافظهٔ بیشتری نیاز داشته باشد. این پارامتر بر حسب مگابایت مشخص می‌شود.
پارتیشن یا حجم منطقی نام‌برده‌شده را روی نقطهٔ سوارکردن مشخص‌شده در مهمان سوار می‌کند (این مورد هیچ ارتباطی با نقاط سوارکردن در میزبان ندارد).

اگر نقطهٔ سوارکردن حذف شود، پیش‌فرض آن / خواهد بود. شما باید چیزی را روی / سوار کنید.

سیستم‌های فایل در محیط rescue در مسیر /sysroot سوار می‌شوند.

بخش سوم (و به‌ندرت استفاده‌شده) از پارامتر mount فهرستی از گزینه‌های سوارکردن است که برای سوار کردن سیستم فایل زیرین استفاده می‌شود. اگر این مورد داده نشود، گزینه‌های سوارکردن یا رشته‌ای خالی یا "ro" خواهد بود (دومی در صورتی است که پرچم --ro به کار رفته باشد). با تعیین گزینه‌های سوارکردن، این انتخاب پیش‌فرض را لغو می‌کنید. احتمالاً تنها زمانی که از این مورد استفاده خواهید کرد، فعال‌سازی ACLها و/یا ویژگی‌های گسترش‌یافته (extended attributes) در صورت پشتیبانی سیستم فایل است:

-m /dev/sda1:/:acl,user_xattr

بخش چهارم این پارامتر راه‌انداز سیستم فایل مورد استفاده است، مانند "ext3" یا "ntfs". این مورد به‌ندرت نیاز می‌شود، اما در صورتی که چندین راه‌انداز برای یک سیستم فایل معتبر باشند (مانند: "ext2" و "ext3")، یا اگر libguestfs نوع سیستم فایل را اشتباه تشخیص دهد، می‌تواند کاربردی باشد.

فعال کردن شبکهٔ کاربری QEMU در سیستم مهمان. بخش «NETWORK» را ببینید.
باز کردن ایمیج به‌صورت فقط‌خواندنی.

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

همچنین بخش «OPENING DISKS FOR READ AND WRITE» را در guestfish(1) ببینید.

گزینهٔ --scratch یک دیسک موقت (scratch) بزرگ به اپلاینس rescue اضافه می‌کند. --scratch=N تعداد "N" دیسک موقت اضافه می‌کند. دیسک(های) موقت هنگام خروج virt-rescue به‌طور خودکار حذف می‌شوند.

شما همچنین می‌توانید گزینه‌های -a، -d و --scratch را با هم ترکیب کنید. دیسک(های) موقت به همان ترتیبی که در خط فرمان ظاهر می‌شوند به اپلاینس اضافه خواهند شد..IP --selinux 4 این گزینه برای سازگاری با نسخه‌های پیشین در نظر گرفته شده است و هیچ کاری انجام نمی‌دهد.

فعال‌سازی N ≥ 2 پردازندهٔ مجازی در ماشین امداد (rescue appliance).
این گزینه در نسخه‌های قدیمی‌تر virt-rescue برای پیشنهاد دادن دستورهایی به کار می‌رفت که با استفاده از آن‌ها می‌توانستید سیستم‌فایل‌ها را ذیل /sysroot سوار (mount) کنید. در نسخهٔ کنونی virt-rescue، استفاده از گزینهٔ -i به جای آن ساده‌تر است.

این گزینه مستلزم --ro است و استفاده از آن حتی اگر ماشین مهمان بالا باشد یا یک virt-rescue دیگر در حال اجرا باشد، کاملاً ایمن است.

فعال‌سازی پیام‌های پرگو (verbose) برای اشکال‌زدایی.
نمایش شماره نسخه و خروج.
این گزینه رفتارهای گزینه‌های -a، -d و -m را تغییر می‌دهد تا دیسک‌ها اضافه شده و عملیات سوار کردن (mount) به صورت خواندن/نوشتن (read-write) انجام شود.

بخش «OPENING DISKS FOR READ AND WRITE» را در guestfish(1) ببینید.

فعال‌سازی ردگیری (tracing) فراخوانی‌های API کتابخانهٔ libguestfs.

نسخه‌های پیشین virt-rescue به شما اجازه می‌دادند که بنویسید:

virt-rescue disk.img [disk.img ...]

یا

virt-rescue guestname

در حالی که در این نسخه باید به ترتیب از -a یا -d استفاده کنید تا از حالت سردرگم‌کننده‌ای که در آن ممکن است یک ایمیج دیسک نامی یکسان با یک مهمان داشته باشد، جلوگیری شود.

جهت حفظ سازگاری، سبک قدیمی هنوز پشتیبانی می‌شود.

افزودن گزینهٔ --network شبکهٔ کاربری QEMU را در ماشین امداد فعال می‌کند. میان شبکهٔ کاربری و شبکهٔ معمولی تفاوت‌هایی وجود دارد:

دستور ping کار نمی‌کند
از آنجا که پروتکل ICMP ECHO_REQUEST برای ارسال بسته‌های ping عموماً به دسترسی ریشه (root) نیاز دارد و از آنجا که virt-rescue باید بتواند به صورت غیرریشه اجرا شود، شبکهٔ کاربری QEMU قادر به شبیه‌سازی دستور ping(8) نیست. به نظر می‌رسد دستور ping آدرس‌ها را تحلیل (resolve) می‌کند اما قادر به ارسال یا دریافت هیچ بسته‌ای نخواهد بود. این به معنای کار نکردن شبکه نیست.
عدم امکان دریافت اتصالات
شبکهٔ کاربری QEMU نمی‌تواند اتصالات ورودی را دریافت کند.
برقراری اتصالات TCP
ماشین امداد virt-rescue باید سبک و کم‌حجم باشد، بنابراین ابزارهای شبکهٔ زیادی را شامل نمی‌شود؛ به ویژه هیچ دستور telnet(1) در آن وجود ندارد. شما می‌توانید با استفاده از نحو جادویی /dev/tcp/<hostname>/<port> اتصالات TCP را از داخل پوسته برقرار کنید:
exec 3<>/dev/tcp/redhat.com/80
echo "GET /" >&3
cat <&3

برای جزئیات بیشتر به bash(1) مراجعه کنید..SH "کلید گریز (ESCAPE KEY)" ابزار virt-rescue از دنباله‌های گریز صفحه‌کلید گوناگونی پشتیبانی می‌کند که با فشردن "^]" (کلید Control + کلید "]") وارد می‌شوند.

می‌توانید کلید گریز را با استفاده از گزینهٔ -e در خط فرمان تغییر دهید (بالا را ببینید)، و می‌توانید دنباله‌های گریز را با استفاده از -e none به‌طور کامل غیرفعال کنید. ادامهٔ این بخش فرض را بر استفاده از کلید گریز پیش‌فرض می‌گذارد.

دنباله‌های گریز زیر قابل استفاده هستند:

"^] ?"
"^] h"
متن راهنمای کوتاهی دربارهٔ دنباله‌های گریز چاپ می‌کند.
"^] i"
اطلاعات بازرسی (inspection) مختصری از libguestfs را برای ماشین مهمان نمایش می‌دهد. این مورد تنها در صورتی کار می‌کند که از گزینهٔ -i در خط فرمان virt-rescue استفاده کرده باشید.
"^] q"
"^] x"
بلافاصله از virt-rescue خارج می‌شود.
"^] s"
سیستم‌های فایل را همگام‌سازی می‌کند (sync).
"^] u"
تمام سیستم‌های فایل را، به‌جز سیستم‌های فایل ریشه (تجهیز/appliance)، از حالت پیوست خارج می‌کند (unmount).
"^] z"
برنامهٔ virt-rescue را تعلیق می‌کند (مانند فشردن "^Z" با این تفاوت که به‌جای برنامهٔ درون پوستهٔ نجات، روی virt-rescue اثر می‌گذارد).
"^] ^]"
نویسهٔ تحت‌اللفظی "^]" (کد اسکی 0x1d) را مستقیماً به پوستهٔ نجات ارسال می‌کند.

اگر در حال آزمایش ابزاری درون virt-rescue هستید و آن ابزار (نه virt-rescue) دچار خطای حافظه (segfault) شود، گرفتن core dump در بیرون از virt-rescue برای تحلیل‌های بعدی ممکن است دشوار باشد. این بخش روشی را برای انجام این کار شرح می‌دهد.

1.
یک دیسک موقت (scratch disk) برای فایل‌های core dump بسازید:
truncate -s 4G /tmp/corefiles
virt-format --partition=mbr --filesystem=ext2 -a /tmp/corefiles
virt-filesystems -a /tmp/corefiles --all --long -h
2.
هنگام راه‌اندازی virt-rescue، دیسک مربوط به فایل‌های core را به‌عنوان آخرین دیسک متصل کنید:
virt-rescue --rw [-a ...] -a /tmp/corefiles

توجه: اگر از گزینهٔ --ro استفاده کنید، virt-rescue بدون هیچ هشداری فایل‌های core را در /tmp/corefiles نخواهد نوشت.

3.
درون virt-rescue، دیسک فایل‌های core را متصل (mount) کنید. توجه داشته باشید که باید /dev/sdb1 را با شناسهٔ آخرین دیسک جایگزین کنید. برای مثال، اگر دیسک فایل‌های core آخرین دیسک از میان چهار دیسک باشد، باید از /dev/sdd1 استفاده کنید.
><rescue> mkdir /tmp/mnt
><rescue> mount /dev/sdb1 /tmp/mnt
4.
تولید core dumpها را در هستهٔ rescue فعال کنید:
><rescue> echo '/tmp/mnt/core.%p' > /proc/sys/kernel/core_pattern
><rescue> ulimit -Hc unlimited
><rescue> ulimit -Sc unlimited
5.
ابزاری را که موجب بروز core dump شده بود اجرا کنید. فایل core dump در مسیر /tmp/mnt/core.PID نوشته خواهد شد.
><rescue> ls -l /tmp/mnt
total 1628
-rw------- 1 root root 1941504 Dec  7 13:13 core.130
drwx------ 2 root root   16384 Dec  7 13:00 lost+found
6.
پیش از خروج از virt-rescue، دیسک‌ها را از حالت پیوست خارج (یا حداقل sync) کنید:
><rescue> umount /tmp/mnt
><rescue> exit
7.
در بیرون از virt-rescue، می‌توان فایل(های) core dump را با استفاده از guestfish(1) از روی دیسک استخراج کرد. برای مثال:
 guestfish --ro -a /tmp/corefiles -m /dev/sda1
 ><fs> ll /
 ><fs> download /core.NNN /tmp/core.NNN
چندین متغیر محیطی بر virt-rescue تأثیر می‌گذارند. برای فهرست کامل،
بخش «ENVIRONMENT VARIABLES» در guestfs(3) را ببینید.

$XDG_CONFIG_HOME/libguestfs/libguestfs-tools.conf
$HOME/.libguestfs-tools.rc
$XDG_CONFIG_DIRS/libguestfs/libguestfs-tools.conf
/etc/libguestfs-tools.conf
این فایل پیکربندی حالت پیش‌فرض فقط‌خواندنی یا خواندن-نوشتن (--ro یا --rw) را کنترل می‌کند.

libguestfs-tools.conf(5) را ببینید.

guestfs(3), guestfish(1), virt-cat(1), virt-edit(1), virt-filesystems(1), libguestfs-tools.conf(5), http://libguestfs.org.

Richard W.M. Jones http://people.redhat.com/~rjones

Copyright (C) 2009-2025 Red Hat Inc.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU 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