
=head1 НАЗВА

virt-rescue — запуск оболонки відновлення у віртуальній машині

=head1 КОРОТКИЙ ОПИС

 virt-rescue [--параметри] -d назва_домену

 virt-rescue [--параметри] -a диск.img [-a диск.img ...] [-i]

Старий стиль:

 virt-rescue [--параметри] назва_домену

 virt-rescue [--параметри] диск.img [диск.img ...]

=head1 ОПИС

virt-rescue — є образом компакт-диска для порятунку системи, але призначеним для віртуальних машин. Його особливістю також є те, що для роботи йому не потрібен фізичний носій. virt-rescue надає у ваше розпорядження командну оболонку порятунку системи та деякі прості інструменти, якими ви можете скористатися для аналізу і виправлення віртуальної машини або образу диска.

Ви можете запускати virt-rescue для будь-якої віртуальної машини, відомої libvirt, або безпосередньо для образів дисків:

 virt-rescue -d Назва_гостьової_системи -i

 virt-rescue --ro -a /шлях/до/диск.img -i

 virt-rescue -a /dev/sdc

Для активних віртуальних машин вам I<слід> використовувати параметр I<--ro>.

При роботі з virt-rescue над віртуальною машиною або образом диска ви матимете справу із інтерактивною командною оболонкою bash, у якій можна скористатися багатьма звичайними командами Linux. Те, що зберігатиметься у F</> (F</bin>, F</lib> тощо) є рятівною базовою системою. Для роботи з файловими системами віртуальної машини вам слід їх змонтувати. Для монтування файлових систем передбачено порожній каталог із назвою F</sysroot>.

Щоб автоматично змонтувати файлові системи віртуальної машини до F</sysroot>, скористайтеся параметром I<-i>. У відповідь програма використає засоби інспектування libguestfs для виявлення файлових систем і монтування їх до належних каталогів. Ви також можете змонтувати окремі файлові системи за допомогою параметра  I<-m>.

Іншим способом монтування є отримання списку логічних томів (за допомогою L<lvs(8)>) і розділів (за допомогою L<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

Іншою програмою для побудови списку доступних файлових систем є L<virt-filesystems(1)>.

Для запуску програм у гостьовій системі Linux (наприклад, програми grub) вам слід спочатку змінити кореневий каталог на /sysroot:

 ><rescue> chroot /sysroot

=head2 ПРИМІТКИ

Virt-rescue можна використовувати для I<будь-якого> файла образу диска або пристрою, не лише для віртуальної машини. Наприклад, ви можете скористатися програмою для порожнього файла, якщо хочете додати розділ у цей файл (втім, ми рекомендуємо для цього користуватися L<guestfish(1)>, оскільки цю програму краще пристосовано для виконання подібних завдань). Ви навіть можете використовувати virt-rescue для роботи з дисками USB, картками SD та жорсткими дисками.

Ви можете наказати virt-rescue створити для вас тестовий диск. Це корисно для тестування інструментів Linux (див. I<--scratch>).

Для роботи virt-rescue не потрібні права користувача root. Вам знадобляться права доступу root, лише якщо вам потрібні права root для відкриття образу диска.

Цю програму було розроблено для швидкої інтерактивної роботи з віртуальною машиною. Для структурованішого доступу до образу диска віртуальної машини варто використовувати L<guestfs(3)>. Структурованою командною оболонкою для внесення змін до гостьової системи за певним сценарієм є L<guestfish(1)>.

=head1 ПАРАМЕТРИ

=over 4

=item B<--help>

Показати коротку довідку.

=item B<-a> ФАЙЛ

=item B<--add> ФАЙЛ

Додати I<ФАЙЛ>, який має бути образом диска з віртуальної машини. Якщо у віртуальній машині декілька блокових пристроїв, вам слід вказати їх усі за допомогою окремих записів параметра I<-a>.

Формат образу диска визначається автоматично. Щоб перевизначити його і примусово використати певний формат, скористайтеся параметром I<--format=..>.

=item B<-a> адреса

=item B<--add> адреса

Додати віддалений диск. Див. L<guestfish(1)/ДОДАВАННЯ ВІДДАЛЕНОГО СХОВИЩА>.

=item B<--append> ПАРАМЕТРИ_ЯДРА

Передати додаткові параметри ядру відновлення.

__INCLUDE:blocksize-option.pod__

=item B<-c> адреса

=item B<--connect> адреса

Якщо використовується libvirt, встановити з’єднання з вказаним I<URI>. Якщо пропущено, з’єднання буде встановлено з типовим гіпервізором libvirt.

Якщо вказати блокові пристрої гостьових систем безпосередньо (I<-a>), libvirt не буде використовуватися взагалі.

=item B<-d> гість

=item B<--domain> гість

Додати всі диски з вказаної гостьової системи libvirt. UUID доменів можна використовувати замість назв.

=item B<-e none>

Вимкнути клавішу екранування.

=item B<-e> КЛАВІША

Встановлює для керівних клавіш вказану послідовність натискання клавіш. Типовою є C<^]>. Для визначення керівних клавіш ви можете скористатися такими рядками:

=over 4

=item C<^x>

Клавіша Ctrl + клавіша C<x>.

=item C<none>

I<-e none> означає «без клавіші екранування», екранування вимкнено.

=back

Див. L</КЛАВІША ЕКРАНУВАННЯ> нижче, щоб дізнатися більше.

=item B<--format=raw|qcow2|..>

=item B<--format>

Типовим значенням для параметра I<-a> є автоматичне визначення формату образу диска. Використання цього параметра примусово визначає значення параметрів I<-a> формату диска у наступному рядку команди. Використання параметра I<--format> без аргументу перемикає програму у режим автоматичного визначення у наступних параметрах I<-a>.

Приклад:

 virt-rescue --format=raw -a диск.img

примусове встановлення формату без обробки (без автоматичного визначення) для F<disk.img>.

 virt-rescue --format=raw -a диск.img --format -a інший.img

примусове встановлення формату без обробки (без автоматичного визначення) для F<diskimg> і повернення до автоматичного визначення для F<another.img>.

Якщо ви користуєтеся ненадійними образами гостьових систем у необробленому форматі, вам слід скористатися цим параметром для визначення формату диска. Таким чином можна уникнути можливих проблем з захистом для сформованих зловмисниками гостьових систем (CVE-2010-3851).

=item B<-i>

=item B<--inspector>

Використовуючи код L<virt-inspector(1)>, виконати інспектування дисків, шукаючи операційну систему і монтуючи файлові системи так, як їх мало б бути змонтовано у справжній віртуальній машині.

Файлові системи у середовищі порятунку системи монтуються до F</sysroot>.

=item B<--memsize> МБ

Змінити обсяг пам'яті, який надається системі для порятунку. Типове значення встановлюється libguestfs і є малим, але достатнім для запуску інструментів для роботи із системою. Певні програми можуть потребувати додаткового обсягу пам'яті. Значення слід вказувати у мегабайтах.

=item B<-m> пристрій[:точка_монтування[:параметри[:тип_файлової_системи]]]

=item B<--mount> пристрій[:точка_монтування[:параметри[:тип_файлової_системи]]]

Змонтувати вказаний за назвою розділ або логічний том до вказаної точки монтування B<у гостьовій системі> (немає нічого спільного із точками монтування у основній системі).

Якщо точку монтування не вказано, типовим значенням є F</>. Вам слід змонтувати щось до F</>.

Файлові системи у середовищі порятунку системи монтуються до F</sysroot>.

Третьою (і нечасто використовуваною) частиною параметра монтування є список параметрів монтування, які використовуються для того, щоб змонтувати підлеглу файлову систему. Якщо такий список не буде задано, параметрами монтування вважатиметься або порожній рядок, або C<ro> (другий варіант використовується, якщо використано прапорець I<--ro>). Заданням параметрів монтування ви перевизначаєте типовий варіант. Ймовірно, єдиним випадком, коли вам може знадобитися це, є випадок вмикання списків керування доступом (ACL) і/або розширених атрибутів, якщо у файловій системі передбачено їхню підтримку:

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

Четвертою частиною параметра є назва драйвера файлової системи, якою слід скористатися, зокрема C<ext3> або C<ntfs>. У визначенні цієї частини параметра рідко виникає потреба, але вона може бути корисною, якщо для файлової системи можна скористатися декількома драйверами (приклад: C<ext2> і C<ext3>), або libguestfs визначає файлову систему помилково.

=item B<--network>

Уможливити для користувача QEMU роботу у мережі у гостьовій системі. Див. L</МЕРЕЖА>.

