英語フランス語スペイン語

Ad


OnWorksファビコン

guestfs-faq - クラウドでのオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーター上の OnWorks 無料ホスティング プロバイダーで guestfs-faq を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド guestfs-faq です。

プログラム:

NAME


guestfs-faq - libguestfs よくある質問 (FAQ)

わたしたち リブゲストFS


この試験は is libguestfs?
libguestfs は、ディスク イメージを作成、アクセス、および変更するための方法です。 ディスクの中を見ることができます
画像、それに含まれるファイルの変更、最初からの作成、サイズ変更など
もっと。 これは、スクリプトやプログラム、コマンド ラインから特に便利です。

libguestfs は C ライブラリ (したがって「lib-」) であり、このライブラリに基づいて構築されたツールのセットです。
多くの一般的なプログラミング言語のバインディング。

libguestfs でできることの詳細については、ホームページの概要を読んでください。
(http://libguestfs.org).

この試験は     美徳 ツール?
仮想ツール (Web サイト: http://virt-tools.org) は仮想化管理のセット全体です
システム管理者向けのツール。 それらの一部は libguestfs から取得され、一部は libguestfs から取得されます。
libvirt やその他のオープンソース プロジェクトの多くのプロジェクト。 したがって、virt tools は次のスーパーセットです。
libguestfs。 ただし、libguestfs には多くの重要なツールが付属しています。 見る
http://libguestfs.org 完全なリスト。

libguestfs 必要 { libvirt / KVM / レッド 帽子 / フェドーラ }?
違う!

libvirt は libguestfs の要件ではありません。

libguestfs は、VMware、KVM、qemu で作成されたものを含む、あらゆるディスク イメージで動作します。
VirtualBox、Xen、その他多くのハイパーバイザー、および最初から作成したハイパーバイザー。

Red Hat は、libguestfs およびその他の膨大な数のオープンな開発のスポンサー (つまり、費用を支払い) を行っています。
ソースプロジェクト。 ただし、libguestfs と virt ツールはさまざまな Linux 上で実行できます。
私たちはすべての Linux ディストリビューションをファーストクラスとしてサポートできるよう最善を尽くしています。
国民。 一部の virt ツールは Windows に移植されています。

認定条件 ありません libguestfs 比較します 〜へ 他の ツール?
kpartx
Libguestfs は、kpartx とは異なるアプローチを採用しています。 kpartx には root とマウントが必要です
ホスト カーネル上のファイル システム (安全でない可能性があります - を参照) ゲストのセキュリティ(1))。
Libguestfs はホスト カーネルをゲストから分離し、より柔軟でスクリプト可能であり、
LVM をサポートし、root を必要とせず、他のプロセスから分離され、クリーンアップします。
それ自体の後。 Libguestfs は、次の目的で使用できるため、単なるファイル アクセスではありません。
ゼロからイメージを作成します。

vdfuse
vdfuse は kpartx に似ていますが、VirtualBox イメージ用です。 上記の kpartx の比較を参照してください。
vdfuse によって公開されるパーティション ファイルに対して libguestfs を使用することはできますが、そうではありません。
libguestfs は VirtualBox イメージに直接アクセスできるため、これが必要です。

qemu-nbd
NBD (Network Block Device) は、ネットワーク経由でブロック デバイスをエクスポートするためのプロトコルです。
qemu-nbd は、qemu でサポートされているあらゆるディスク形式 (raw、
qcow2)。 libguestfs と qemu-nbd または nbdkit を一緒に使用してブロックにアクセスできます
ネットワーク上のデバイス、例: "guestfish -a nbd://remote"

取り付け ファイルシステム in   host
ゲスト ファイルシステムをホストにマウントすることは安全ではないため、完全に回避する必要があります。
信頼できないゲスト向け。 libguestfs を使用して、
ファイルシステムの悪用。 こちらも参照 ゲストマウントとします。

parted
Libguestfs は LVM をサポートします。 Libguestfs は Parted を使用し、ほとんどの Parted 機能を提供します
libguestfs API を介して。

取得 ヘルプ そして 報告 バグ


認定条件 do I 知っています バージョン アイム 使用していますか?
最も簡単な方法は次のとおりです。

ゲストフィッシュ --バージョン

Libguestfs の開発は不安定なブランチに沿って行われ、定期的に
安定したパッチをバックポートする安定したブランチ。 詳細については、「LIBGUESTFS」を参照してください。
バージョン番号」 ゲストとします。

認定条件 できる I 取得する HELP?
この試験は 郵送 lists or チャット お部屋   利用可能?
Red Hat Enterprise Linux を使用している Red Hat のお客様は、お問い合わせください。
レッドハットサポート: http://redhat.com/support

主に開発用のメーリング リストがありますが、ユーザーからの質問も歓迎します。
libguestfs と virt ツールに関する質問:
https://www.redhat.com/mailman/listinfo/libguestfs

FreeNode の IRC チャネル「#libguestfs」で話しかけることもできます。 いつもそうであるわけではありません
質問した後もチャンネルに留まってください。そうすれば誰かが返信します
あなたに。

他の仮想ツール (libguestfs で提供されるものではない) については、一般的な仮想ツールがあります。
メーリングリスト: 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-テストツールとします。

COMMON 問題


「LIBGUESTFS GOTCHAS」も参照してください。 ゲスト(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: エラー: find どれか 適当 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」として実行することを決定します。 残念ながら
これは通常、特にディスク イメージが
root によって所有されているか、root アクセスを必要とするディレクトリに存在します。

これを修正するために、libvirt に対して未解決のバグがあります。
https://bugzilla.redhat.com/show_bug.cgi?id=1045069

この問題は、次のいずれかの方法で回避できます。

· ダイレクト バックエンドに切り替えます。

エクスポート LIBGUESTFS_BACKEND=直接

· libguestfs を root として実行しないでください。

· qemu ユーザーがアクセスできるように、ディスク イメージと親ディレクトリを chmod します。

· (厄介な) 編集 /etc/libvirt/qemu.conf 「ユーザー」の設定を変更します。

実行: /初期化: 許可 否定された
注: libguestfs のディストリビューション パッケージ (例:
Fedora、Debian など) その後、ディストリビューションに対してバグを報告します。 これはエラーではありません
通常のユーザーは、ディストリビューション パッケージが正しく準備されているかどうかを確認する必要があります。

このエラーは、アプライアンスを起動するスーパーミン ブート フェーズ中に発生します。

supermin: 新しいルートをマウントします /ルート
スーパーミン: chroot
execl: /init: アクセス許可が拒否されました
スーパーミン: デバッグ: ディレクトリのリスト /
[...その後に大量のデバッグ出力が続きます...]

これは、次のような複雑なバグです。 スーパーミン(1) 家電製品。 アプライアンスが構築されています
次のようなファイルをコピーすることで、 /bin/bash ホストからの多くのライブラリ。 ファイル「hostfiles」
に、ホストからアプライアンスにコピーする必要があるファイルをリストします。 いくつかのファイルの場合
ホスト上に存在しない場合は失われますが、これらのファイルが順番に必要な場合は、
(例) 走る /bin/bash 上記のエラーが表示されます。

問題を診断するには、必要なライブラリを調査する必要があります。 /bin/bash、つまり:

ldd /bin/bash

それを「hostfile」、つまりホストファイルシステムで実際に利用可能なファイルと比較します。
エラー メッセージにデバッグ出力が出力されます。 どのファイルを特定したら
が見つからない場合は、パッケージ マネージャーを使用してそのファイルをインストールし、再試行してください。

次のようなファイルも確認する必要があります。 /初期化 & /bin/bash (アプライアンス内で)
実行可能。 デバッグ出力にはファイル モードが表示されます。

ダウンロード中、 インストール中、 コンパイル リブゲストFS


場所 できる I 取得する   最新の バイナリ for ...?
フェドーラ ≥ 11
使用します。

yum インストール '*guestf*'

最新のビルドについては、以下を参照してください。
http://koji.fedoraproject.org/koji/packageinfo?パッケージID=8391

Red Hat Enterprise Linux
RHEL 5
公式 RHEL 5 に同梱されているバージョンは非常に古いため、次の場合以外には使用しないでください。
virt-v2v と組み合わせて使用​​します。 EPEL で最新の libguestfs 1.20 パッケージを使用する
5: https://fedoraproject.org/wiki/EPEL

RHEL 6
RHEL 7
これはデフォルトのインストールの一部です。 RHEL 6 および 7 (のみ) では、インストールする必要があります
Windows ゲストのサポートを取得するには、「libguestfs-winsupport」を使用します。

DebianとUbuntu
libguestfs < 1.26 の場合、libguestfs をインストールした後、次のことを行う必要があります。

sudo update-guestfs-appliance

(このスクリプトは、libguestfs ≥ 1.26 を使用する Debian/Ubuntu では削除され、代わりに
アプライアンスはオンデマンドで構築されます。)

Ubuntu のみ:

sudo chmod 0644 /boot/vmlinuz*

「kvm」グループに自分自身を追加する必要がある場合があります。

sudo usermod -a -G kvm yourlogin

Debian Squeeze(6)
Hilko Bengen は、squeeze バックポートに libguestfs を構築しました。
http://packages.debian.org/search?keywords=guestfs&searchon=names§ion=all&suite=squeeze-backports

Debian Wheezy 以降 (7+)
Hilko Bengen は Debian で libguestfs をサポートしています。 公式の Debian パッケージは、
入手可能: http://packages.debian.org/search?キーワード=libguestfs

Ubuntu
私たちにはフルタイムの Ubuntu メンテナーがいないので、パッケージは次のサイトから提供されます。
Canonical (私たちの制御の外にあります) は時々壊れます。

Canonical は、カーネルの権限を変更することを決定しました。
root 以外は読み取り可能です。 これは完全に愚かですが、彼らはそれを変えるつもりはありません
(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725)。 したがって、すべてのユーザーが
これを行うべきです:

sudo chmod 0644 /boot/vmlinuz*

Ubuntuの12.04
このバージョンの Ubuntu の libguestfs は機能しますが、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 は、2012 年 07 月に Andreis Vinogradovs (libguestfs) によって Gentoo に追加されました。
マキシム・コルツォフ(主にハイベックス)。 する:

libguestfs を出現させる

スーセ
Libguestfs は、2012 年に Olaf Hering によって SuSE に追加されました。

ArchLinux
Libguestfs は 2010 年に AUR に追加されました。

その他の Linux ディストリビューション
ソースからコンパイルします (次のセクション)。

その他の非 Linux ディストリビューション
ソースからコンパイルして移植する必要があります。

認定条件 できる I コンパイル & install libguestfs から ソース?
libguestfs は、git またはソース tarball からコンパイルできます。 事前に README ファイルをお読みください
起動。

Git: https://github.com/libguestfs/libguestfs ソース tarball:
http://libguestfs.org/download

「make install」を実行しないでください。 使用 "。/ run" スクリプトを代わりに使用します (README を参照)。

認定条件 できる I コンパイル & install libguestfs if my ディストリビューション しない 持ってる 新製品 十分な
qemu/スーパーミン/カーネル?
Libguestfs には supermin 5 が必要です。 supermin 5 がディストリビューションに移植されていない場合は、次を参照してください。
以下の質問です。

まず、ソースから qemu、supermin、カーネルをコンパイルします。 あなたがやる 「作る必要がある」
それらをインストールしてください。

libguestfs ソース ディレクトリに XNUMX つのファイルを作成します。 「localconfigure」には以下を含める必要があります。

ソースローカル環境
#export PATH=/tmp/qemu/x86_64-softmmu:$PATH
./autogen.sh --prefix / 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

必要に応じてこれらの行のコメントを解除し、代替プログラムを使用するように調整します。
コンパイル。

「./configure」の代わりに「./localconfigure」を使用しますが、それ以外の場合は、libguestfs を次のようにコンパイルします。
普通。

「make install」を実行しないでください。 使用 "。/ run" スクリプトを代わりに使用します (README を参照)。

認定条件 できる I コンパイル & install libguestfs 無し スーパーミン?
supermin 5 がディストリビューションをサポートしているが、たまたま十分な新しい supermin がない場合
インストールしてから、前の質問を参照してください。

supermin 5 がディストリビューションをまったくサポートしていない場合は、「修正済み」を使用する必要があります。
アプライアンス メソッド」では、コンパイル済みのバイナリ アプライアンスを使用します。libguestfs をビルドするには
supermin を使用しない場合は、「--disable-appliance --disable-daemon」をどちらかに渡す必要があります。
./autogen.sh or 。/設定 (それぞれ git からビルドしているか、
tarball から)。 次に、libguestfs を使用するときに、 しなければなりません 「LIBGUESTFS_PATH」を設定します
環境変数をプリコンパイルされたアプライアンスのディレクトリに追加します。これについても説明します。
「固定アプライアンス」の ゲストとします。

プリコンパイル済みアプライアンスについては、以下も参照してください。 http://libguestfs.org/download/binaries/appliance/.

supermin を他の Linux ディストリビューションに移植するパッチは歓迎されます。

認定条件 できる I 加えます サポート for sVirt?
Note for Fedora/RHEL ユーザー: この構成は、Fedora 18 以降のデフォルトです。
RHEL 7. 問題を見つけた場合は、お知らせいただくかバグを報告してください。

SVirt は SELinux を使用して強化されたアプライアンスを提供し、不正なディスクに対して非常に困難になります
libguestfs の制限から「脱出」し、ホストにダメージを与えるイメージ (と言ってもいいでしょう)
標準の libguestfs でもこれは難しいですが、sVirt は追加のレイヤーを提供します。
ホストを保護し、さらに重要なことに、同じホスト上の仮想マシンを保護します。
互いに)。

現在、sVirt を有効にするには、libvirt ≥ 0.10.2 (1.0 以降が推奨) が必要です。
libguestfs ≥ 1.20、および最近の Fedora の SELinux ポリシー。 走っていない場合
Fedora 18 以降の場合、SELinux ポリシーを変更する必要があります。
メーリングリスト。

要件を満たしたら、次のことを実行します。

./configure --with-default-backend=libvirt # libguestfs >= 1.22
./configure --with-default-attach-method=libvirt # libguestfs <= 1.20
make

SELinux を Enforcing モードに設定すると、sVirt が自動的に使用されます。

libguestfs のすべて、またはほぼすべての機能が sVirt で動作するはずです。 既知のものが XNUMX つあります
欠点: 仮想レスキュー(1) libvirt (したがって sVirt) は使用しませんが、ダイレクトにフォールバックします。
qemuの起動。 そのため、現時点では、sVirt 保護の恩恵を受けることはできません。
仮想レスキュー。

libvirtd ログを有効にすることで、sVirt が使用されているかどうかを確認できます (「
/etc/libvirt/libvirtd.log)、libvirtd を強制終了して再起動し、ログ ファイルを確認します。
「SELinux コンテキストを ... に設定しています」メッセージの場合。

理論上、sVirt は AppArmor をサポートするはずですが、まだ試していません。 ほぼそうなります
確かに、libvirt にパッチを適用し、AppArmor ポリシーを作成する必要があります。

libguestfs 持っています a 本当に 長い リスト of 依存関係!
基本ライブラリはあまり依存していませんが、リストが長くなる原因は XNUMX つあります
他の依存関係:

1. Libguestfs は、さまざまなディスク形式を読み取り、編集できなければなりません。 例えば、
XFS のサポートには XFS ツールが必要です。

2. さまざまな言語には言語バインディングがあり、すべて独自の言語が必要です。
開発ツール。 すべての言語バインディング (C を除く) はオプションです。

3. 無効にできるオプションのライブラリ機能がいくつかあります。

libguestfs ≥ 1.26 なので、アプライアンスの依存関係を分割することができます (項目 1)。
上記のリスト)、したがって、(例)「libguestfs-xfs」を別のサブパッケージとして持っています。
XFSディスクイメージを処理しています。 私たちは、下流のパッケージ業者がベースの分割を開始することを奨励します。
libguestfs パッケージをより小さなサブパッケージに分割します。

