| virt-rescue(1) | Virtualization Support | virt-rescue(1) |
نام (NAME)
virt-rescue - اجرای یک پوسته نجات روی یک ماشین مجازی
خلاصه دستور (SYNOPSIS)
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 (فقطخواندنی) استفاده کنید. در صورت اجرای همزمان با سایر تغییرات، ممکن است نتایجی عجیب یا ناهماهنگ ببینید، اما با این گزینه خطر خرابی دیسک وجود نخواهد داشت.
توضیحات (DESCRIPTION)
ابزار 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
نکات (NOTES)
میتوان Virt-rescue را روی هر فایل ایمیج دیسک یا دستگاهی استفاده کرد، نه صرفاً یک ماشین مجازی. به عنوان مثال، اگر قصد پارتیشنبندی یک فایل خام را دارید میتوانید از آن استفاده کنید (اگرچه توصیه میکنیم به جای آن از guestfish(1) استفاده کنید، چرا که برای این منظور مناسبتر است). حتی میتوانید virt-rescue را روی مواردی مانند درایوهای USB، کارتهای SD و دیسکهای سخت نیز به کار ببرید.
میتوانید کاری کنید که virt-rescue دیسک(های) موقت آزمایشی (scratch disks) برای آزمون و خطا در اختیارتان بگذارد. این قابلیت برای آزمایش ابزارهای لینوکس مفید است (گزینهٔ --scratch را ببینید).
ابزار Virt-rescue نیازی به کاربر ریشه (root) ندارد. تنها در صورتی نیاز است آن را با دسترسی root اجرا کنید که برای باز کردن ایمیج دیسک به مجوز root نیاز داشته باشید.
این ابزار صرفاً برای دستکاری تعاملی و سریع روی یک ماشین مجازی طراحی شده است. برای دسترسی ساختاریافتهتر به ایمیج دیسک یک ماشین مجازی، باید از guestfs(3) استفاده کنید. برای داشتن یک پوستهٔ ساختاریافته که بتوانید با آن تغییرات اسکریپتپذیر روی مهمانها اعمال نمایید، از guestfish(1) استفاده کنید..SH "گزینهها (OPTIONS)"
- --help
- نمایش راهنمای مختصر.
- -a FILE
- --add FILE
- افزودن
"FILE" که
باید یک
ایمیج دیسک
از یک ماشین
مجازی باشد.
اگر ماشین
مجازی
دارای
چندین
دستگاه
بلوکی است،
باید همهٔ
آنها را با
گزینههای
-a مجزا
مشخص کنید.
قالب ایمیج دیسک بهطور خودکار تشخیص داده میشود. برای لغو این حالت و اجبار یک قالب مشخص، از گزینهٔ --format=.. استفاده کنید.
- -a URI
- --add URI
- افزودن یک دیسک دوردست. بخش «ADDING REMOTE STORAGE» را در guestfish(1) ببینید.
- --append KERNELOPTS
- ارسال گزینههای اضافی به هستهٔ rescue.
- --blocksize=512
- --blocksize=4096
- --blocksize
- این پارامتر اندازهٔ سکتور ایمیج دیسک را تعیین میکند. این مقدار روی تمامی دیسکهای بعدی که پس از این پارامتر بهطور صریح اضافه شوند اثر میگذارد. استفاده از --blocksize بدون آرگومان، اندازهٔ سکتور دیسک را به مقدار پیشفرض که معمولاً ۵۱۲ بایت است تغییر میدهد. همچنین «guestfs_add_drive_opts» را در guestfs(3) ببینید.
- -c URI
- --connect URI
- در صورت
استفاده از
libvirt، به URI
دادهشده
متصل
میشود. در
صورت حذف،
اتصال به hypervisor
پیشفرض libvirt
برقرار
خواهد شد.
اگر دستگاههای بلوکی مهمان را مستقیماً (-a) مشخص کنید، از libvirt اصلاً استفاده نمیشود.
- -d guest
- --domain guest
- افزودن تمامی دیسکها از مهمان libvirt با نام مشخصشده. میتوان به جای نامها از UUIDهای دامنه استفاده کرد.
- -e none
- غیرفعال کردن کلید گریز (escape key).
- -e KEY
- تنظیم کلید گریز روی توالی کلید دادهشده. مقدار پیشفرض "^]" است. برای تعیین کلید گریز میتوانید استفاده کنید از:
- "^x"
- کلید Control + کلید "x".
- "none"
- -e none به این معنی است که هیچ کلید گریزی وجود ندارد و توالیهای گریز غیرفعال هستند.
برای اطلاعات بیشتر، بخش «ESCAPE KEY» را در زیر ببینید.
- --format=raw|qcow2|..
- --format
- حالت
پیشفرض
برای
گزینهٔ -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).
- -i
- --inspector
- با استفاده
از کدهای
virt-inspector(1)،
دیسکها را
برای یافتن
یک
سیستمعامل
بازرسی
کرده و
سیستمهای
فایل را
همانطور
که روی یک
ماشین
مجازی
واقعی سوار
میشوند،
سوار
میکند.
سیستمهای فایل بر روی /sysroot در محیط rescue سوار میشوند.
- --memsize MB
- تغییر مقدار حافظهٔ تخصیصیافته به سیستم rescue. مقدار پیشفرض توسط libguestfs تنظیم میشود و کوچک است اما برای اجرای ابزارهای سیستمی کفایت میکند. گاهی ممکن است برنامهای به حافظهٔ بیشتری نیاز داشته باشد. این پارامتر بر حسب مگابایت مشخص میشود.
- -m dev[:mountpoint[:options[:fstype]]]
- --mount dev[:mountpoint[:options[:fstype]]]
- پارتیشن یا
حجم منطقی
نامبردهشده
را روی
نقطهٔ
سوارکردن
مشخصشده
در مهمان
سوار
میکند (این
مورد هیچ
ارتباطی با
نقاط
سوارکردن
در میزبان
ندارد).
اگر نقطهٔ سوارکردن حذف شود، پیشفرض آن / خواهد بود. شما باید چیزی را روی / سوار کنید.
سیستمهای فایل در محیط rescue در مسیر /sysroot سوار میشوند.
بخش سوم (و بهندرت استفادهشده) از پارامتر mount فهرستی از گزینههای سوارکردن است که برای سوار کردن سیستم فایل زیرین استفاده میشود. اگر این مورد داده نشود، گزینههای سوارکردن یا رشتهای خالی یا "ro" خواهد بود (دومی در صورتی است که پرچم --ro به کار رفته باشد). با تعیین گزینههای سوارکردن، این انتخاب پیشفرض را لغو میکنید. احتمالاً تنها زمانی که از این مورد استفاده خواهید کرد، فعالسازی ACLها و/یا ویژگیهای گسترشیافته (extended attributes) در صورت پشتیبانی سیستم فایل است:
-m /dev/sda1:/:acl,user_xattr
بخش چهارم این پارامتر راهانداز سیستم فایل مورد استفاده است، مانند "ext3" یا "ntfs". این مورد بهندرت نیاز میشود، اما در صورتی که چندین راهانداز برای یک سیستم فایل معتبر باشند (مانند: "ext2" و "ext3")، یا اگر libguestfs نوع سیستم فایل را اشتباه تشخیص دهد، میتواند کاربردی باشد.
- --network
- فعال کردن شبکهٔ کاربری QEMU در سیستم مهمان. بخش «NETWORK» را ببینید.
- -r
- --ro
- باز کردن
ایمیج
بهصورت
فقطخواندنی.
این گزینه همیشه باید در مواقعی که ممکن است ایمیج دیسک یا ماشین مجازی در حال اجرا باشد استفاده شود، و بهطور کلی در مواردی که به دسترسی نوشتن روی دیسک نیاز ندارید توصیه میشود.
همچنین بخش «OPENING DISKS FOR READ AND WRITE» را در guestfish(1) ببینید.
- --scratch
- --scratch=N
- گزینهٔ --scratch
یک دیسک
موقت (scratch)
بزرگ به
اپلاینس rescue
اضافه
میکند. --scratch=N
تعداد
"N" دیسک
موقت اضافه
میکند.
دیسک(های)
موقت هنگام
خروج virt-rescue
بهطور
خودکار حذف
میشوند.
شما همچنین میتوانید گزینههای -a، -d و --scratch را با هم ترکیب کنید. دیسک(های) موقت به همان ترتیبی که در خط فرمان ظاهر میشوند به اپلاینس اضافه خواهند شد..IP --selinux 4 این گزینه برای سازگاری با نسخههای پیشین در نظر گرفته شده است و هیچ کاری انجام نمیدهد.
- --smp N
- فعالسازی N ≥ 2 پردازندهٔ مجازی در ماشین امداد (rescue appliance).
- --suggest
- این گزینه
در
نسخههای
قدیمیتر
virt-rescue برای
پیشنهاد
دادن
دستورهایی
به کار
میرفت که
با استفاده
از آنها
میتوانستید
سیستمفایلها
را ذیل /sysroot
سوار (mount) کنید.
در نسخهٔ
کنونی virt-rescue،
استفاده از
گزینهٔ -i
به جای آن
سادهتر
است.
این گزینه مستلزم --ro است و استفاده از آن حتی اگر ماشین مهمان بالا باشد یا یک virt-rescue دیگر در حال اجرا باشد، کاملاً ایمن است.
- -v
- --verbose
- فعالسازی پیامهای پرگو (verbose) برای اشکالزدایی.
- -V
- --version
- نمایش شماره نسخه و خروج.
- -w
- --rw
- این گزینه
رفتارهای
گزینههای
-a، -d و -m را
تغییر
میدهد تا
دیسکها
اضافه شده و
عملیات
سوار کردن (mount)
به صورت
خواندن/نوشتن
(read-write) انجام
شود.
بخش «OPENING DISKS FOR READ AND WRITE» را در guestfish(1) ببینید.
- -x
- فعالسازی ردگیری (tracing) فراخوانیهای API کتابخانهٔ libguestfs.
آرگومانهای خط فرمان به سبک قدیمی (OLD-STYLE COMMAND LINE ARGUMENTS)
نسخههای پیشین virt-rescue به شما اجازه میدادند که بنویسید:
virt-rescue disk.img [disk.img ...]
یا
virt-rescue guestname
در حالی که در این نسخه باید به ترتیب از -a یا -d استفاده کنید تا از حالت سردرگمکنندهای که در آن ممکن است یک ایمیج دیسک نامی یکسان با یک مهمان داشته باشد، جلوگیری شود.
جهت حفظ سازگاری، سبک قدیمی هنوز پشتیبانی میشود.
شبکه (NETWORK)
افزودن گزینهٔ --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) را مستقیماً به پوستهٔ نجات ارسال میکند.
گرفتن CORE DUMP (CAPTURING CORE DUMPS)
اگر در حال آزمایش ابزاری درون 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) را ببینید.
فایلها (FILES)
- $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) را ببینید.
همچنین ببینید (SEE ALSO)
guestfs(3), guestfish(1), virt-cat(1), virt-edit(1), virt-filesystems(1), libguestfs-tools.conf(5), http://libguestfs.org.
نویسندگان (AUTHORS)
Richard W.M. Jones http://people.redhat.com/~rjones
کپیرایت و تکثیر (COPYRIGHT)
Copyright (C) 2009-2025 Red Hat Inc.
مجوز (LICENSE)
این برنامه یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) همانطور که توسط بنیاد نرمافزارهای آزاد منتشر شده است، بازتوزیع کرده و/یا تغییر دهید؛ چه نسخهٔ ۲ مجوز یا (به انتخاب خودتان) هر نسخهٔ متأخرتری.
این برنامه با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانتی؛ حتی بدون ضمانت ضمنی قابلیت فروش یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.
شما باید به همراه این برنامه یک نسخه از «مجوز عمومی همگانی گنو» را دریافت کرده باشید؛ در غیر این صورت، به آدرس زیر برای بنیاد نرمافزارهای آزاد بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
گزارش باگها (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 |