
=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-2020 Red Hat Inc.