エラー 間に 起動する on フェドーラ 18、 RHEL 7
Fedora ≥ 18 および RHEL ≥ 7 では、libguestfs は libvirt を使用してアプライアンスを管理します。 以前
(およびアップストリーム) libguestfs は qemu を直接実行します。

┌─────────────────┐
│ libguestfs │
├────────────────┬──────────────────┤
│ ダイレクトバックエンド │ libvirt バックエンド │
└────────────────┴──────────────────┘
↓↓
┌───────┐ ┌─────┐
│ qemu │ │ libvirtd │
━━━━━┘ ━━━━━┘

┌────────┐
│ ケム │
└────────┘

アップストリーム Fedora 18+
Fedora 以外の RHEL 7+
非 RHEL

libvirt バックエンドはより洗練されており、SELinux/sVirt (上記を参照) をサポートしています。
ホットプラグなど。 ただし、より複雑であるため、堅牢性が低くなります。

libvirt バックエンドの使用時に権限の問題が発生した場合は、直接バックエンドに切り替えることができます。
この環境変数を設定してバックエンドを実行します。

エクスポート LIBGUESTFS_BACKEND=直接

libguestfs プログラムまたは virt ツールを実行する前に。

認定条件 できる I スイッチ 〜へ a 固定の / 作り付け アプライアンス?
これにより、Fedora および RHEL 上の libguestfs の安定性とパフォーマンスが向上する可能性があります。

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 構築します (デビアン)?

Hilko Bengen は、Debian アーカイブ プロキシである「about」の使用を提案しています
(http://packages.debian.org/approx)。 このツールは、Debian で次の場所に文書化されています。 (8)
マニュアルページ。

速度、 ディスク SPACE 中古 BY リブゲストFS


注: このセクションのほとんどの情報は移動されました。 ゲストのパフォーマンスとします。

アップロード or 書きます 思われる 非常に スロー。
基礎となるディスクが完全に割り当てられていない場合 (sparse raw または qcow2 など)、書き込みが行われる可能性があります。
実行中にホスト オペレーティング システムがコストのかかるディスク割り当てを行う必要があるため、速度が遅くなります。
書き込み。 解決策は、代わりに完全に割り当てられた形式を使用することです。 非スパース生、または
qcow2 に「preallocation=metadata」オプションを指定します。

libguestfs 使用されます あまりに ずっと ディスク スペース!
libguestfs は、大規模なアプライアンスを次の場所にキャッシュします。

/var/tmp/.guestfs-

環境変数「TMPDIR」が定義されている場合、 $TMPDIR/.guestfs- 使用されている
を代わりにお使いください。

libguestfs を使用しない場合は、このディレクトリを削除しても安全です。

仮想スパース化 と思われる 〜へ make   画像 成長する 〜へ   フル サイズ of   バーチャル ディスク
に入力した場合、 仮想スパース化(1) が raw の場合、出力は raw スパースになります。 確認する
「du -sh」などのスパース性を理解するツールを使用して出力を測定しています。
それは大きな違いを生む可能性があります:

$ ls -lh test1.img
-rw-rw-r--。 1 rjones rjones 100M 8 月 08 日 08:1 testXNUMX.img
$ du -sh test1.img
3.6M test1.img

(見た目の大きさを比較してください) 100M 実際のサイズとの比較 3.6M)

これらすべてが混乱する場合は、次のように指定して非スパース出力形式を使用してください。 - 変換
オプション、例:

virt-sparsify --convert qcow2 ディスク.raw ディスク.qcow2

なぜ しない virt-サイズ変更 on   ディスク 画像 所定の位置に?
ディスク イメージのサイズ変更は非常に注意が必要です。特に、データやデータが失われないようにする必要があります。
ブートローダーを破壊します。 現在の方法では、効率的に新しいディスク イメージを作成し、コピーします。
古いものからのデータとブートローダー。 何か問題が起こっても、いつでも行くことができます
元に戻ります。

virt-resize をインプレースで機能させる場合は、次のような制限が必要になります。
たとえば、既存のパーティションを移動することは許可されません(データを移動すると、
同じディスクは、停電またはクラッシュが発生した場合にデータを破損する可能性が最も高くなります)、
また、LVM をサポートするのは非常に困難です (マッピングがほぼ任意であるため)
LV コンテンツと基礎となるディスク ブロックの間)。

私たちが検討したもう XNUMX つの方法は、元のディスク イメージの上にスナップショットを配置することです。
元のデータは変更されず、差分のみがスナップショットに記録されます。
現在、「qemu-img create」+「virt-resize」を使用してこれを行うことができますが、qemu は現在それを行っていません。
すでに同じブロックがスナップショットに書き戻されるのを認識できるほど賢い
はバッキング ディスクに存在するため、スペースも時間も節約されないことがわかります。

要約すると、これは難しい問題であり、現在私たちが持っているものはほとんど機能するため、私たちは気が進まないのです。
それを変更することができます。

なぜ しない 仮想スパース化 on   ディスク 画像 所定の位置に?
libguestfs ≥ 1.26 では、virt-sparsify がディスク イメージ上で適切に動作できるようになりました。 使用:

virt-sparsify --in-place disk.img

ただし、その前に、「インプレース スパーシフィケーション」を読んでください。 仮想スパース化とします。

問題 開設 ディスク IMAGES


リモート libvirt ゲスト be 開かれました。
現時点では、リモート libvirt ゲストを開くことはサポートされていません。 たとえば、これは機能しません:

guestfish -c qemu://remote/system -d ゲスト

リモート ディスクを開くには、何らかの方法でリモート ディスクをエクスポートし、エクスポートに接続する必要があります。 のために
たとえば、NBD を使用することにした場合:

リモート$ qemu-nbd -t -p 10809 guest.img
local$ guestfish -a nbd://remote:10809 -i

その他の可能性としては、ssh (qemu が最新の場合)、NFS、または iSCSI などがあります。 「リモート」を参照してください。
STORAGE」 ゲストとします。

認定条件 できる I 開いた この 奇妙な ディスク ソース?
ライブラリ経由でアクセスする必要がある別のシステム内にディスク イメージがあります /
HTTP / REST / 独自の API、または何らかの方法で圧縮またはアーカイブされています。 (一例
実際にダウンロードせずに OpenStack Glance イメージにリモート アクセスすることになります)。

nbdkit という姉妹プロジェクトがあります (https://github.com/libguestfs/nbdkit)。 これ
プロジェクトを使用すると、任意のディスク ソースを NBD サーバーに変えることができます。 Libguestfs は NBD にアクセスできます
サーバーに直接接続します。例:

guestfish -a nbd://remote

nbdkit は自由にライセンスされているため、独自のライブラリにリンクしたり、独自のライブラリに含めたりすることができます。
そしてコード。 シンプルで安定したプラグイン API も備えているため、プラグインを簡単に作成できます。
将来的にも機能し続けるAPI。

エラー 開設 VMDK ディスク: 「使用します a vmdk 簡潔な which is by この qemu バージョン:
VMDK バージョン 3"
Qemu (したがって libguestfs) は、特定の VMDK ディスク イメージのみをサポートします。 他のものは機能しません、
これまたは同様のエラーが発生します。

理想的には誰かが qemu を修正して最新の VMDK 機能をサポートすることですが、それまでは
XNUMXつのオプションがあります。

1. ゲストがライブでアクセス可能な ESX サーバー上でホストされている場合は、
というディスクイメージ somename- flat.vmdk。 名前にもかかわらず、これは生のディスク イメージです。
何でも開けられる。

qemu と libguestfs の最新バージョンを持っている場合は、次のことができる可能性があります。
HTTPS または ssh を使用して、このディスク イメージにリモートからアクセスします。 「リモートストレージ」を参照してください。
ゲストとします。

2. VMware 独自の vdiskmanager ツールを使用して、イメージを RAW 形式に変換します。

3. nbdkit と独自の VDDK プラグインを使用して、ディスク イメージを NBD としてライブ エクスポートします。
ソース。 これにより、VMDK ファイルの読み取りと書き込みができるようになります。

UFS ディスク (として 中古 by BSD) be 開かれました。
UFS ファイルシステム形式には多くのバリエーションがあり、それらは自己識別されません。 の
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 が含まれるファイルを作成するとエラーが発生する
文字、特にアジア言語 (中国語、日本語、
等)。 ファイルシステムはVFATです。

· VFAT ファイル システムからディレクトリを一覧表示すると、ファイル名が疑問符として表示されます。

これは GNU/Linux システムの設計上の欠陥です。

VFAT は、長いファイル名を UTF-16 文字として保存します。 ファイル名を開いたり返したりするとき、
Linux カーネルは、これらを何らかの形式の 8 ビット文字列に変換する必要があります。 UTF-8は
非 UTF-8 ロケールを使用し続ける Linux ユーザーを除いて、これは明らかな選択です (ユーザーの
ロケールは libc の関数であるため、カーネルには認識されません)。

したがって、マウントするときにどのような変換を実行したいかをカーネルに伝える必要があります。
ファイルシステム。 XNUMX つのメソッドは、「iocharset」パラメータです (これは、
libguestfs) と「utf8」フラグ。

したがって、VFAT ファイルシステムを使用するには、マウント時に「utf8」フラグを追加する必要があります。 ゲストフィッシュからは、
使用します。

> マウントオプション utf8 /dev/sda1 /

または、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 ゲスト which つかいます NTFS。
次のようなエラーが表示されます。

マウント: 不明なファイルシステム タイプ「ntfs」

Red Hat Enterprise Linux または CentOS では、libguestfs-winsupport をインストールする必要があります。
パッケージ。

できません 開いた or 検査する RHEL 7 ゲスト
できません 開いた Linux ゲスト which つかいます XFS。
RHEL 7 ゲスト、および XFS を使用するその他のゲストは、libguestfs で開くことができますが、
「libguestfs-xfs」パッケージをインストールする必要があります。

使用する リブゲストFS IN サプライヤ 独自の プログラム


  API 持っています 数百 of メソッド コラボレー do I 開始?
まずは API の概要を読むことをお勧めします。 ゲストとします。

API の概要では C API について説明していますが、C API を使用している場合でも読む価値があります。
API は同じなので、別のプログラミング言語を使用する予定です。
呼び出し名の論理的な変更:

C guestfs_ln_sf (g, ターゲット, リンク名);
Python g.ln_sf (ターゲット、リンク名);
OCaml g#ln_sf ターゲット リンク名;
Perl $g->ln_sf (ターゲット、リンク名);
シェル (ゲストフィッシュ) ln-sf ターゲット リンク名
PHP guestfs_ln_sf ($g, $target, $linkname);

API の概要を理解したら、この開始リストを参照してください。
他の言語バインディングのポイント: 「他のプログラミング言語での LIBGUESTFS の使用」
ゲストとします。

できる I つかいます libguestfs in my 所有権 / 閉まっている source / コマーシャル プログラム?
一般的にはそうです。 ただし、これは法的なアドバイスではありません。付属のライセンスをお読みください。
libguestfs を参照し、具体的な質問がある場合は弁護士に問い合わせてください。

ソース ツリーでは、ライセンスはファイル「COPYING.LIB」内にあります (ライブラリの場合は LGPLv2+、
バインディング) と "COPYING" (スタンドアロン プログラムの場合は GPLv2+)。

デバッグ リブゲストFS


ヘルプ それはだ 働く!
libguestfs プログラムがまったく機能しないように見える場合は、以下のプログラムを実行して、
完了、 未編集 「libguestfs」@「redhat.com」宛ての電子メールに出力します。

libguestfs-テストツール

特定の操作が失敗した場合は、このチェックリストのすべての情報を電子メールで提供してください。
「libguestfs」@「redhat.com」へ:

1. 何をしようとしているのですか?

2. 具体的にはどのようなコマンドを実行しましたか?

3. これらのコマンドの正確なエラーまたは出力は何ですか?

4. デバッグを有効にし、コマンドを再度実行して、 コンプリート 出力。 Do
edit   出力。

エクスポート LIBGUESTFS_DEBUG=1
エクスポート LIBGUESTFS_TRACE=1

5. libguestfs のバージョン、オペレーティング システムのバージョン、およびインストール方法を含めます。
libguestfs (例: ソースから、「yum install」など)

認定条件 do I debug いつ どれか libguestfs プログラム or ツール (例えば。 virt-v2v or virt-df)?
さらに多くの情報を得るために設定できる「LIBGUESTFS_*」環境変数が XNUMX つあります。
libguestfs からの情報。

「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

詳細については、「環境変数」を参照してください。 ゲストとします。

認定条件 do I debug いつ ゲストフィッシュ?
上記と同じ環境変数を使用できます。 あるいは、guestfish オプションを使用します
-x (コマンドをトレースするため) または -v (完全なデバッグ出力を取得するため)、あるいはその両方。

詳細については、以下を参照してください。 ゲストフィッシュとします。

認定条件 do I debug いつ   API?
「guestfs_set_trace」を呼び出します ゲスト(3) コマンド トレースを有効にする、および/または
「guestfs_set_verbose」の ゲスト(3) デバッグメッセージを有効にします。

最良の結果を得るには、
可能であれば、launch を呼び出す前に必ず guestfs ハンドルを実行してください。

認定条件 do I キャプチャー debug 出力 & 置きます it my ロギング システム?
イベントAPIを利用します。 例については、「イベントを処理するためのコールバックの設定」を参照してください。 ゲスト(3)
例/debug-logging.c libguestfs ソース内のプログラム。

採掘 より深い   アプライアンス ブート プロセス。
デバッグを有効にしてから、アプライアンスの起動プロセスに関するこのドキュメントを読んでください。
ゲストの内部とします。

libguestfs ハングする or 失敗 間に 実行/起動。
デバッグを有効にして、完全な出力を確認します。 何が起こっているのか理解できない場合は、
以下を含むバグレポートを提出してください。 コンプリート の出力 libguestfs-テストツールとします。

デバッギング libvirt
libvirt バックエンドを使用していて、libvirt が失敗している場合は、次のオプションを有効にできます。
編集によるデバッグ /etc/libvirt/libvirtd.conf.

非 root として実行している場合は、別のファイルを編集する必要があります。 作成する
~/.config/libvirt/libvirtd.conf 含む:

ログレベル=1
log_outputs="1:file:/tmp/libvirtd.log"

実行中のすべてのセッション (非 root) libvirtd を強制終了し、次回 libguestfs を実行するときに
コマンドを実行すると、libvirtd からの大量の有用なデバッグ情報が表示されるはずです。
/tmp/libvirtd.log

デザイン/内部 OF リブゲストFS


参照 ゲストの内部とします。

なぜ しない 貴社 do すべてのもの     FUSE / ファイルシステム インターフェース?
というコマンドを提供しています ゲストマウント(1) これにより、ゲスト ファイルシステムを
ホスト。 これは FUSE モジュールとして実装されます。 全部を実装してみませんか
libguestfs は、大規模でかなり複雑な API を使用する代わりに、このメカニズムを使用しますか?

理由は XNUMX つあります。 まず、libguestfs は次のようなことを行うための API 呼び出しを提供します。
ファイルシステムに収まらないパーティションや論理ボリュームの作成と削除
とても簡単にモデル化できます。 あるいは、むしろ、これらを次のように組み込むこともできます。たとえば、パーティションを作成するなどです。
「mkdir /fs/hda1」にマップすることもできますが、その場合は選択する方法を指定する必要があります
パーティションのサイズ (おそらく「echo 100M > /fs/hda1/.size」)、およびパーティションのタイプ、
開始セクターと終了セクターなどを設定しますが、それが完了すると、ファイルシステムベースの API が開始されます。
現在の呼び出しベースの API よりも複雑に見えます。

XNUMX 番目の理由は効率性です。 FUSE 自体はかなり効率的ですが、
FUSE モジュールに対して小さな独立した呼び出しを多数行います。 ゲストマウントでは、これらは次のようにする必要があります
libguestfs アプライアンスへのメッセージに変換されるため、(やがて)大きなオーバーヘッドが発生します。
および往復)。 たとえば、64 KB のチャンクでファイルを読み取るのは非効率的です。
チャンクは XNUMX 往復になります。 libguestfs API ではさらに多くのことが可能です
次のようなストリーミング呼び出しの XNUMX つを通じてファイルまたはディレクトリ全体をダウンロードするのが効率的です。
「guestfs_download」または「guestfs_tar_out」。

