21.4. guestfish シェル
guestfish は、コマンドラインまたはシェルスクリプトから、ゲスト仮想マシンファイルシステムにアクセスするために使用できるインタラクティブなシェルです。libguestfs API の機能はすべて、シェルから利用できます。
仮想マシンのディスクイメージの表示または編集を開始するには、次のコマンドを実行して、使用するディスクイメージのパスを置き換えます。
guestfish --ro -a /path/to/disk/image
$ guestfish --ro -a /path/to/disk/image
--ro は、ディスクイメージが読み取り専用で開かれていることを意味します。このモードは常に安全ですが、書き込みアクセスは許可しません。ゲスト仮想マシンが実行されていないことが確実な場合、またはディスクイメージがライブゲスト仮想マシンに接続されていない場合にのみ、このオプションを省略してください。libguestfs を使用してライブゲスト仮想マシンを編集することはできません。これを試みると、ディスクが破損し、元に戻せなくなります。
/path/to/disk/image は、ディスクへのパスです。これには、ファイル、ホストの物理マシン論理ボリューム (/dev/VG/LV など)、または SAN LUN (/dev/sdf3) があります。
注記
libguestfs および guestfish には root 権限は必要ありません。アクセスされているディスクイメージが root から読み取りまたは書き込み、あるいは両方を必要とする場合にのみ、これらを root として実行する必要があります。
guestfish を対話的に起動すると、以下のプロンプトが表示されます。
プロンプトで 実行 と入力して、ライブラリーを開始し、ディスクイメージを割り当てます。これは、最初に実行するときに最大 30 秒かかることがあります。その後の起動は、非常に速く完了します。
注記
libguestfs は、KVM (利用可能な場合) などのハードウェア仮想化アクセラレーションを使用して、このプロセスを高速化します。
run コマンドを入力すると、以下のセクションで示すように、他のコマンドを使用できます。
21.4.1. guestfish を使用したファイルシステムの表示 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、guestfish でファイルシステムを表示する方法を説明します。
21.4.1.1. 手動によるリスト表示と表示 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
list-filesystems コマンドは、libguestfs が検出したファイルシステムのリストを表示します。この出力は、Red Hat Enterprise Linux 4 ディスクイメージを示しています。
その他の便利なコマンドは、list-devices、list-partitions、lvs、pvs、vfs-type、および file です。help command と入力すると、以下の出力のように、コマンドの詳細とヘルプを表示できます。
ファイルシステムの実際の内容を表示するには、最初にマウントする必要があります。
ls、ll、cat、そのmore、download、tar-out などの guestfish コマンドを使用して、ファイルおよびディレクトリーを表示およびダウンロードできます。
注記
このシェルには、現在の作業ディレクトリーの概念はありません。通常のシェルとは異なり、cd コマンドを使用してディレクトリーを変更することはできません。すべてのパスは、先頭のスラッシュ (/) 文字で始まる完全修飾する必要があります。Tab 鍵を使用して、パスを完成させます。
guestfish シェルを終了するには、exit と入力するか、Ctrl+d と入力します。
21.4.1.2. guestfish 検査経由 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイルシステムを手動でリスト表示してマウントする代わりに、guestfish 自体がイメージを検証して、ゲスト仮想マシンのようにファイルシステムをマウントできます。これを行うには、コマンドラインに -i を追加します。
インスペクションおよびマウントを実行するために、guestfish は libguestfs バックエンドを起動する必要があるため、-i オプションを使用する場合は run コマンドを使用する必要はありません。-i オプションは、多くの一般的な Linux ゲスト仮想マシンで機能します。
21.4.1.3. 名前によるゲスト仮想マシンのアクセス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ゲスト仮想マシンは、libvirt として知られる名前 (つまり virsh list --all にあるように) を指定するとコマンドラインからアクセスできます。-d オプションを使用して、ゲスト仮想マシンに名前 (-i オプションの有無にかかわらず) でアクセスします。
guestfish --ro -d GuestName -i
$ guestfish --ro -d GuestName -i
21.4.2. guestfish を使用したファイルの追加 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
guestfish でファイルを追加するには、完全な URI が必要です。ファイルは、ローカルファイル、ネットワークブロックデバイス (NBD) またはリモートブロックデバイス (RBD) に置かれたファイルのいずれかになります。
URI に使用する形式は、以下のいずれかになります。ローカルファイルの場合は ///: を使用します。
- guestfish -a disk.img
- guestfish -a file:///directory/disk.img
- guestfish -a nbd://example.com[:port]
- guestfish -a nbd://example.com[:port]/exportname
- guestfish -a nbd://?socket=/socket
- guestfish -a nbd:///exportname?socket=/socket
- guestfish -a rbd:///pool/disk
- guestfish -a rbd://example.com[:port]/pool/disk
21.4.3. guestfish を使用したファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイルを変更したり、ディレクトリーを作成したり、ゲスト仮想マシンにその他の変更を加えたりする場合は、最初に本セクションの冒頭にある ゲスト仮想マシンをシャットダウンする必要がある に関する警告に留意してください。guestfish で実行中のディスクを編集または変更すると、ディスクが 破損します。ここでは、
/boot/grub/grub.conf ファイルーを編集する例を説明します。ゲスト仮想マシンがシャットダウンしていることを確認したら、以下のようなコマンドを使用して書き込みアクセスを取得するために --ro フラグを省略できます。
ファイルを編集するコマンドには、edit、vi、および emacs が含まれます。write、mkdir、upload、tar-in など、ファイルとディレクトリーを作成する多くのコマンドも存在します。
21.4.4. guestfish でのその他のアクション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
また、mkfs、part-add、lvresize、lvcreate、vgcreate、pvcreate などのコマンドを使用して、ファイルシステムのフォーマットを設定し、パーティションを作成し、LVM 論理ボリュームなどのサイズを変更できます。
21.4.5. guestfish によるシェルスクリプト設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
guestfish を対話的に使用することに慣れたら、必要に応じてシェルスクリプトの記述が役に立つ場合があります。以下は、新しい MOTD (message of the day) をゲストに追加する単純なシェルスクリプトです。
21.4.6. Augeas スクリプトと libguestfs スクリプト リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
libguestfs と Augeas を組み合わせると、Linux ゲスト仮想マシンの設定を操作するスクリプトを作成する場合に役立ちます。たとえば、次のスクリプトは、Augeas を使用してゲスト仮想マシンのキーボード設定を解析し、レイアウトを出力します。この例は、Red Hat Enterprise Linux を実行しているゲスト仮想マシンでのみ機能することに注意してください。
Augeas は、設定ファイルの変更にも使用できます。上記のスクリプトを修正して、キーボードレイアウトを変更できます。
2 つのスクリプト間で、以下の 3 つの変更が行われたことに注意してください。
- 2 番目の例では --ro オプションが削除され、ゲスト仮想マシンに書き込む機能が利用できるようになりました。
- aug-get コマンドが、フェッチではなく値を変更するように aug-set に変更されました。新しい値は"gb" (引用符を含む) になります。
- ここでは aug-save コマンドを使用しているため、Augeas は変更をディスクに書き込みます。
注記
Augeas の詳細は、Web サイト http://augeas.net を参照してください。
guestfish には、本書で説明する以上の機能があります。たとえば、最初からディスクイメージを作成する場合は、次のコマンドを実行します。
guestfish -N fs
guestfish -N fs
または、ディスクイメージからディレクトリー全体をコピーする場合は、次のコマンドを実行します。
><fs> copy-out /home /tmp/home
><fs> copy-out /home /tmp/home
詳細は、man ページの guestfish(1) を参照してください。