17.4. guestfish のシェル

guestfish はインテラクティブなシェルで、コマンドラインまたはシェルスクリプトからゲスト仮想マシンのファイルシステムにアクセスするために使用することができます。libguestfs API の機能はすべてシェルで利用することができます。
仮想マシンのディスクイメージを表示または編集する場合は、まず次のコマンドを実行します。以下のパスは必要なディスクイメージのパスに置き換えてください。
guestfish --ro -a /path/to/disk/image
--ro は、ディスクイメージを読み取り専用で開くという意味です。このモードは書き込みのアクセスを許可しないため、常に安全なモードになります。ゲスト仮想マシンが実行中ではないことが 確実にわかっている 場合か、またはライブゲスト仮想マシンにディスクイメージが接続されていない場合以外は、このオプションは省略しないでください。ライブゲスト仮想マシンの編集には libguest virtual machinefs は使用できません。無理に編集を行おうとするとディスクが確実に破損し、元に戻せなくなります。
/path/to/disk/image は、そのディスクへのパスになります。ファイル、ホスト物理マシンの論理ボリューム (/dev/VG/LV など)、ホスト物理マシンのデバイス (/dev/cdrom)、または SAN LUN (/dev/sdf3) のいずれかになります。

注記

libguestfs と guestfish には root の権限は必要ありません。アクセスしているディスクイメージの読み込みや書き込みに root を必要とする場合にのみ root での実行が必要になります。
guestfish をインタラクティブに起動すると、次のようなプロンプトが表示されます。
 guestfish --ro -a /path/to/disk/image

Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems.
 
 Type: 'help' for help on commands
       'man' to read the manual
       'quit' to quit the shell
 
><fs>
プロンプトに応じて run と入力してライブラリーを開始し、ディスクイメージを接続します。これを初めて行う場合には 30 秒ほど時間がかかる場合がありますが、それ以降からの起動は大幅に速くなります。

注記

libguestfs は KVM (使用可能な場合) などハードウェアの仮想化加速機能を使ってこのプロセスを高速化します。
run コマンドを入力すると、次のセクションで説明されているような他のコマンドを使用できるようになります。

17.4.1. guestfish でファイルシステムを表示する

17.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
以下の出力では Windows のディスクイメージを表示しています。
><fs> run
><fs> list-filesystems
/dev/vda1: ntfs
/dev/vda2: ntfs
他にも便利なコマンドとして list-deviceslist-partitionslvspvsvfs-type、および file などがあります。以下の出力のように help コマンド を入力すると、各コマンドの詳細と help を得ることができます。
><fs> help vfs-type
 NAME
    vfs-type - get the Linux VFS type corresponding to a mounted device
 
 SYNOPSIS
     vfs-type device
 
 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".
ファイルシステムの実際の内容を表示する場合はまずマウントする必要があります。この例では、前述の出力にある Windows パーティションの 1 つを使用しています (/dev/vda2)。このパーティションは C:\ ドライブに対応するものとして認識されています。
><fs> mount-ro /dev/vda2 /
><fs> ll /
total 1834753
 drwxrwxrwx  1 root root       4096 Nov  1 11:40 .
 drwxr-xr-x 21 root root       4096 Nov 16 21:45 ..
 lrwxrwxrwx  2 root root         60 Jul 14  2009 Documents and Settings
 drwxrwxrwx  1 root root       4096 Nov 15 18:00 Program Files
 drwxrwxrwx  1 root root       4096 Sep 19 10:34 Users
 drwxrwxrwx  1 root root      16384 Sep 19 10:34 Windows
ファイルやディレクトリーを表示してダウンロードする場合は、lsllcatmoredownloadtar-out などの guestfish コマンドを使用することができます。

注記

このシェルには現在の作業ディレクトリーという概念がありません。普通のシェルとは異なり、たとえば cd などのコマンドを使ったディレクトリー間の移動ができません。パスはすべてスラッシュ (/) を先頭に付けた完全修飾パスにしなければなりません。Tab キーを使用してパスを補完することができます。
guestfish シェルを終了するには、exit と入力するか、または Ctrl+d を押します。

17.4.1.2. guestfish による検出の使用

手作業でファイルシステムを表示させ、マウントする代わりに、guestfish 自体にイメージを検出させて、そのファイルシステムをゲスト仮想マシンでのマウントと同様にマウントさせます。これを実行するには、コマンドラインに -i オプションを追加します。
guestfish --ro -a /path/to/disk/image -i

Welcome to guestfish, the libguestfs filesystem interactive shell for
 editing virtual machine filesystems.
 
 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
 [etc]
guestfish に検出とマウントを行わせるには libguestfs バックエンドを起動させる必要があるため、-i オプションを使用する場合は run コマンドは必要ありません。-i オプションは一般的な Linux や Windows のゲスト仮想マシンの多くで正常に動作します。

17.4.1.3. ゲスト仮想マシンの名前でゲスト仮想マシンにアクセスする

libvirt が認識できる名前を指定すると、コマンドラインからゲスト仮想マシンにアクセスすることができます (つまり、virsh list --all で表示される名前)。ゲスト仮想マシンの名前でそのゲスト仮想マシンにアクセスするには -d オプションを使用します。-i オプションは付けても付けなくても構いません。
guestfish --ro -d GuestName -i