なぜ しない 貴社 do すべてのもの   GVFS?
この問題は FUSE の問題と似ています。

GVFS は、POSIX/FUSE よりも優れた抽象化です。 GVFS には FTP バックエンドがあります。
FTP は概念的に libguestfs API に似ているため、心強いです。 ただし、GVFS
FTP バックエンドは対話性を維持するために複数の同時接続を確立します。
libguestfs では簡単にはできません。

なぜ できる I 書きます 〜へ   ディスク、 さらに しかし I 追加されました it 読み取り専用ですか?
なぜ ありません 「――ろ」 現れる 〜へ 持ってる いいえ 効果?
読み取り専用のディスクを追加すると、libguestfs は書き込み可能なオーバーレイをその上に配置します。
基礎となるディスク。 書き込みはこのオーバーレイに入り、ハンドルが閉じられると破棄されます。
(または「guestfish」などが終了します)。

このようにする理由は XNUMX つあります。 まず、読み取り専用ディスクは、
多くの場合 (例: IDE が単にそれらをサポートしていないため、IDE でエミュレートされたものを使用できませんでした)
読み取り専用ディスクですが、これは実際の libguestfs インストールでは一般的ではありません)。

次に、より重要なことは、たとえ読み取り専用ディスクが可能だったとしても、
彼ら。 ジャーナルのあるファイルシステムをマウントすると、「mount -o ro」であっても、書き込みが発生します。
ジャーナルを再生してメタデータを更新する必要があるため、ファイルシステムにアクセスできません。 ディスクの場合
本当に読み取り専用だった場合、ダーティなファイルシステムをマウントすることはできません。

