Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

21.4. guestfish シェル

guestfish は、コマンドライン、またはシェルスクリプトから使用してゲスト仮想マシンファイルシステムにアクセスできるインタラクティブなシェルです。libguestfs API のすべての機能はシェルから利用できます。
仮想マシンのディスクイメージの表示または編集を開始するには、以下のコマンドを実行して、目的のディスクイメージへのパスを置き換えます。
$ 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 インタラクティブに起動すると、以下のプロンプトが表示されます。
$ guestfish --ro -a /path/to/disk/image

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

 Type: 'help' for help on commands
       'man' to read the manual
       'quit' to quit the shell

><fs>
プロンプトが表示されたら、run を入力してライブラリーを開始し、ディスクイメージを割り当てます。これには、最長で 30 秒かかる可能性があります。その後、起動ははるかに速くなります。
注記
libguestfs は、このプロセスを迅速化するために、KVM(利用可能な場合)などのハードウェアの仮想化アクセラレーションを使用します。
run コマンドを入力すると、以下のセクションで説明されているように、他のコマンドを使用できます。

21.4.1. guestfish のあるファイルシステムの表示

このセクションでは、guestfish でファイルシステムを表示する方法に関する情報を提供します。

21.4.1.1. 手動の一覧および表示

list-filesystems コマンドは、libguestfs にあるファイルシステムを一覧表示します。この出力には、Red Hat Enterprise Linux 4 のディスクイメージが表示されます。
><fs> run
><fs> list-filesystems
/dev/vda1: ext3
/dev/VolGroup00/LogVol00: ext3
/dev/VolGroup00/LogVol01: swap
その他の便利なコマンドは、list-devices、list-partitions、lvs、pvs、vfs-type、および file です。以下の出力にあるように、help コマンドを実行すると、詳細な情報やヘルプを コマンドで確認できます
><fs> help vfs-type
 NAME
    vfs-type - get the Linux VFS type corresponding to a mounted device

 SYNOPSIS
     vfs-type mountable

 DESCRIPTION
    This command gets the filesystem type corresponding to the filesystem on
    "device".

    For most filesystems, the result is the name of the Linux VFS module
    which would be used to mount this filesystem if you mounted it without
    specifying the filesystem type. For example a string such as "ext3" or
    "ntfs".
ファイルシステムの実際のコンテンツを表示するには、まずマウントする必要があります。
ls、ll、cat などの guestfishコマンドを使用して、ファイルおよびディレクトリー を表示および ダウンロードできます
注記
このシェルには、現在の作業ディレクトリーの概念はありません。通常シェルとは異なり、たとえば cd コマンドを使用してディレクトリーを変更することはできません。すべてのパスは、先頭にスラッシュ(/)文字で開始される完全修飾必要がありますTab キーを使用してパスを完了します
guestfish シェルから終了するには、exit または Ctrl+d と入力します。

21.4.1.2. guestfish 検査経由

ファイルシステムを、手動で表示してマウントするのではなく、ゲスト自体でイメージを検査し、ゲスト仮想マシンにあるファイルシステムをマウントすることができます。これには、コマンドラインで -i オプションを追加します。
$ guestfish --ro -a /path/to/disk/image -i

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

 Type: 'help' for help on commands
       'man' to read the manual
       'quit' to quit the shell

 Operating system: Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
 /dev/VolGroup00/LogVol00 mounted on /
 /dev/vda1 mounted on /boot

 ><fs> ll /
 total 210
 drwxr-xr-x. 24 root root  4096 Oct 28 09:09 .
 drwxr-xr-x  21 root root  4096 Nov 17 15:10 ..
 drwxr-xr-x.  2 root root  4096 Oct 27 22:37 bin
 drwxr-xr-x.  4 root root  1024 Oct 27 21:52 boot
 drwxr-xr-x.  4 root root  4096 Oct 27 21:21 dev
 drwxr-xr-x. 86 root root 12288 Oct 28 09:09 etc
 ...
検査およびマウントを行うには、guestfish バックエンドを起動する必要があるため、-i オプションを使用する場合は run コマンドは必要ありません。-i オプションは、多くの一般的な Linux ゲスト仮想マシンで機能します。

21.4.1.3. 名前によるゲスト仮想マシンへのアクセス

ゲスト仮想マシンは、libvirt の既知の名前 (virsh list --allに表示されるなど)を指定すると、コマンドラインからアクセスできます。-d オプションを使用して、-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 フラグを省略できます。
$ guestfish -d RHEL3 -i

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

 Type: 'help' for help on commands
       'man' to read the manual
       'quit' to quit the shell

 Operating system: Red Hat Enterprise Linux AS release 3 (Taroon Update 9)
 /dev/vda2 mounted on /
 /dev/vda1 mounted on /boot

><fs> edit /boot/grub/grub.conf
ファイルを編集するコマンドには、edit、vi、および emacs が含まれます。write、mkdirupload 、tar-in などのファイルおよびディレクトリーを作成するために多くのコマンドも存在します。

21.4.4. guestfish を含むその他のアクション

mkfs、part-add、lvresize、lvcreate 、および pvcreate などのコマンドで、ファイルシステムのフォーマット、パーティションの作成、LVM 論理ボリュームの作成、サイズ変更、およびサイズも可能

21.4.5. guestfish を使用したシェルスクリプト

必要に応じて guestfish を対話的に使用することに慣れたら、有用のシェルスクリプトを作成することができます。以下は、新しい MOTD(メッセージ)をゲストに追加する簡単なシェルスクリプトです。
#!/bin/bash -
 set -e
 guestname="$1"

 guestfish -d "$guestname" -i <<'EOF'
   write /etc/motd "Welcome to Acme Incorporated."
   chmod 0644 /etc/motd
 EOF

21.4.6. augeas および libguestfs スクリプト

libguestfs と Augeas の組み合わせは、Linux ゲスト仮想マシン設定を操作するためのスクリプトを書き込む際に役に立ちます。たとえば、以下のスクリプトでは、ゲスト仮想マシンのキーボード設定を解析してレイアウトを出力し、レイアウトを出力します。この例では、Red Hat Enterprise Linux を実行しているゲスト仮想マシンでしか機能することに注意してください。
#!/bin/bash -
 set -e
 guestname="$1"

 guestfish -d "$1" -i --ro <<'EOF'
   aug-init / 0
   aug-get /files/etc/sysconfig/keyboard/LAYOUT
 EOF
提案は、設定ファイルを変更するのにも使用できます。上記のスクリプトを変更して、キーボードレイアウトを変更できます。
#!/bin/bash -
 set -e
 guestname="$1"

 guestfish -d "$1" -i <<'EOF'
   aug-init / 0
   aug-set /files/etc/sysconfig/keyboard/LAYOUT '"gb"'
   aug-save
 EOF
以下の 2 つのスクリプト間で以下の 3 つの変更に注意してください。
  1. --ro オプションは 2 番目の例では削除され、ゲスト仮想マシンに書き込む機能を利用できます。
  2. aug-get コマンドが、取得せずに値を変更するようにug-set に変更されるようになりました。新しい値は「gb」です (引用符を含む)。
  3. ここでは、comug-save コマンドが使用され、ディスクに変更が書き込まれます。
注記
8 進法の詳細は、Web サイトを参照してください http://augeas.net
guestfish では、この紹介のドキュメントで簡単に対応できます。たとえば、ディスクイメージをゼロから作成するには、以下を実行します。
guestfish -N fs
または、ディスクイメージからディレクトリー全体をコピーします。
><fs> copy-out /home /tmp/home
詳細は、man ページの guestfish(1)を参照してください。