=item B<-r>

=item B<--ro>

Відкрити образ у режимі лише читання.

Цей параметр слід завжди використовувати, якщо образ диска або віртуальна машина може працювати. Загалом, рекомендуємо використовувати його у випадках, коли вам не потрібен доступ на запис до диска.

Див. також L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>.

=item B<--scratch>

=item B<--scratch=N>

Використання параметра I<--scratch> призводить до додавання великого тестового диска до базової системи для порятунку віртуальних машин. Запис I<--scratch=N> призводить до додавання C<N> тестових дисків. Тестові диски автоматично вилучаються, якщо virt-rescue завершує роботу.

Ви також можете поєднувати параметри I<-a>, I<-d> і I<--scratch>. Тестові диски додаються до базової системи у порядку, у якому їх було вказано у рядку команди.

=item B<--selinux>

Цей параметр призначено для забезпечення зворотної сумісності, його використання не матиме жодних наслідків.

=item B<--smp> N

Увімкнути N E<ge> 2 віртуальних процесорів у базовій системі для порятунку.

=item B<--suggest>

Цей параметр використовувався у застарілих версіях virt-rescue для надання пропозицій команд, якими ви могли б скористатися для монтування файлових систем до F</sysroot>. У сучасних версіях virt-rescue простіше скористатися параметром I<-i>.

Цей параметр неявно використовує I<--ro> і є безпечним для використання, навіть якщо гостьова система працює або запущено інший екземпляр virt-rescue.

=item B<-v>

=item B<--verbose>

Увімкнути докладний показ повідомлень з метою діагностики.

=item B<-V>

=item B<--version>

Показати дані щодо версії і завершити роботу.

=item B<-w>

=item B<--rw>

Змінює дію параметрів I<-a>, I<-d> і I<-m> таким чином, що диски додаються і монтуються у режимі читання і запису.

Див. L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>.

=item B<-x>

Увімкнути трасування викликів програмного інтерфейсу libguestfs.

=back

=head1 ПАРАМЕТРИ КОМАНДНОГО РЯДКА У ФОРМАТІ ПОПЕРЕДНІХ ВЕРСІЙ

У попередніх версіях virt-rescue можна було скомандувати ось так:

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

або

 virt-rescue назва_гостьової_системи

тоді як у цій версії вам слід скористатися I<-a> або I<-d>, відповідно, щоб уникнути помилок у випадках, коли назва образу диска може збігатися із назвою гостьової системи.

З міркувань зворотної сумісності передбачено підтримку запису параметрів у застарілому форматі.

=head1 МЕРЕЖА

Додавання параметра I<--network> вмикає для користувача мережу QEMU у базовій системі для порятунку. Існують певні відмінності між звичайною роботою у мережі і роботою у мережі для користувача:

=over 4

=item луна-імпульс не працює

Оскільки протокол ICMP ECHO_REQUEST загалом вимагає прав доступу root для надсилання пакетів луна-імпульсів, і оскільки virt-rescue повинна мати можливість бути запущеною не від імені root, мережа для користувача у QEMU не може емулювати роботу команди L<ping(8)>. Команда ping зможе визначати адреси, але не зможе надсилати або отримувати будь-які пакети. Це не означає, що працювати у мережі буде неможливо.

=item не можна отримувати з'єднання

У режимі мережі для користувача QEMU не можна отримувати вхідні з'єднання.

=item встановлення з'єднань TCP

Базова система virt-rescue має бути невеликою за розміром, тому до неї не включено багато інструментів для роботи у мережі. Зокрема, у ній немає програми L<telnet(1)>. Ви можете встановити TCP-з'єднання з командної оболонки за допомогою магічної команди F</dev/tcp/E<lt>назва_вузлаE<gt>/E<lt>портE<gt>>:

 exec 3<>/dev/tcp/redhat.com/80
 echo "GET /" >&3
 cat <&3

Докладніше про це тут: L<bash(1)>.

=back

=head1 КЛАВІША ЕКРАНУВАННЯ

У virt-rescue передбачено підтримку різноманітних клавіатурних комбінацій із клавішею екранування, які вводяться натисканням C<^]> (клавіші Ctrl і клавіші C<]>).

Змінити клавішу екранування можна за допомогою параметра I<-e> рядка команди (див. вище). Повністю вимкнути клавішу екранування можна за допомогою параметра I<-e none>. У решті цього розділу ми припускаємо, що працює типова клавіша екранування.

Можна використовувати такі клавіші:

=over 4

=item C<^] ?>

=item C<^] h>

Виводить коротке довідкове повідомлення щодо керівних послідовностей.

=item C<^] i>

Виводить короткі дані інспектування libguestfs для гостьової системи. Працюватиме, лише якщо вами було використано I<-i> у рядку команди virt-rescue.

=item C<^] q>

=item C<^] x>

Негайно завершити роботу virt-rescue.

=item C<^] s>

Синхронізувати файлові системи.

=item C<^] u>

Демонтувати усі файлові системи, окрім кореневих файлових систем (базової системи).

=item C<^] z>

Призупинити роботу virt-rescue (подібно до натискання C<^Z>, але стосується virt-rescue, а не програми, яка працює у оболонці порятунку системи).

=item C<^] ^]>

Надсилає сам символ C<^]> (ASCII 0x1d) крізь оболонку порятунку системи.

=back

=head1 ПЕРЕХОПЛЕННЯ ДАМПІВ ЯДРА

Якщо ви працюєте з якоюсь програмою у virt-rescue, і програма (B<не> virt-rescue) завершує роботу у аварійному режимі, перехопити дамп ядра програми поза virt-rescue для подальшого аналізу є доволі складним завданням. У цьому розділі описано один спосіб, у який можна досягти виконання цього завдання.

=over 4

=item 1.

Створіть тестовий диск для дампів ядра:

 truncate -s 4G /tmp/corefiles
 virt-format --partition=mbr --filesystem=ext2 -a /tmp/corefiles
 virt-filesystems -a /tmp/corefiles --all --long -h

=item 2.

Під час запуску virt-rescue долучіть диск для файлів дампів останнім:

 virt-rescue --rw [-a ...] -a /tmp/corefiles

B<NB.> Якщо ви використовуєте параметр I<--ro>, virt-rescue без додаткових питань не записуватиме ніяких файлів дампів ядра до F</tmp/corefiles>.

=item 3.

У virt-rescue змонтуйте диск для файлів дампів ядра. Не забудьте замінити F</dev/sdb1> записом із індексом останнього диска. Наприклад, якщо диск файлів дампів ядра є останнім із чотирьох дисків, вам слід використовувати F</dev/sdd1>.

 ><rescue> mkdir /tmp/mnt
 ><rescue> mount /dev/sdb1 /tmp/mnt

=item 4.

Увімкніть дампи ядра у ядрі відновлення:

 ><rescue> echo '/tmp/mnt/core.%p' > /proc/sys/kernel/core_pattern
 ><rescue> ulimit -Hc unlimited
 ><rescue> ulimit -Sc unlimited

=item 5.

Запустіть програму, яка аварійно завершує роботу, записуючи дамп ядра. Дамп ядра буде записано до F</tmp/mnt/core.I<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

=item 6.

Перш ніж завершувати роботу virt-rescue, демонтуйте (або принаймні синхронізуйте) диски:

 ><rescue> umount /tmp/mnt
 ><rescue> exit

=item 7.

Поза межами virt-rescue файли дампів ядра можна вилучити з диска за допомогою L<guestfish(1)>. Приклад:

 guestfish --ro -a /tmp/corefiles -m /dev/sda1
 ><fs> ll /
 ><fs> download /core.NNN /tmp/core.NNN

=back

=head1 ЗМІННІ СЕРЕДОВИЩА

На роботу virt-rescue впливають декілька змінних середовища. Повний список змінних наведено у розділі L<guestfs(3)/ЗМІННІ СЕРЕДОВИЩА>.

=head1 ФАЙЛИ

=over 4

=item $XDG_CONFIG_HOME/libguestfs/libguestfs-tools.conf

=item $HOME/.libguestfs-tools.rc

=item $XDG_CONFIG_DIRS/libguestfs/libguestfs-tools.conf

=item /etc/libguestfs-tools.conf

Цей файл налаштувань керує типовим режимом — лише читання чи читання і запис (I<--ro> або I<--rw>).

Див. L<libguestfs-tools.conf(5)>.

=back

=head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ

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

=head1 АВТОР

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

=head1 АВТОРСЬКІ ПРАВА

Copyright (C) 2009-2025 Red Hat Inc.