これを使用できるようにするために、これらの書き込みを一時的に保存する場所としてオーバーレイを作成します。
その後、それを破棄します。 これにより、基盤となるディスクが常に変更されないことが保証されます。

libguestfs をビルドするときに、これに対する回帰テストがあることにも注意してください (
「テスト/qemu」)。 これが、パッケージャがテスト スイートを実行することが重要である理由の XNUMX つです。

「――ろ」 make ディスク 読み取り専用ですか?
違う! 「--ro」オプションは、コマンドラインで追加されたディスクにのみ影響します。 「-a」を使用し、
「-d」オプション。

guestfish では、「add」コマンドを使用すると、ディスクが読み書き可能に追加されます (ただし、
コマンドで明示的に「readonly:true」フラグを指定します)。

できる I つかいます 「ゲストフィッシュ --ろ」 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 は元のファイルシステム上にスナップショットを作成しますが、
厳密なポイントインタイムのスナップショットは作成されません。 基礎となるデータのブロック
ファイルシステムは、fsck 操作の進行に応じてさまざまな時点で qemu によって読み取られます。
間に書きます。 その結果、fsck は大規模な破損 (現実ではなく想像上のものです!) を認識します。
そして失敗します。

しなければならないのは、ポイントインタイムのスナップショットを作成することです。 論理ボリュームの場合は、次を使用します。
LVM2 スナップショット。 ファイルシステムが btrfs/ZFS ファイルなどの内部にある場合、
btrfs/ZFS スナップショットを使用し、スナップショットに対して fsck を実行します。 実際にはそうではありません
これには libguestfs を使用する必要があります -- 実行するだけです /sbin/fsck 直接。

ホストデバイスとファイルのポイントインタイムスナップショットの作成は、範囲外です。
ただし、libguestfs は作成後に操作できます。

  違い の間に ゲストフィッシュ & 仮想レスキュー?
多くの人が、私たちが提供する XNUMX つの表面的に似たツールに混乱しています。

$ guestfish --ro -a guest.img
>> 走る
> fsck /dev/sda1

$ virt-rescue --ro ゲスト.img
> /sbin/fsck の/ dev / sda1

そして、それに関連して生じる疑問は、なぜ完全なシェルコマンドを入力できないのかということです。
guestfish のすべての --options を使用します (ただし、 仮想レスキュー(1))。

ゲストフィッシュ(1) は、への構造化されたアクセスを提供するプログラムです。 ゲスト(3) API。 それは起こります
対話型シェルとしても優れていますが、その主な目的は、からの構造化されたアクセスです。
シェルスクリプト。 これは、Python やその他のバインディングのような、言語バインディングのように考えてください。
ただしシェルの場合。 guestfish (および libguestfs API の主な差別化要因)
一般) は、変更を自動化する機能です。

仮想レスキュー(1) は、libguestfs アプライアンスを起動して、
VM に対する任意の変更。 構造化されていないので自動化はできませんが、
ゲストに迅速なアドホックな修正を提供できるため、非常に便利です。

ただし、libguestfs にはアプライアンスへの「バックドア」もあり、任意の
シェルコマンド。 virt-rescue ほど柔軟ではありません。
シェルコマンドですが、とにかくこれは次のとおりです。

> デバッグ sh "cmd arg1 arg2 ..."

あなたがすべきことに注意してください これに頼ってください。 将来的には削除または変更される可能性があります。 もしあなたの
プログラムには何らかの操作が必要です。代わりに libguestfs API に追加してください。

  取引   「ゲストフィッシュ -私"?
なぜ ありません 仮想猫 on a リアル VM 画像、 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 virt-df 作品 on どれか ディスク 画像?
この試験は ありません "番号 ルート デバイス 発見 in この オペレーティング   画像" 平均?
これらの質問はすべて基本的なレベルで関連しており、すぐには分からないかもしれません。
明らかです。

ゲスト(3) API レベルでは、「ディスク イメージ」は単なるパーティションとファイル システムの山です。

対照的に、仮想マシンが起動すると、それらのファイルシステムは一貫性のあるファイルシステムにマウントされます。
次のような階層構造:

/ (/dev/sda2)

├── /ブート (/dev/sda1)

├── /ホーム (/dev/vg_external/Homes)

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

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

(Windows ではドライブ文字)。

API はまず、「ファイルシステムの山」レベルでディスク イメージを確認します。 しかし、それも
には、ディスク イメージを検査して、オペレーティング システムが含まれているかどうか、また、どのようにディスク イメージが保存されているかを確認する方法があります。
オペレーティング システムの起動時にディスクがマウントされます: "INSPECTION" ゲストとします。

ユーザーはいくつかのツールを期待しています(たとえば、 仮想猫(1)) VM パスを操作するには:

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

virt-cat はどのようにしてそれを知るのでしょうか / var 別のパーティションですか? トリックは virt-cat です
ディスク イメージの検査を実行し、それを使用してパスを正しく変換します。

一部のツール (以下を含む) 仮想猫(1) virt-編集(1) virt-ls(1)) インスペクションを使用して VM をマッピングする
パス。 その他のツール、たとえば、 virt-df(1)と virt-ファイルシステム(1) 完全に
libguestfs API の生の「ファイルシステムの大きな山」レベルであり、インスペクションは使用しません。

ゲストフィッシュ(1) は興味深い中間点にあります。 を使用する場合は、 -a & -m コマンドライン
オプションを使用する場合は、guestfish にディスク イメージの追加方法とマウント場所を正確に指示する必要があります。
パーティション。 これは生の API レベルです。

あなたが使用している場合 -i オプションを使用すると、libguestfs が検査を実行し、ファイルシステムをマウントします。
あなた。

「このオペレーティング システム イメージにルート デバイスが見つかりません」というエラーはこれに関連しています。 それ
検査により、指定したディスク イメージ内でオペレーティング システムを見つけることができなかったことを意味します
それ。 virt-cat などのプログラムを何か上で実行しようとすると、この問題が発生する可能性があります。
これは単なるディスク イメージであり、仮想マシンのディスク イメージではありません。

この試験は do これらの "デバッグ*" & "内部-*" 機能 行う?
デバッグや内部目的に使用される関数がいくつかあります。
安定した API の一部。

「debug*」(または「guestfs_debug*」)関数、主に「guestfs_debug」 ゲスト(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 無視され。 理由は次のとおりです (a) 私たちが望んでいるのは
メーリング リストでパッチについて議論し分析するため、(b) github のプル リクエストが
コミットをマージしますが、履歴が線形であることを好みます。

認定条件 do I 提案する a 特徴?
貢献する予定の大きな新機能については、メーリング リストで議論する必要があります。
まず (https://www.redhat.com/mailman/listinfo/libguestfs)。 これにより失望を避けることができます
また、その機能が libguestfs プロジェクトに適合しないと思われる場合は、作業が無駄になります。

便利な機能を提案したいが、コードは書きたくない場合は、
概要の先頭に「RFE:」を含むバグ (「ヘルプの入手とバグの報告」を参照)
ライン。

できる コミット 〜へ libguestfs ギット?
github にコミットアクセスできる人は 5 人くらいです。 パッチは最初にリストに投稿する必要があります
そしてACKされました。 ACK とパッチのプッシュに関するポリシーの概要は次のとおりです。

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

できる I フォーク libguestfs?
もちろんできます。 Git を使用すると、libguestfs を簡単にフォークできます。 Github を使用するとさらに簡単になります。
フォークとその理由についてメーリング リストで教えていただければ幸いです。

雑則 質問


できる I モニター   ライブ ディスク アクティビティ of a バーチャル 機械 libguestfs?
一般的な要求は、libguestfs を使用して、システムのライブ ディスク アクティビティを監視できるようにすることです。
たとえば、ゲストが新しいファイルを作成するたびに通知を受け取るようにします。 リブゲスト
ありません この図からわかるように、一部の人々が想像するように機能します。

┌──────────────────────────────────────┐
│ libguestfs を使用した監視プログラム │
└──────────────────────────────────────┘

┌───────┐ ┌───────────┐
│ ライブ VM │ │ libguestfs アプライアンス │
━━━━━━━━━━━━━━━━━━━━━━━┤
│ カーネル (1) │ │ アプライアンス カーネル (2) │
━━━━━━━━━━━━━━━━━━━━┘
↓ ↓ (r/o接続)
┌─────────────┐
| ディスクイメージ |
━━━━━━━━━━━┘

このシナリオは安全です (ドライブの追加時に「読み取り専用」フラグを設定している限り)。
ただし、libguestfs アプライアンス カーネル (2) は、ディスクに加えられたすべての変更を認識しません。
このイメージには次の XNUMX つの理由があります。

私。 VM カーネル (1) はデータをメモリにキャッシュできるため、ディスク イメージには表示されません。

ii. libguestfs アプライアンス カーネル (2) は、ディスク イメージが変更されることを予期しません。
そのため、VM カーネルが更新されても、それ自体のキャッシュは魔法のように更新されません (1)
ディスクイメージを更新します。

サポートされている唯一の解決策は、次の場合に常に libguestfs アプライアンス全体を再起動することです。
ディスクイメージの変更を確認したいと考えています。 呼び出しに対応するAPIレベルで
「guestfs_shutdown」の後に「guestfs_launch」が続きます。これは重量のある操作です (「guestfs_shutdown」を参照)。
また ゲストのパフォーマンス(3))。

アプライアンスを再起動するのが本当に難しい場合は、サポートされていないハックを試すことができます。
費用がかかる:

· 「guestfs_drop_caches (g, 3)」を呼び出します。 これにより、すべてのキャッシュされたデータが libguestfs によってサポートされます。
アプライアンス カーネル (2) は破棄されるため、ディスク イメージに戻ります。

ただし、qemu は一部のデータもキャッシュするため、これだけでは十分ではありません。 あなた
また、libguestfs にパッチを適用して、「cache=unsafe」モードを (再度) 有効にする必要があります。 見る:
https://rwmj.wordpress.com/2013/09/02/new-in-libguestfs-allow-cache-mode-to-be-selected/

· 代わりに virt-bmap などのツールを使用してください。

· ゲスト内でエージェントを実行します。

ゲストがより根本的な変更 (ファイルシステムの削除など) を行っている場合は何も役に立ちません。
このような場合には、アプライアンスを再起動する必要があります。

(実際に調べるには一貫性のあるスナップショットを使用する必要があるという XNUMX 番目の問題があることに注意してください。
ライブ ディスク イメージですが、これはライブ ディスクに対して libguestfs を使用する場合の一般的な問題です
画像。)

onworks.net サービスを使用してオンラインで guestfs-faq を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad