англійськафранцузькаіспанська

Ad


Значок OnWorks

guestfs-faq - онлайн у хмарі

Запустіть guestfs-faq у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда guestfs-faq, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн- емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


guestfs-faq - поширені запитання libguestfs (FAQ)

ПРО ЛІБГОСТІ


Що is libguestfs?
libguestfs — це спосіб створення, доступу та зміни образів дисків. Ви можете заглянути всередину диска
зображення, змінювати файли, які вони містять, створювати їх з нуля, змінювати їх розмір тощо
більше. Це особливо корисно зі скриптів і програм, а також із командного рядка.

libguestfs - це бібліотека C (звідси "lib-") і набір інструментів, створених на цій бібліотеці, і
прив’язки для багатьох поширених мов програмування.

Для отримання додаткової інформації про те, що може робити libguestfs, прочитайте вступ на домашній сторінці
(http://libguestfs.org).

Що він має вір інструменти?
Інструменти Virt (веб-сайт: http://virt-tools.org) — це цілий набір керування віртуалізацією
інструменти, призначені для системних адміністраторів. Деякі з них походять з libguestfs, деякі з
libvirt та багато інших з інших проектів з відкритим кодом. Таким чином, інструменти virt — це наднабір
libguestfs. Однак libguestfs постачається з багатьма важливими інструментами. Подивитися
http://libguestfs.org Для отримання повного списку.

Лі libguestfs необхідність { лібвірт / KVM / червоний Капелюх / Fedora }?
Ні!

libvirt не є вимогою для libguestfs.

libguestfs працює з будь-яким образом диска, у тому числі створеним у VMware, KVM, qemu,
VirtualBox, Xen та багато інших гіпервізорів, і ті, які ви створили з нуля.

Red Hat спонсорує (тобто оплачує) розробку libguestfs та величезну кількість інших відкритих
вихідні проекти. Але ви можете запускати libguestfs та інструменти virt у багатьох різних Linux
дистрибутиви та Mac OS X. Ми намагаємося підтримувати всі дистрибутиви Linux як першокласні
громадян. Деякі інструменти virt були перенесені на Windows.

Як робить libguestfs порівняти до інший інструменти?
проти kpartx
Libguestfs використовує інший підхід, ніж kpartx. kpartx потребує root і монтує
файлових систем на ядрі хоста (які можуть бути небезпечними - див guestfs-безпека(1)).
Libguestfs ізолює ваше ядро ​​хоста від гостей, є більш гнучким, доступним для сценаріїв,
підтримує LVM, не вимагає root, ізольований від інших процесів і очищується
після себе. Libguestfs — це більше, ніж просто доступ до файлів, тому що ви можете використовувати його для
створювати зображення з нуля.

проти vdfuse
vdfuse схожий на kpartx, але для зображень VirtualBox. Дивіться порівняння kpartx вище.
Ви можете використовувати libguestfs для файлів розділів, які відкриває vdfuse, хоча це не так
необхідно, оскільки libguestfs може отримати прямий доступ до зображень VirtualBox.

проти qemu-nbd
NBD (Network Block Device) — це протокол для експорту блочних пристроїв через мережу.
qemu-nbd - це NBD-сервер, який може обробляти будь-який формат диска, підтримуваний qemu (наприклад, raw,
qcow2). Ви можете використовувати libguestfs і qemu-nbd або nbdkit разом для доступу до блоку
пристрої через мережу, наприклад: "guestfish -a nbd://remote"

проти монтаж файлові системи in господар
Монтування гостьових файлових систем на хості є небезпечним і його слід повністю уникати
для ненадійних гостей. Використовуйте libguestf, щоб забезпечити рівень захисту від
експлойти файлової системи. Дивіться також guestmount(1).

проти розлучився
Libguestfs підтримує LVM. Libguestfs використовує parted і надає більшість функцій parted
через API libguestfs.

ВІДТВОРЕННЯ ДОПОМОГТИ І ЗВІТНІСТЬ БУГИ


Як do I Знати що версія Я використання?
Найпростіший спосіб:

guestfish -- версія

Розробка Libguestfs відбувається вздовж нестабільної гілки, і ми періодично створюємо файл
стабільну гілку, до якої ми переносимо стабільні патчі. Щоб дізнатися більше, прочитайте «LIBGUESTFS
НОМЕР ВЕРСІЙ" в guestfs(3).

Як може I отримати допомогти?
Що розсилки списки or чат приміщення він має доступні?
Якщо ви є клієнтом Red Hat, який використовує Red Hat Enterprise Linux, зв’яжіться з нами
Підтримка Red Hat: http://redhat.com/support

Існує список розсилки, в основному для розробки, але користувачі також можуть запитати
запитання про libguestf та інструменти virt:
https://www.redhat.com/mailman/listinfo/libguestfs

Ви також можете поговорити з нами на каналі IRC "#libguestfs" на FreeNode. Ми не завжди
навколо, тому будь ласка, залишайтеся на каналі після того, як поставите своє запитання, і хтось повернеться
до вас.

Для інших інструментів virt (не тих, які постачаються з libguestfs) є загальні інструменти virt
список розсилки: https://www.redhat.com/mailman/listinfo/virt-tools-list

Як do I звітом помилки?
Будь ласка, скористайтеся наступним посиланням, щоб ввести помилку в Bugzilla:

https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

Включіть якомога більше деталей та спосіб відтворення проблеми.

Включити повний вихід інструмент тестування libguestfs(1).

ЗАГАЛЬНИЙ ПРОБЛЕМИ


Дивіться також "LIBGUESTFS GOTCHAS" в guestfs(3) для деяких «завад» із використанням libguestfs
API.

«Могла НЕ виділяти динамічний Перекладач буфер"
Ця незрозуміла помилка насправді є збоєм SELinux. Ви повинні ввімкнути наступне
SELinux логічний:

setsebool -P virt_use_execmem=on

Для отримання додаткової інформації див. https://bugzilla.redhat.com/show_bug.cgi?id=806106.

«дитина процес померлий несподівано"
[Це повідомлення про помилку було змінено в libguestfs 1.21.18 на щось більш пояснювальне.]

Ця помилка вказує на те, що qemu не вдалося або ядро ​​хоста не може завантажитися. Щоб пройти далі
інформацію про збій, потрібно запустити:

інструмент тестування libguestfs

Якщо після використання цього ви все ще не зрозуміли збій, зв’яжіться з нами (див
розділ)

libguestfs: помилка: не може знаходити будь-який підходящий libguestfs супермін, фіксованою or старовинного стилю прилад
on LIBGUESTFS_PATH
febootstrap-supermin-helper: ext2: батько каталог НЕ знайдений
супермін-помічник: ext2: батько каталог НЕ знайдений
[Ця проблема вирішена назавжди в libguestfs ≥ 1.26.]

Якщо ви бачите будь-яку з цих помилок у Debian/Ubuntu, вам потрібно виконати таку команду:

sudo update-guestfs-appliance

«Дозвіл відмовлено" коли біг libguestfs as корінь
Під час відкриття образу диска ви отримуєте помилку «Відмовлено в дозволі», навіть якщо ви працюєте
libguestfs як root.

Це викликано libvirt, і це відбувається лише при використанні серверної частини libvirt. Коли біг
як root, libvirt вирішує запустити пристрій qemu від імені користувача "qemu.qemu". На жаль
зазвичай це означає, що qemu не може відкрити образи дисків, особливо якщо вони є
належать root або присутні в каталогах, які потребують доступу root.

Існує помилка, відкрита для libvirt, щоб виправити це:
https://bugzilla.redhat.com/show_bug.cgi?id=1045069

Ви можете обійти це одним із наступних методів:

· Перейти до прямого бекенда:

експорт LIBGUESTFS_BACKEND=прямий

· Не запускайте libguestfs як root.

· Змініть образ диска та будь-які батьківські каталоги, щоб користувач qemu мав доступ до них.

· (Неприємно) Редагувати /etc/libvirt/qemu.conf і змінити налаштування "користувач".

excl: /у цьому: дозвіл відмовлено
Примітка: Якщо ця помилка виникає, коли ви використовуєте дистрибутив libguestfs (наприклад, from
Fedora, Debian тощо), потім повідомити про помилку у дистрибутиві. Це не помилка, яка
звичайні користувачі повинні коли-небудь перевірити, чи правильно підготовлено дистрибутивний пакет.

Ця помилка виникає під час фази супермінального завантаження запуску пристрою:

supermin: встановлення нового root / корінь
супермін: chroot
execl: /init: У дозволі відмовлено
supermin: debug: каталог зі списком /
[...після великої кількості результатів налагодження...]

Це складна помилка, пов’язана з супермін(1) прилади. Прилад сконструйований
шляхом копіювання файлів, як / bin / bash і багато бібліотек від хосту. Файл "hostfiles"
перелічує файли, які слід скопіювати з хоста в пристрій. Якщо деякі файли
не існують на хості, то вони пропущені, але якщо ці файли потрібні в порядку
to (наприклад) бігти / bin / bash тоді ви побачите наведену вище помилку.

Діагностика проблеми передбачає вивчення бібліотек, необхідних для / bin / bash, тобто:

ldd / bin / bash

порівнюючи це з "hostfiles", з файлами, фактично доступними у файловій системі хоста,
і з результатом налагодження, надрукованим у повідомленні про помилку. Після того, як ви зрозумієте, який файл
відсутній, інсталюйте цей файл за допомогою диспетчера пакунків і повторіть спробу.

Ви також повинні перевірити, що файли, як /у цьому та / bin / bash (в приладі) є
виконуваний файл. Результати налагодження показують режими файлів.

ЗАВАНТАЖУВАННЯ, ВСТАНОВЛЕННЯ, КОМПІЛЯЦІЯ ЛІБГОСТІ


де може I отримати останній двійкові файли та цінності ? ...
Fedora ≥ 11
Використання:

yum install '*guestf*'

Для останніх збірок див.:
http://koji.fedoraproject.org/koji/packageinfo?packageID=8391

Red Hat Enterprise Linux
RHEL 5
Версія, що постачається в офіційному RHEL 5, дуже стара і не повинна використовуватися, крім
у поєднанні з virt-v2v. Використовуйте оновлений пакет libguestfs 1.20 в EPEL
5: https://fedoraproject.org/wiki/EPEL

RHEL 6
RHEL 7
Це частина стандартної установки. На RHEL 6 і 7 (тільки) потрібно встановити
"libguestfs-winsupport", щоб отримати гостьову підтримку Windows.

Debian і Ubuntu
Для libguestfs < 1.26, після встановлення libguestfs вам потрібно зробити:

sudo update-guestfs-appliance

(Цей скрипт видалено з Debian/Ubuntu з libguestfs ≥ 1.26, а замість нього
Прилад виготовляється на вимогу.)

Тільки в Ubuntu:

sudo chmod 0644 /boot/vmlinuz*

Можливо, вам доведеться додати себе до групи "kvm":

sudo usermod -a -G kvm ваш логін

Стиснення Debian (6)
Хілко Бенген створив libguestfs у backports squeeze:
http://packages.debian.org/search?keywords=guestfs&searchon=names§ion=all&suite=squeeze-backports

Debian Wheezy і новіші (7+)
Hilko Bengen підтримує libguestfs на Debian. Офіційні пакунки Debian є
доступно: http://packages.debian.org/search?keywords=libguestfs

Ubuntu
У нас немає постійного супроводжувача Ubuntu та пакетів, які надаються
Канонічні (які знаходяться поза нашим контролем) іноді порушуються.

Canonical вирішив змінити дозволи на ядро, щоб це не так
читається, окрім як root. Це абсолютно безглуздо, але вони цього не змінять
(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725). Отже, кожен користувач
слід зробити це:

sudo chmod 0644 /boot/vmlinuz*

Ubuntu 12.04
libguestfs у цій версії Ubuntu працює, але вам потрібно оновити febootstrap
і seabios до останніх версій.

Вам потрібен febootstrap ≥ 3.14-2 від:
http://packages.ubuntu.com/precise/febootstrap

Після встановлення або оновлення febootstrap перебудуйте пристрій:

sudo update-guestfs-appliance

Вам потрібен seabios ≥ 0.6.2-0ubuntu2.1 або ≥ 0.6.2-0ubuntu3 з:
http://packages.ubuntu.com/precise-updates/seabios or
http://packages.ubuntu.com/quantal/seabios

Також вам потрібно зробити (див. вище):

sudo chmod 0644 /boot/vmlinuz*

Gentoo
Libguestfs був доданий до Gentoo у 2012-07 роках Андрісом Виноградовим (libguestfs) і
Максим Кольцов (переважно гівекс). Зробіть:

emerge libguestfs

SUSE
Libguestfs був доданий до SuSE в 2012 році Олафом Герінгом.

ArchLinux
Libguestfs було додано до AUR у 2010 році.

Інший дистрибутив Linux
Скомпілювати з джерела (наступний розділ).

Інший дистрибутив, відмінний від Linux
Вам доведеться скомпілювати з вихідного коду та перенести його.

Як може I скласти та встановлювати libguestfs від джерело
Ви можете скомпілювати libguestfs з git або tar-архів. Перед цим прочитайте файл README
починаючи.

Git: https://github.com/libguestfs/libguestfs Джерело архіву:
http://libguestfs.org/download

Не запускайте "make install"! Використовувати "./ бігати" натомість сценарій (див. README).

Як може I скласти та встановлювати libguestfs if my дистрибутив НЕ мати new досить
qemu/supermin/ядро?
Libguestfs потрібен supermin 5. Якщо supermin 5 не був перенесений у ваш дистрибутив, див.
питання нижче.

Спочатку компілюйте qemu, supermin та/або ядро ​​з вихідного коду. Ти робиш НЕ потрібно «зробити
встановити їх.

У вихідному каталозі libguestfs створіть два файли. "localconfigure" має містити:

джерело localenv
#export PATH=/tmp/qemu/x86_64-softmmu:$PATH
./autogen.sh --префікс / usr "$@"

Зробіть "localconfigure" виконуваним.

"localenv" має містити:

#export SUPERMIN=/tmp/supermin/src/supermin
#export LIBGUESTFS_HV=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64
#export SUPERMIN_KERNEL=/tmp/linux/arch/x86/boot/bzImage
#export SUPERMIN_KERNEL_VERSION=4.XX.0
#export SUPERMIN_MODULES=/tmp/lib/modules/4.XX.0

Розкоментуйте та відкоригуйте ці рядки, якщо потрібно, щоб використовувати наявні альтернативні програми
складено.

Використовуйте "./localconfigure" замість "./configure", але в іншому випадку ви компілуєте libguestfs як
звичайно

Не запускайте "make install"! Використовувати "./ бігати" натомість сценарій (див. README).

Як може I скласти та встановлювати libguestfs без супермін?
Якщо supermin 5 підтримує ваш дистрибутив, але у вас недостатньо нового supermin
встановлено, то перегляньте попереднє запитання.

Якщо supermin 5 взагалі не підтримує ваш дистрибутив, вам потрібно буде використати «fixed
appliance method", де ви використовуєте попередньо скомпільований двійковий пристрій. Щоб створити libguestfs
без supermin вам потрібно передати "--disable-appliance --disable-daemon" будь-якому з них
./autogen.sh or . / Налаштувати (залежно від того, чи збираєтеся ви відповідно з git або
з tar-файлів). Тоді, використовуючи libguestfs, ви повинен встановити "LIBGUESTFS_PATH"
змінної середовища до каталогу попередньо скомпільованого пристрою, як також описано в
«ФІКСІЙНИЙ ПРИЛАД» в guestfs(3).

Про попередньо скомпільовані прилади див. також: http://libguestfs.org/download/binaries/appliance/.

Виправлення для перенесення supermin на більше дистрибутивів Linux вітаються.

Як може I додавати підтримка та цінності sVirt?
примітки та цінності Fedora/RHEL користувачів: Ця конфігурація є стандартною, починаючи з Fedora 18 і
RHEL 7. Якщо ви виявите якісь проблеми, будь ласка, повідомте нас або повідомте про помилку.

SVirt забезпечує загартований пристрій за допомогою SELinux, що робить його дуже важким для шахрайського диска
зображення, щоб «втекти» з обмежень libguestfs і пошкодити хост (чесно сказати
що навіть у стандартних libguestfs це було б важко, але sVirt надає додатковий рівень
захист для хоста і, що більш важливо, захищає віртуальні машини на тому самому хості
один від одного).

Наразі, щоб увімкнути sVirt, вам знадобиться libvirt ≥ 0.10.2 (бажано 1.0 або новішої версії),
libguestfs ≥ 1.20, а також політики SELinux з останньої Fedora. Якщо ти не бігаєш
Fedora 18+, вам потрібно буде внести зміни до своєї політики SELinux – зв’яжіться з нами на
список адресатів.

Коли у вас є вимоги, виконайте:

./configure --with-default-backend=libvirt # libguestfs >= 1.22
./configure --with-default-attach-method=libvirt # libguestfs <= 1.20
зробити

Встановіть SELinux у режим Enforcing, і sVirt має використовуватися автоматично.

Усі або майже всі функції libguestfs повинні працювати під sVirt. Відомий один
недолік: вірт-рятунок(1) не використовуватиме libvirt (отже, sVirt), але повертається до direct
запуск qemu. Таким чином, ви не отримаєте переваги захисту sVirt під час використання
вірт-рятунок.

Ви можете перевірити, чи використовується sVirt, увімкнувши протоколювання libvirtd (див
/etc/libvirt/libvirtd.log), знищення та перезапуск libvirtd, а також перевірка файлів журналів
для повідомлень "Встановлення контексту SELinux на ...".

Теоретично sVirt повинен підтримувати AppArmor, але ми цього не пробували. Це майже буде
звичайно вимагають виправлення libvirt і написання політики AppArmor.

Libguestfs має a насправді довго список of залежності!
Базова бібліотека мало від чого залежить, але є три причини довгого списку
інших залежностей:

1. Libguestfs повинен мати можливість читати та редагувати багато різних форматів дисків. Наприклад,
Для підтримки XFS потрібні інструменти XFS.

2. Існують мовні прив’язки для багатьох різних мов, кожна з яких потребує свого
інструменти розробки. Усі мовні прив’язки (крім C) є необов’язковими.

3. Є деякі додаткові функції бібліотеки, які можна вимкнути.

Оскільки libguestfs ≥ 1.26, можна розділити залежності пристрою (пункт 1 у
список вище) і таким чином мати (наприклад) "libguestfs-xfs" як окремий підпакет для
обробка образів дисків XFS. Ми заохочуємо пакувальників розпочати поділ бази
libguestfs розбити на менші підпакети.

помилки під час запуск on Fedora 18, RHEL 7
У Fedora ≥ 18 і RHEL ≥ 7 libguestfs використовує libvirt для керування пристроєм. Раніше
(і вище) libguestfs запускає qemu безпосередньо:

┌───────────────────────────────────┐
│ libguestfs │
├────────────────┬──────────────────┤
│ прямий бекенд │ бекенд libvirt │
└────────────────┴──────────────────┘
↓ ↓
┌────────┐ ┌──────────┐
│ qemu │ │ libvirtd │
└────────┘ └───────────┘

┌────────┐
│ qemu │
└────────┘

Upstream Fedora 18+
не Fedora RHEL 7+
не RHEL

Бекенд libvirt є більш складним, він підтримує SELinux/sVirt (див. вище),
гаряче підключення та інше. Однак він більш складний і тому менш надійний.

Якщо у вас виникли проблеми з дозволами при використанні серверної частини libvirt, ви можете переключитися на пряму
бекенд, встановивши цю змінну середовища:

експорт LIBGUESTFS_BACKEND=прямий

перед запуском будь-якої програми libguestfs або інструмента virt.

Як може I перемикання до a фіксованою / зведений прилад?
Це може покращити стабільність та продуктивність libguestfs у Fedora та RHEL.

У будь-який час після встановлення libguestfs виконайте такі команди як root:

mkdir -p /usr/local/lib/guestfs/appliance
libguestfs-make-fixed-appliance /usr/local/lib/guestfs/appliance
ls -l /usr/local/lib/guestfs/appliance

Тепер встановіть таку змінну середовища перед використанням libguestfs або будь-якого інструменту virt:

експорт LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

Звичайно, ви можете змінити шлях до будь-якого каталогу, який хочете. Ви можете спільно використовувати прилад
на машинах, які мають однакову архітектуру (наприклад, усі x86-64), але зверніть увагу, що libvirt
не дозволить вам спільно використовувати пристрій через NFS через проблеми з дозволами (так
або перейдіть на прямий бекенд, або не використовуйте NFS).

Як може I швидкість up libguestfs будує?
Найважливіше, що ви можете зробити, це встановити та правильно налаштувати Squid.
Зауважте, що конфігурація за замовчуванням, яка постачається разом із Squid, є сміттям, тому налаштовувати її
не обов'язковий.

Дуже гарне місце для початку конфігурації Squid тут:
https://fedoraproject.org/wiki/Extras/MockTricks#Using_Squid_to_Speed_Up_Mock_package_downloads

Переконайтеся, що Squid запущено, і що змінні середовища $http_proxy і $ftp_proxy
вказують на це.

Коли Squid запущено та правильно налаштовано, кількість збірок пристроїв має бути зменшена до кількох
хвилин.

Як може I швидкість up libguestfs Будує (Debian)?

Хілко Бенген пропонує використовувати "approx", який є архівним проксі-сервером Debian
(http://packages.debian.org/approx). Цей інструмент задокументовано на Debian у приблизно(8)
сторінка посібника.

ШВИДКІСТЬ, ДИСК ПРОСТІР USED BY ЛІБГОСТІ


Примітка: Більшість інформації в цьому розділі переміщено: guestfs-перформанс(1).

Завантажувати or запис здається дуже повільний.
Якщо базовий диск виділено не повністю (наприклад, sparse raw або qcow2), запис може бути
повільно, тому що операційна система хоста повинна виконувати дорогі виділення дисків, а ви
написання. Рішення полягає в тому, щоб замість цього використовувати повністю виділений формат, тобто. нерідкісний сирий, або
qcow2 з опцією "preallocation=metadata".

Libguestfs використовує занадто багато диск космос!
libguestfs кешує великий пристрій у:

/var/tmp/.guestfs-

Якщо змінна середовища "TMPDIR" визначена, то $TMPDIR/.guestfs- використовується
замість цього.

Безпечно видалити цей каталог, якщо ви не використовуєте libguestfs.

virt-sparsify Здається, до зробити зображення зростати до Повний розмір of віртуальний диск
Якщо вхід до virt-sparsify(1) є необробленим, то вихід буде необробленим. Переконайтеся
ви вимірюєте вихід за допомогою інструмента, який розуміє розрідженість, наприклад "du -sh".
Це може мати величезну різницю:

$ ls -lh test1.img
-rw-rw-r--. 1 rjones rjones 100M 8 серпня 08:08 test1.img
$ du -sh test1.img
3.6M test1.img

(Порівняйте видимий розмір 100M порівняно з фактичним розміром 3.6M)

Якщо все це вас бентежить, використовуйте нерозріджений вихідний формат, вказавши --перетворити
варіант, наприклад:

virt-sparsify --перетворити qcow2 disk.raw disk.qcow2

Чому НЕ virt-зміна розміру робота on диск зображення на місці?
Змінити розмір образу диска дуже складно - особливо переконайтеся, що ви не втратите дані або
зламати завантажувач. Поточний метод ефективно створює новий образ диска та копіює
дані плюс завантажувач зі старого. Якщо щось піде не так, ви завжди можете піти
повернутися до оригіналу.

Якби ми повинні були змусити virt-resize працювати на місці, то повинні були б бути обмеження: for
Наприклад, вам не буде дозволено переміщувати існуючі розділи (оскільки переміщення даних через
той самий диск, швидше за все, пошкодить дані у разі збою або збою),
і LVM було б дуже важко підтримувати (через майже довільне відображення
між вмістом LV і базовими дисковими блоками).

Інший метод, який ми розглянули, полягає в тому, щоб розмістити знімок поверх оригінального образу диска
що вихідні дані залишаються недоторканими, а на знімку записуються лише відмінності.
Ви можете зробити це сьогодні, використовуючи "qemu-img create" + "virt-resize", але qemu наразі не є
достатньо розумний, щоб розпізнати, коли той самий блок записується назад у знімок, як і раніше
існує на резервному диску, тому ви побачите, що це не заощаджує ні місця, ні часу.

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

Чому НЕ virt-sparsify робота on диск зображення на місці?
У libguestfs ≥ 1.26 virt-sparsify тепер може працювати з образами дисків на місці. Використовуйте:

virt-sparsify --на місці disk.img

Але спочатку ви повинні прочитати «РІЗДІВЛЕННЯ НА МІСЦІ». virt-sparsify(1).

ПРОБЛЕМИ ВІДКРИТТЯ ДИСК ФОТО


віддалений лібвірт Гості не може be відкрили.
Відкриття віддалених гостей libvirt наразі не підтримується. Наприклад, це не спрацює:

guestfish -c qemu://remote/system -d Гість

Щоб відкрити віддалені диски, вам потрібно якось експортувати їх, а потім підключитися до експорту. Для
наприклад, якщо ви вирішили використовувати NBD:

віддалений$ qemu-nbd -t -p 10809 guest.img
локальний$ guestfish -a nbd://remote:10809 -i

Інші можливості включають ssh (якщо qemu досить свіжий), NFS або iSCSI. Дивіться «ДИСТАНЦІЙНО
ЗБЕРІГАННЯ» в guestfs(3).

Як може I відкрити це дивний диск джерело
У вас є образ диска, розташований всередині іншої системи, до якої потрібен доступ через бібліотеку /
HTTP / REST / власний API, або стиснутий або заархівований якимось чином. (Один приклад
буде віддаленим доступом до образів OpenStack без фактичного завантаження.)

У нас є дочірній проект під назвою nbdkit (https://github.com/libguestfs/nbdkit). Це
проект дозволяє перетворити будь-яке джерело диска в сервер NBD. Libguestfs може отримати доступ до NBD
сервери безпосередньо, наприклад:

guestfish -a nbd://remote

nbdkit має вільну ліцензію, тому ви можете зв'язати його з власними бібліотеками або включити до нього
і код. Він також має простий, стабільний API плагінів, щоб ви могли легко писати плагіни
API, який працюватиме й надалі.

помилка відкриття VMDK диски: «використання a vmdk особливість який is НЕ підтриманий by це qemu версія:
VMDK версія 3"
Qemu (і, отже, libguestfs) підтримує лише певні образи дисків VMDK. Інші не працюватимуть,
надання цієї чи подібних помилок.

В ідеалі хтось виправив би qemu для підтримки останніх функцій VMDK, але тим часом
у вас є три варіанти:

1. Якщо гість розміщено на доступному сервері ESX в реальному часі, знайдіть і завантажте
образ диска називається somename-flat.vmdk. Незважаючи на назву, це необроблений образ диска, і
можна відкрити чим завгодно.

Якщо у вас є досить остання версія qemu та libguestfs, можливо, ви зможете
отримати доступ до цього образу диска віддалено за допомогою HTTPS або ssh. Див. "ДИСТАНЦІЙНЕ ЗБЕРІГАННЯ" в
guestfs(3).

2. Використовуйте власний інструмент VMware vdiskmanager, щоб перетворити зображення в необроблений формат.

3. Використовуйте nbdkit із запатентованим плагіном VDDK для живого експорту образу диска як NBD
джерело. Це дозволить вам читати та записувати файл VMDK.

UFS диски (як використовуваний by BSD) не може be відкрили.
Формат файлової системи UFS має багато варіантів, і вони не самоідентифікуються. The
Ядро Linux має бути вказано, який варіант UFS воно має використовувати, а який libguestfs не може
знаю.

Ви повинні передати правильний параметр монтування "ufstype" під час монтування цих файлових систем.

Дивіться https://www.kernel.org/doc/Documentation/filesystems/ufs.txt

Windows Роботах
Windows ReFS — це копія Microsoft ZFS/Btrfs. Ця файлова система ще не була зворотною
розроблено та реалізовано в ядрі Linux, тому libguestfs не підтримує
це. На даний момент здається дуже рідкісним «в дикій природі».

Не ASCII символи НЕ з'являтися on VFAT файлові системи.
Типові симптоми цієї проблеми:

· Ви отримуєте помилку, коли створюєте файл, ім'я якого не містить ASCII
символи, особливо не 8-бітові символи азіатських мов (китайська, японська,
тощо). Файлова система VFAT.

· Коли ви перераховуєте каталог із файлової системи VFAT, імена файлів відображаються як знаки питання.

Це недолік дизайну системи GNU/Linux.

VFAT зберігає довгі імена файлів у вигляді символів UTF-16. Під час відкриття або повернення імен файлів, файл
Ядро Linux має перевести їх у якусь форму 8-розрядного рядка. UTF-8 буде
очевидний вибір, за винятком користувачів Linux, які продовжують використовувати мовні стандарти, відмінні від UTF-8 (користувач
локаль не відома ядру, оскільки вона є функцією libc).

Тому ви повинні сказати ядру, який переклад ви хочете зробити, коли ви монтуєте файл
файлова система. Ці два методи є параметром "iocharset" (який не має відношення до
libguestfs) і прапор «utf8».

Отже, щоб використовувати файлову систему VFAT, ви повинні додати прапор «utf8» під час монтування. Від риби гостя,
використання:

> параметри монтування utf8 /dev/sda1 /

або в командному рядку guestfish:

guestfish [...] -m /dev/sda1:/:utf8

або з API:

guestfs_mount_options (g, "utf8", "/dev/sda1", "/");

Потім ядро ​​перекладатиме імена файлів у рядки UTF-8 та з них.

Ми розглядали можливість додавання цього варіанту кріплення прозоро, але, на жаль, їх є кілька
проблеми з цим:

· У деяких системах Linux параметр монтування "utf8" не працює. Ми не точно
зрозуміти, які системи і чому, але про це достовірно повідомив один користувач.

· Це завадить вам використовувати параметр "iocharset", оскільки він несумісний
з "utf8". Використовувати цей параметр, напевно, не дуже добре, але ми не хочемо
щоб запобігти цьому.

Не ASCII символи з'являтися as підкреслювати (_) on ISO9660 файлові системи.
Файлова система була підготовлена ​​неправильно за допомогою mkisofs або genisoimage. Переконайтеся, що
файлова система була створена з використанням розширень Joliet та/або Rock Ridge. libguestfs ні
потрібні спеціальні параметри монтування для роботи з файловою системою.

Не можу відкрити Windows Гості який використання NTFS.
Ви бачите такі помилки:

монтування: невідомий тип файлової системи 'ntfs'

У Red Hat Enterprise Linux або CentOS вам потрібно встановити libguestfs-winsupport
пакет.

Не можу відкрити or інспектувати RHEL 7 гостей.
Не можу відкрити Linux Гості який використання XFS.
Гості RHEL 7 та будь-які інші гості, які використовують XFS, можуть бути відкриті libguestfs, але ви
необхідно встановити пакет "libguestfs-xfs".

ВИКОРИСТАННЯ ЛІБГОСТІ IN ПЕЖО ВЛАСНИЙ ПРОГРАМИ


Команда API має сотні of методи, де do I почати?
Рекомендуємо почати з огляду API: «ОГЛЯД API». guestfs(3).

Хоча огляд API охоплює API C, його все одно варто прочитати, навіть якщо ви
збираюся використовувати іншу мову програмування, тому що API той самий, тільки з простим
логічні зміни назв дзвінків:

C guestfs_ln_sf (g, ціль, ім'я посилання);
Python g.ln_sf (ціль, ім'я посилання);
OCaml g#ln_sf цільове посилання;
Perl $g->ln_sf (ціль, ім'я посилання);
Назва цільового посилання оболонки (gostfish) ln-sf
PHP guestfs_ln_sf ($g, $target, $linkname);

Після того, як ви ознайомилися з оглядом API, ви повинні подивитися на цей список для початку
пункти для інших мовних прив'язок: "ВИКОРИСТАННЯ LIBGUESTFS З ІНШИМИ МОВАМИ ПРОГРАМУВАННЯ" в
guestfs(3).

Може I використання libguestfs in my власником / закрито джерело / комерційний програми?
Загалом, так. Однак це не юридична порада – прочитайте ліцензію, яка додається
libguestfs, а якщо у вас є конкретні запитання, зверніться до юриста.

У дереві джерел ліцензія знаходиться у файлі "COPYING.LIB" (LGPLv2+ для бібліотеки та
прив’язки) та «КОПІЮВАННЯ» (GPLv2+ для автономних програм).

ВІДМОВЛЕННЯ ЛІБГОСТІ


Допомога, це НЕ працює!
Якщо здається, що жодна програма libguestfs не працює взагалі, запустіть програму нижче та вставте файл
повний, невідредагований вивести в електронний лист на адресу "libguestfs" @ "redhat.com":

інструмент тестування libguestfs

Якщо конкретна операція не вдається, надайте всю інформацію з цього контрольного списку в електронному листі
до "libguestfs" @ "redhat.com":

1. Що ти намагаєшся зробити?

2. Яку саме команду(и) ви виконували?

3. Якою була точна помилка чи результат цих команд?

4. Увімкніть налагодження, запустіть команди ще раз і зафіксуйте повний вихід. Do НЕ
редагувати вихід.

експорт LIBGUESTFS_DEBUG=1
експорт LIBGUESTFS_TRACE=1

5. Укажіть версію libguestfs, версію операційної системи та спосіб встановлення
libguestfs (наприклад, з джерела, "yum install" тощо)

Як do I відлагоджувати коли використання будь-який libguestfs програма or інструмент (напр. virt-v2v or virt-df)?
Є дві змінні середовища "LIBGUESTFS_*", які ви можете встановити, щоб отримати більше
інформація з libguestf.

"LIBGUESTFS_TRACE"
Встановіть для цього значення 1, і libguestfs буде друкувати кожну команду/виклик API у форматі, який
схожий на команди guestfish.

"LIBGUESTFS_DEBUG"
Встановіть для цього значення 1, щоб увімкнути велику кількість повідомлень про налагодження. Якщо ти думаєш
є проблема всередині пристрою libguestfs, то вам слід скористатися цим
варіант.

Щоб встановити їх із оболонки, зробіть це перед запуском програми:

експорт LIBGUESTFS_TRACE=1
експорт LIBGUESTFS_DEBUG=1

Для csh/tcsh еквівалентними командами будуть:

setenv LIBGUESTFS_TRACE 1
setenv LIBGUESTFS_DEBUG 1

Для отримання додаткової інформації див.: «ЗМІННІ СЕРЕДОВИЩА» в guestfs(3).

Як do I відлагоджувати коли використання риба-гость?
Ви можете використовувати ті самі змінні середовища, наведені вище. В якості альтернативи можна використовувати варіанти риби-гостєві
-x (для відстеження команд) або -v (щоб отримати повний результат налагодження), або обидва.

Для отримання додаткової інформації див.: риба-гость(1).

Як do I відлагоджувати коли використання API?
Викличте "guestfs_set_trace". guestfs(3) щоб увімкнути трасування команд, та/або
"guestfs_set_verbose" в guestfs(3) щоб увімкнути повідомлення про налагодження.

Для досягнення найкращих результатів викликайте ці функції якомога раніше, відразу після створення
guestfs обробляє, якщо можете, і обов’язково перед викликом launch.

Як do I захоплення відлагоджувати вихід та put it в my каротаж система?
Використовуйте API подій. Для прикладів див.: «НАСТРОЮВАННЯ Зворотного виклику ДЛЯ ОБРАЩУВАННЯ ПОДІЙ» в guestfs(3)
і examples/debug-logging.c програму в джерелах libguestfs.

Риття глибше в прилад черевик процесу.
Увімкніть налагодження, а потім прочитайте цю документацію щодо процесу завантаження пристрою:
guestfs-internals(1).

libguestfs висить or зазнає невдачі під час запустити/запустити.
Увімкніть налагодження та подивіться на повний результат. Якщо ви не можете зрозуміти, що відбувається,
подати звіт про помилку, у тому числі повний вихід з інструмент тестування libguestfs(1).

Налагодження лібвірт
Якщо ви використовуєте бекенд libvirt, і libvirt не працює, ви можете ввімкнути
налагодження шляхом редагування /etc/libvirt/libvirtd.conf.

Якщо ви працюєте як не-root, вам доведеться відредагувати інший файл. Створюйте
~/.config/libvirt/libvirtd.conf містить:

log_level=1
log_outputs="1:file:/tmp/libvirtd.log"

Вимкніть будь-який сеанс (не root) libvirtd, який запущено, і наступного разу ви запустите libguestfs
команді, ви повинні побачити велику кількість корисної налагоджувальної інформації з libvirtd
/tmp/libvirtd.log

ДИЗАЙН/ВНУТРІШНІСТЬ OF ЛІБГОСТІ


Дивіться також guestfs-internals(1).

Чому НЕ ви do все через FUSE / файлова система інтерфейс?
Ми пропонуємо команду під назвою guestmount(1), який дозволяє монтувати гостьові файлові системи на
господар. Це реалізовано як модуль FUSE. Чому б нам просто не реалізувати все
libguestfs, що використовує цей механізм, замість того, щоб мати великий і досить складний API?

Причини дві. По-перше, libguestfs пропонує виклики API для таких речей, як
створення та видалення розділів і логічних томів, які не вписуються у файлову систему
модель дуже легко. Точніше, ви можете вмістити їх: наприклад, створити розділ
може бути зіставлено з "mkdir /fs/hda1", але тоді вам доведеться вказати якийсь метод для вибору
розмір розділу (можливо, "echo 100M > /fs/hda1/.size") і тип розділу,
початковий та кінцевий сектори тощо, але як тільки ви це зробите, API на основі файлової системи починає працювати
виглядають складнішими, ніж API на основі викликів, який ми зараз маємо.

Друга причина – ефективність. FUSE сам по собі досить ефективний, але він діє
здійснювати багато невеликих незалежних викликів до модуля FUSE. У guestmount ці повинні
транслюватися в повідомлення на пристрій libguestfs, який має великі накладні витрати (за часом
та поїздки туди й назад). Наприклад, читання файлу 64 Кбайт фрагментами є неефективним, оскільки кожен
chunk перетвориться на одну поїздку туди й назад. В libguestfs API це набагато більше
ефективно завантажувати весь файл або каталог за допомогою одного з потокових викликів, наприклад
"guestfs_download" або "guestfs_tar_out".

Чому НЕ ви do все через GVFS?
Проблеми подібні до проблем із FUSE.

GVFS є кращою абстракцією, ніж POSIX/FUSE. Існує сервер FTP для GVFS, який є
обнадійливо, оскільки FTP концептуально схожий на API libguestfs. Однак GVFS
Бекенд FTP створює кілька одночасних підключень, щоб підтримувати інтерактивність, що
ми не можемо легко зробити з libguestfs.

Чому може I запис до диск навіть хоча I доданий it лише для читання?
Чому робить "--ro" з'являтися до мати немає ефект?
Коли ви додаєте диск, доступний лише для читання, libguestfs розміщує накладення для запису поверх файлу
базовий диск. Записи входять до цього накладання і відкидаються, коли ручка закрита
(або «риба-гость» тощо виходить).

Є дві причини зробити це таким чином: по-перше, диски лише для читання неможливі
у багатьох випадках (наприклад, IDE просто не підтримує їх, тому ви не можете мати IDE-емульований
диск тільки для читання, хоча це не часто зустрічається в реальних установках libguestfs).

По-друге, і що важливіше, навіть якби диски тільки для читання були можливі, ви б не хотіли
їх. Монтування будь-якої файлової системи, яка має журнал, навіть "mount -o ro", викликає запис
файлову систему, тому що журнал потрібно відтворити та оновити метадані. Якщо диск
був дійсно доступним лише для читання, ви не зможете змонтувати брудну файлову систему.

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

Зауважте також, що для цього існує тест регресії під час створення libguestfs (in
"тести/qemu"). Це одна з причин, чому для пакувальників важливо запустити набір тестів.

Лі "--ro" зробити всі диски лише для читання?
Ні! Параметр «--ro» впливає лише на диски, додані в командному рядку, тобто. використовуючи "-a" і
Параметри "-d".

У guestfish, якщо ви використовуєте команду «додати», диск додається для читання-запису (якщо ви
явно вкажіть прапор "readonly:true" за допомогою команди).

Може I використання «риба-гость --ro" as a шлях до резервна копія my віртуальний машини?
Зазвичай це так НЕ гарна ідея. Більш детальну відповідь на це питання надано в цьому розсилці
розміщення списку: https://www.redhat.com/archives/libguestfs/2010-August/msg00024.html

Дивіться також наступне запитання.

Чому не можу I пробіг FSCK on a жити файлова система використання «риба-гость --ро"?
Ця команда зазвичай НЕ робота:

guestfish --ro -a /dev/vg/my_root_fs запуск: fsck /dev/sda

Причина цього в тому, що qemu створює знімок вихідної файлової системи, але це
не створює суворий моментальний знімок. Блоки даних на базі
файлову систему qemu зчитує в різний час у міру виконання операції fsck з хостом
пише посередині. Результатом є те, що fsck бачить масову корупцію (уявну, а не реальну!)
і не вдається.

Що вам потрібно зробити, це створити моментальний знімок. Якщо це логічний том, використовуйте
знімок LVM2. Якщо файлова система розташована всередині чогось на зразок файлу btrfs/ZFS,
використовуйте знімок btrfs/ZFS, а потім запустіть fsck на знімку. На практиці ви цього не робите
для цього потрібно використовувати libguestfs -- просто запустіть /sbin/fsck безпосередньо.

Створення моментальних знімків хост-пристроїв і файлів виходить за рамки
libguestfs, хоча libguestfs можуть працювати з ними після їх створення.

Що різниця між риба-гость та вірт-рятунок?
Багато людей збентежені двома зовні подібними інструментами, які ми пропонуємо:

$ guestfish --ro -a guest.img
> бігти
> fsck /dev/sda1

$ virt-rescue --ro guest.img
> /sbin/fsck / dev / sda1

І пов’язане питання, яке потім виникає, полягає в тому, чому ви не можете вводити повні команди оболонки
з усіма параметрами --опціями в guestfish (але ви можете в вірт-рятунок(1)).

риба-гость(1) – це програма, що надає структурований доступ до guestfs(3) API. Буває
бути також приємною інтерактивною оболонкою, але її основна мета — структурований доступ з
скрипти оболонки. Думайте про це більше як про мовну прив’язку, як Python та інші прив’язки,
але для оболонки. Ключовий фактор диференціації guestfish (і API libguestfs в
загальне) — це здатність автоматизувати зміни.

вірт-рятунок(1) – це вільний для всіх спосіб завантаження пристрою libguestfs і створення
довільні зміни у вашій віртуальній машині. Він не структурований, ви не можете його автоматизувати, але для виготовлення
швидкі спеціальні виправлення для ваших гостей, це може бути дуже корисним.

Але libguestfs також має «задний хід» у пристрій, що дозволяє надсилати довільні
команди оболонки. Він не такий гнучкий, як virt-rescue, тому що ви не можете взаємодіяти з
команди оболонки, але це все одно:

> налагодити sh "cmd arg1 arg2 ..."

Зауважте, що ви повинні НЕ покладатися на це. У майбутньому його можна видалити або змінити. Якщо ти
програма потребує певної операції, додайте її до API libguestfs.

Що угода з «риба-гость -я"?
Чому робить вірт-кіт тільки робота on a реальний VM зображення, але virt-df працює on будь-який диск зображення?
Що робить "немає корінь пристрій знайдений in це операційний система зображення" значить?
Усі ці питання пов’язані на фундаментальному рівні, який може бути не відразу
очевидний.

В guestfs(3) Рівень API, «образ диска» — це просто купа розділів і файлових систем.

На противагу цьому, коли віртуальна машина завантажується, вона монтує ці файлові системи в узгоджену
ієрархія, така як:

/ (/dev/sda2)

├── / boot (/dev/sda1)

├── / Головна (/dev/vg_external/Homes)

├── / usr (/dev/vg_os/lv_usr)

└── / var (/dev/vg_os/lv_var)

(або літери дисків у Windows).

API в першу чергу бачить образ диска на рівні «купи файлових систем». Але це також
має спосіб перевірити образ диска, щоб побачити, чи містить він операційну систему, і як
диски монтуються під час завантаження операційної системи: «ПЕРЕВІРКА» в guestfs(3).

Користувачі очікують деяких інструментів (наприклад вірт-кіт(1)) для роботи з шляхами ВМ:

virt-cat fedora.img /var/log/messages

Звідки virt-cat це знає / var це окремий розділ? Підступ у тому, що вірт-кіт
виконує перевірку образу диска і використовує це для правильного перекладу шляху.

Деякі інструменти (в т.ч вірт-кіт(1) virt-edit(1) virt-ls(1)) використовуйте інспекцію для відображення VM
шляхи. Інші інструменти, наприклад virt-df(1) і virt-файлові системи(1) повністю функціонувати на
необроблений рівень "великої купи файлових систем" API libguestfs і не використовуйте перевірку.

риба-гость(1) знаходиться на цікавій середині. Якщо ви використовуєте -a та -m командного рядка
параметри, тоді ви повинні вказати guestfish, як саме додавати образи дисків і куди монтувати
перегородки. Це вихідний рівень API.

Якщо ви використовуєте -i Опція libguestfs виконує перевірку та монтує файлові системи для
Вас.

Помилка «в цьому образі операційної системи не знайдено кореневого пристрою» пов’язана з цим. Це
означає, що перевірка не змогла знайти операційну систему у наданому вами образі диска
це. Ви можете побачити це в таких програмах, як virt-cat, якщо спробуєте запустити їх на чомусь
це просто образ диска, а не образ диска віртуальної машини.

Що do ці "відлагоджувати*" та "внутрішній-*" Функції робити?
Є деякі функції, які використовуються для налагодження та внутрішні цілі НЕ
частина стабільного API.

Функції "debug*" (або "guestfs_debug*"), насамперед "guestfs_debug" у guestfs(3) і
кілька інших, використовуються для налагодження libguestfs. Хоча вони не є частиною
стабільний API і, таким чином, може бути змінений або видалений в будь-який час, деякі програми можуть захотіти викликати
вони в очікуванні додавання функцій до libguestfs.

Функції "internal-*" (або "guestfs_internal_*") призначені виключно для використання libguestfs
себе. Програми не повинні викликати їх, і програми не повинні намагатися використовувати
їх. Їх використання часто призведе до поганих речей, а також не буде частиною цього
документований стабільний API.

РОЗРОБНИКИ


де do I послати патчі?
Будь ласка, надсилайте патчі до списку розсилки libguestfs
https://www.redhat.com/mailman/listinfo/libguestfs. You don't have to be subscribed, but
буде затримка, доки ваша публікація не буде затверджена вручну.

будь ласка НЕ використання GitHub тягнути запитів - вони волі be ігноруються. Причини: (а) ми хочемо
для обговорення та аналізу виправлень у списку розсилки, і (b) запити на витяг github перетворюються на
коміти злиття, але ми вважаємо за краще мати лінійну історію.

Як do I пропонувати a особливість?
Великі нові функції, які ви маєте намір надати, слід обговорити в списку розсилки
спочатку (https://www.redhat.com/mailman/listinfo/libguestfs). Це дозволяє уникнути розчарувань
і марна робота, якщо ми не думаємо, що ця функція вписується в проект libguestfs.

Якщо ви хочете запропонувати корисну функцію, але не хочете писати код, ви можете подати файл a
помилка (див. «ОТРИМАННЯ ДОПОМОГИ ТА ПОВІДОМЛЕННЯ ПРО ПОМИЛКИ») із «RFE: « на початку резюме
лінія.

Хто може commit до libguestfs git?
Близько 5 людей мають доступ до github. Патчі слід опублікувати в списку першими
і ACKed. Політика для підтвердження та натискання патчів описана тут:

https://www.redhat.com/archives/libguestfs/2012-January/msg00023.html

Може I вилка libguestfs?
Звичайно, ви можете. Git полегшує форк libguestfs. Github робить це ще простіше.
Приємно, якщо ви розкажете нам у списку розсилки про форки та причини їх виникнення.

РІЗНЕ ПИТАННЯ


Може I контролювати жити диск діяльність of a віртуальний машина використання libguestfs?
Поширеним запитом є можливість використовувати libguestfs для моніторингу активності живого диска a
Гість, наприклад, щоб отримувати сповіщення щоразу, коли гість створює новий файл. Libguestfs
робить НЕ працювати так, як деякі люди уявляють, як ви можете бачити з цієї діаграми:

┌──────────────────────────────────────┐
│ програма моніторингу за допомогою libguestfs │
└──────────────────────────────────────┘

┌───────────┐ ┌───────────────────────┐
│ Live VM │ │ libguestfs appliance │
├────────────┤ ├──────────────────────┤
│ ядро ​​(1)│ │ ядро ​​пристрою (2) │
└────────────┘ └─────────────────────────┘
↓ ↓ (з'єднання r/o)
┌───────────────────────┐
| образ диска |
└───────────────────────┘

Цей сценарій безпечний (якщо ви встановите прапор «лише для читання» під час додавання диска).
Однак ядро ​​пристрою libguestfs (2) не бачить усіх змін, внесених на диск
зображення з двох причин:

я Ядро ВМ (1) може кешувати дані в пам'яті, тому вони не відображаються в образі диска.

ii. Ядро пристрою libguestfs (2) не очікує, що образ диска змінюється
під ним, тому його власний кеш не оновлюється чарівним чином, навіть якщо ядро ​​ВМ (1)
оновлює образ диска.

Єдиним підтримуваним рішенням є перезавантаження всього пристрою libguestfs щоразу
хочете подивитися на зміни в образі диска. На рівні API, що відповідає виклику
"guestfs_shutdown", а потім "guestfs_launch", яка є важкою операцією (див.
Також guestfs-перформанс(3)).

Є деякі непідтримувані хаки, які ви можете спробувати, якщо перезапуск пристрою дійсно теж
дорого:

· Викликати "guestfs_drop_caches (g, 3)". Це призводить до допомоги всім кешованим даним від libguestf
ядро пристрою (2), яке потрібно відкинути, тому воно повертається до образу диска.

Однак цього само по собі недостатньо, оскільки qemu також кешує деякі дані. ти
також потрібно буде виправити libguestfs, щоб (знову) увімкнути режим "cache=unsafe". Подивитися:
https://rwmj.wordpress.com/2013/09/02/new-in-libguestfs-allow-cache-mode-to-be-selected/

· Натомість використовуйте такий інструмент, як virt-bmap.

· Запустіть агента всередині гостя.

Ніщо не допомагає, якщо гість вносить більш фундаментальні зміни (наприклад, видаляє файлові системи).
Для таких речей необхідно перезапустити пристрій.

(Зауважте, що існує третя проблема, для перевірки якої вам потрібно використовувати послідовні знімки
живі образи дисків, але це загальна проблема з використанням libguestfs проти будь-якого живого диска
зображення.)

Використовуйте guestfs-faq онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad