第11章 ゲストのインストール

目次

11.1. qemu-kvm を利用した基本インストール
11.2. qemu-img を利用したディスク管理

仮想マシンは、データと仮想マシンを定義するオペレーティングシステムファイルから 構成されています。仮想マシンは VM ホストサーバ 内で動作し、制御されます。この章では、 仮想マシンのインストールについて一般的な手順を説明しています。

仮想マシンを作成する前に、下記の内容にご注意ください:

さらなる要件については、各オペレーティングシステムのインストール関連のマニュアルを お読みください。

11.1. qemu-kvm を利用した基本インストール

virt-managervm-install など、 libvirt ベースのツールでは仮想マシンを 設定したり管理したりするのに便利なインターフェイスを提供しています。これらは いずれも qemu-kvm に対するラッパー (ラッピングするもの) として動作します。ただし、 libvirt ベースのツールを全く使用せず、 qemu-kvm を直接使用する ことも可能です。

[Warning]

qemu-kvm で作成した仮想マシンは、 libvirt ベースのツールでは表示する ことができません。

下記の例では、 qemu-kvm を使用することで 例4.1「vm-install を使用したコマンドラインからの対話型セットアップ」 での例と同じ パラメータで仮想マシンを設定します。コマンドについての詳しい説明は、関連する マニュアルページをお読みください。

仮想化された環境下で動作させたいシステムについて、そのイメージを作成していない 場合は、インストールメディアからイメージを作成する必要があります。このような 場合は、ハードディスクイメージを作成し、インストールメディアやメディアそれ自身の イメージを用意する必要があります。

まずは qemu-img でハードディスクを作成します。

qemu-img create1 -f raw2 /images/sles11/hda3 8G4

1

サブコマンド create では、 qemu-img に対して 新しいイメージを作成するように指示しています。

2

-f パラメータでディスクの形式を指定しています。

3

イメージファイルのフルパスを指定しています。

4

イメージのサイズ、ここでは 8 GB を指定しています。イメージはスパースファイルと 呼ばれる形で作成され、ディスク内にデータが蓄えられていくたびに実容量が拡大して いく形になっています。ここで指定するサイズは、イメージファイルの最大サイズを 指定しています。

1 つ以上のハードディスクイメージを作成したら、 qemu-kvm を利用して仮想マシンの設定を行ない、インストールシステムを起動します。

qemu-kvm -name "sles11"1 -M pc-0.122 -m 7683 \
-smp 24 -boot d5 \
-drive file=/images/sles11/hda,if=virtio,index=0,media=disk,format=raw6 \
-drive file=/isos/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso,index=1,media=cdrom7 \
-net nic,model=virtio,macaddr=52:54:00:05:11:118 \
-vga cirrus9 -balloon virtio10

1

ウインドウキャプションに表示されるほか、 VNC サーバの名前としても使用される 仮想マシン名です。名前はシステム内で唯一のものでなければなりません。

2

マシンの種類 (Standard PC, ISA-only PC, Intel-Mac など) を 指定しています。ここに指定できるパラメータの一覧を得るには、 qemu-kvm -M ? を実行してください。 pc-0.12 は既定の Standard PC の意味です。

3

仮想マシンに割り当てる最大メモリ量を指定しています。

4

2 プロセッサの SMP システムであることを指定しています。

5

起動順序を指定しています。指定できる値はそれぞれ、 a, b (フロッピィディスク 1 または 2), c (最初のハードディスク), d (最初の CDROM), n から p まで (ネットワークアダプタ 1 から 3 に対応する イーサネット起動) です。既定値は c です。

6

最初の (index=0) ハードディスクを指定しています。 raw 形式で、擬似仮想化 (if=virtio) ドライブとしてアクセスします。

7

2 番目の (index=1) イメージドライブは、 CD-ROM として動作するものを指定しています。

8

擬似仮想化 (model=virtio) のネットワークアダプタを、 MAC アドレス 52:54:00:05:11:11 で指定しています。 ここで指定する値はネットワーク内で唯一のものを設定してください。そうでないと、 ネットワーク上での通信に問題が発生する可能性があります。

9

グラフィックカードを指定しています。 none を 指定した場合はグラフィックカードが無効化されます。

10

動的にメモリ量を変更できるようにするため、擬似仮想化バルーンデバイスを設定 しています (最大メモリ量については -m パラメータで 指定します) 。

ゲスト側のオペレーティングシステムのインストールが終わったら、 CD-ROM デバイスの 指定を行なう必要はなくなり、簡単にシステムを起動できるようになります:

qemu-kvm -name "sles11" -M pc-0.12 -m 768 \
-smp 2 -boot c \
-drive file=/images/sles11/hda,if=virtio,index=0,media=disk,format=raw \
-net nic,model=virtio,macaddr=52:54:00:05:11:11 \
-vga cirrus -balloon virtio

11.2. qemu-img を利用したディスク管理

前の章 (11.1項 「qemu-kvm を利用した基本インストール」) では、 ハードディスクのイメージを作成するのに qemu-img コマンドを 使用してきましたが、本コマンドは汎用的なディスクイメージ操作にも使用することが できます。この章では、ディスクイメージを柔軟に管理する際に便利な、各種の qemu-img サブコマンドを紹介しています。

11.2.1. qemu-img 実行時の一般的な情報

qemu-img は (zypper のように) サブコマンドを使用します。各サブコマンドは異なる種類のオプションを認識する 仕組みになっていて、それらのうちのいくつかは複数のサブコマンドで使用できる 汎用オプション、それ以外はサブコマンド内で独自のものになっています。 利用可能なオプションを確認するには、 qemu-img のマニュアルページ (man 1 qemu-img) をご覧ください。 qemu-img は一般に、下記のような書式で記述します:

qemu-img サブコマンド [オプション]

サブコマンドには下記のようなものがあります:

create

ファイルシステム上に新しいディスクイメージを作成します。

check

既存のディスクイメージにエラーがないかどうか、確認を行ないます。

convert

既存のディスクイメージを、異なる形式に変換します。

info

指定したディスクイメージに関する情報を表示します。

snapshot

既存のディスクイメージに対するスナップショットを管理します。

commit

既存のディスクイメージに対して、変更点を適用します。

rebase

既存のイメージから、新しいベースイメージを作成します。

resize

既存のイメージのサイズを増やしたり、減らしたりします。

11.2.2. ディスクイメージの作成や変換、チェック

この章では、ディスクイメージの作成方法や状態の確認のほか、ディスクイメージの 形式を一方から他方に変換する手順、および特定のディスクイメージについて 詳細な情報を取得する手順について説明しています。

11.2.2.1. qemu-img create

VM ゲスト 側のオペレーティングシステムで使用する新しいディスクイメージを 作成するには、 qemu-img create コマンドを使用します。 下記のような書式で実行します:

qemu-img create -f 種類1 -o オプション2 ファイル名3 サイズ4

1

作成するイメージの種類を指定します。対応しているイメージの種類を 表示するには、 qemu-img -h を 実行し、出力の最後の行をお読みください。

2

イメージの種類に対して追加のオプションをコマンドラインで指定することができます。 このようなオプションは -o で指定してください。 raw イメージの場合は size オプション のみがオプションとして存在していて、たとえば -o size=8G のように記述すると、コマンドの終わりにサイズを追加することなくサイズを設定する ことができます。

3

作成するディスクイメージのパスを指定します。

4

作成するディスクイメージのサイズを指定します (-o size=<サイズ> オプションで指定していない場合) 。 ここでは必要に応じて接尾辞を付けることができ、それぞれ K (キロバイト), M (メガバイト), G (ギガバイト), T (テラバイト) を指定することができます。

たとえば sles11sp1.raw という新しいディスクイメージを、 /images ディレクトリ以下に最大 4 GB として作成する場合、 下記のようなコマンドになります:

tux@venus:~> qemu-img create -f raw -o size=4G /images/sles11sp1.raw
Formatting '/images/sles11sp1.raw', fmt=raw size=4294967296

tux@venus:~> ls -l /images/sles11sp1.raw
-rw-r--r-- 1 tux users 4294967296 Nov 15 15:56 /images/sles11sp1.raw

tux@venus:~> qemu-img info /images/sles11sp1.raw
image: /images/sles11sp1.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 0

上記のとおり、新しく作成したイメージの 見た目 (virtual) 上のサイズは 4 GB ですが、実際にディスク領域を占有しているサイズ (disk size) は 0 になっています。これは、まだ何もデータが書き込まれていない ためです。

11.2.2.2. qemu-img convert

ディスクのイメージ形式を変換するには、 qemu-img convert コマンドを使用します。 QEMU でサポートしているイメージ形式について、一覧を 取得するには、 qemu-img -h を実行し、 出力の最後の行をお読みください。コマンドは下記のように記述します:

qemu-img convert -c1 -f 入力種類2 -O 出力種類3 -o オプション4 入力ファイル名5 出力ファイル名6

1

目的のディスクイメージに対して、圧縮機能を適用します。 qcowqcow2 形式のみが圧縮を サポートしています。

2

変換元のディスクイメージの形式を指定します。多くの場合自動検出が行なわれる ため、省略が可能です。

3

変換先のディスクイメージの形式を指定します。

4

変換先のイメージ形式に対して、オプションを指定する項目です。 -o ? を指定すると、変換先のイメージ形式で対応している オプションの一覧を表示することができます。

5

変換元のディスクイメージファイルを指定します。

6

変換先のディスクイメージファイルを指定します。

tux@venus:~> qemu-img convert -O vmdk /images/sles11sp1.raw \
/images/sles11sp1.vmdk

tux@venus:~> ls -l /images/
-rw-r--r-- 1 tux users 4294967296 16. lis 10.50 sles11sp1.raw
-rw-r--r-- 1 tux users 2574450688 16. lis 14.18 sles11sp1.vmdk

選択した変換先のイメージ形式について、これに対応するオプションの一覧を表示 するには、下記のコマンドを入力します (なお vmdk をお使いの イメージ形式に合わせてください):

tux@venus:~> qemu-img convert -O vmdk /images/sles11sp1.raw \
/images/sles11sp1.vmdk -o ?
Supported options:
size             Virtual disk size
backing_file     File name of a base image
compat6          VMDK version 6 image
subformat        VMDK flat extent format, can be one of {monolithicSparse \
    (default) | monolithicFlat | twoGbMaxExtentSparse | twoGbMaxExtentFlat}
scsi             SCSI image

11.2.2.3. qemu-img check

既存のディスクイメージについて、エラーがないかどうかを確認するには、 qemu-img check コマンドを使用します。なお、全ての ディスクイメージの形式で、この機能に対応しているというわけではないことに ご注意ください。下記のような書式で実行します:

qemu-img check -f 形式1 ファイル名2

1

チェック対象のディスクイメージの形式を指定します。多くの場合自動検出が 行なわれるため、省略が可能です。

2

チェック対象のディスクイメージファイルを指定します。

何もエラーが検出されない場合、コマンドは何も出力を返しません。それ以外の 場合は、エラーの種類とエラー数がそれぞれ表示されます。

tux@venus:~> qemu-img check -f qcow2 /images/sles11sp1.qcow2
ERROR: invalid cluster offset=0x2af0000
[...]
ERROR: invalid cluster offset=0x34ab0000
378 errors were found on the image.

11.2.2.4. 既存のディスクイメージのサイズ拡張

新しいイメージを作成する場合は、イメージを作成する前に、その最大サイズを指定 しなければなりません (詳しくは 11.2.2.1項 「qemu-img create」 をお読みください) 。また、 VM ゲスト をインストールし実行したあとで、初期 設定したサイズでは不足し、さらなる領域を割り当てる必要が発生する場合があります。

既存のディスクイメージのサイズを 2 ギガバイトだけ拡張するには、下記の手順を 行ないます:

qemu-img resize /images/sles11sp1.raw +2GB
[Note]

サイズ変更は raw ディスクイメージに対してのみ実施する ことができます。その他のイメージ形式のサイズを変更するには、サイズ変更の前に qemu-img convertraw 形式に 変換する必要があります。

これにより、ディスク内には最後のパーティション以降に 2 ギガバイトほどの 空き領域が生まれます。あとは既存のパーティションのサイズ変更を行なったり、 新しいパーティションを追加したりすることができます。

図11.1 ゲスト側の YaST パーティション設定における新規 2GB パーティション

ゲスト側の YaST パーティション設定における新規 2GB パーティション

11.2.3. qemu-img による仮想マシンのスナップショット管理

仮想マシンのスナップショットとは、 VM ゲスト が実行中の状態について、それを 保存するための機能です。スナップショットにはプロセッサ (CPU) の状態のほか、 メモリ (RAM) やデバイス、全ての書き込み可能なディスクについての情報が 含まれます。

スナップショットは、お使いの仮想マシンを特定の状態で保存しておきたい場合に便利な 機能です。たとえば仮想サーバ内でネットワークサービスを設定したような場合、その 状態で仮想マシンをすぐ開始して、その時点の状態に戻したいような場合が考えられます。 それ以外にも、仮想マシンの電源を落としたタイミングでスナップショットを作成して それをバックアップとし、 VM ゲスト に対して実験的な作業を行なう前の準備とする 場合にも便利なものです。この章では、特に後者のような場合を想定して説明しています。 前者については 第13章 QEMU モニタを利用した仮想マシンの管理 で説明しています。

スナップショットを使用するには、お使いの VM ゲスト に少なくとも 1 台以上の 書き込み可能なハードディスクイメージが、 qcow2 形式で必要です。 このデバイスは通常、 1 台目の仮想ハードディスクとして使用します。

仮想マシンのスナップショットは savevm コマンドで作成する もので、これは対話的な QEMU モニタから実行することができます。また、それぞれの スナップショットには 'タグ' を設定することができ、スナップショットの識別が 簡単に行なえるようになっています。 QEMU モニタについて、詳しくは 第13章 QEMU モニタを利用した仮想マシンの管理 をお読みください。

qcow2 ディスクイメージにスナップショットを保存すると、 qemu-img snapshot コマンドで内容を確認することができます。

[Warning]

仮想マシンが動作している間は、 qemu-img snapshot コマンドで 仮想マシンのスナップショットを作成したり削除したりすることは行なわないでください。 これを行なってしまうと、仮想マシンの状態を保持しているディスクイメージが 壊れてしまう場合があります。

11.2.3.1. 既存のスナップショットの表示

ディスクイメージ で指定するディスクイメージ内に保存されている 全てのスナップショットを表示するには、 qemu-img snapshot -l ディスクイメージ を使用します。 こちらのコマンドは、 VM ゲスト が動作中でも実行できます。

tux@venus:~> qemu-img snapshot -l /images/sles11sp1.qcow2 
Snapshot list:
ID1       TAG2               VM SIZE3        DATE4          VM CLOCK5
1         booting                4.4M 2010-11-22 10:51:10   00:00:20.476
2         booted                 184M 2010-11-22 10:53:03   00:02:05.394
3         logged_in              273M 2010-11-22 11:00:25   00:04:34.843
4         ff_and_term_running    372M 2010-11-22 11:12:27   00:08:44.965

1

スナップショットの識別番号です。通常は自動的に番号が増えていきます。

2

スナップショットの識別文字列です。これは識別番号を人間にとって 読みやすい形式にしたものです。

3

スナップショットが占有するディスク領域です。実行中のアプリケーションで 多くのメモリが使用されている場合、スナップショットのサイズも大きくなります。

4

スナップショットを作成した日時です。

5

仮想マシンのクロックについて、現時点での状態を示しています。

11.2.3.2. 電源の切られた仮想マシンに対するスナップショット作成

電源の切られた仮想マシンについて、このスナップショットを作成するには、 qemu-img snapshot -c スナップショット名 ディスクイメージ を実行します。

tux@venus:~> qemu-img snapshot -c backup_snapshot /images/sles11sp1.qcow2
tux@venus:~> qemu-img snapshot -l /images/sles11sp1.qcow2 
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         booting                4.4M 2010-11-22 10:51:10   00:00:20.476
2         booted                 184M 2010-11-22 10:53:03   00:02:05.394
3         logged_in              273M 2010-11-22 11:00:25   00:04:34.843
4         ff_and_term_running    372M 2010-11-22 11:12:27   00:08:44.965
5         backup_snapshot           0 2010-11-22 14:14:00   00:00:00.000

VM ゲスト で復元したいような状況が発生し、保存したスナップショット (下記の 例では 5 番のスナップショット) に戻したい場合は、 VM ゲスト の電源を切って から下記のコマンドを実行します:

tux@venus:~> qemu-img snapshot -a 5 /images/sles11sp1.qcow2

実行完了後、 qemu-kvm で仮想マシンを起動すると、 5 番のスナップショットの状態に戻ることができます。

[Note]

qemu-img snapshot -c コマンドは、 QEMU モニタの savevm コマンド (第13章 QEMU モニタを利用した仮想マシンの管理 をお読みください) とは無関係です。たとえば QEMU のモニタから savevm でスナップショットを作成した場合、このスナップ ショットを qemu-img snapshot -a コマンドで適用させる ことはできません。

11.2.3.3. スナップショットの削除

仮想マシンのスナップショットのうち、古いものや不要なものを削除したい場合は、 qemu-img snapshot -d スナップショット ID ディスクイメージ コマンドを実行します。 このコマンドを実行すると、 qcow2 のディスクイメージ内で スナップショット用に確保されていたディスク領域が開放されます:

tux@venus:~> qemu-img snapshot -d 2 /images/sles11sp1.qcow2

11.2.4. 効果的なディスクイメージの作業

実際の活用例を考えてみます: あなたはサーバの管理者で、数多くの仮想化された オペレーティングシステムを実行し、管理しているものとします。これらのうちの あるグループは、ある特定のディストリビューションをベースにした構成で、その他の グループはプラットフォームやディストリビューションが異なる (そしておそらくは Unix 以外の) オペレーティングシステムをベースにした構成であるものとします。 さらに複雑なことに、それぞれの仮想化されたゲストシステムは、それぞれの部署や 配置環境に合わせて同じディストリビューションを異なる設定で使用しているものと します。一方はファイルサーバとして異なる設定を、他方は Web サーバなどの サービスを提供していて、いずれも SUSE Linux Enterprise Server 11 SP1 をベースにしているものとします。

QEMU では ベース と呼ばれるディスクイメージを作成することが できます。これは仮想マシンの雛型として利用できるもので、これらのベースイメージを 利用することで、オペレーティングシステムを何回もインストールしたりすることなく、 手間を省くことができるようになっています。

11.2.4.1. ベースイメージと派生イメージ

まずは通常の手順でディスクイメージを作成し、目的となるシステムをインストール します。それぞれ詳しくは 11.1項 「qemu-kvm を利用した基本インストール」11.2.2項 「ディスクイメージの作成や変換、チェック」 をお読みください。 その後、ここまでで作成したイメージを元に、新しいイメージを構築します。ベース となるイメージは '支援' ファイルとも呼ばれ、必要な '派生' イメージをここから 作成し、ベースイメージを再作成するような手間を省いて派生イメージを直接起動できる 仕組みになっています。また、複数の派生イメージが 1 つのベースイメージを参照すること もできます。そのため、ベースイメージを変更してしまうと、依存関係に問題が発生 することになるので、 QEMU では派生イメージにのみ変更点を書き込み、ベース イメージは読み込み専用としてアクセスします。

ベースイメージは新規にインストールした (必要であればユーザ登録済みの) オペレーティングシステムを利用し、一切の修正や追加のアプリケーションを適用 またはインストール/削除していない状態であることをお勧めします。ベースイメージに 対して作成した派生イメージで、必要な最新の修正をインストールしておくのが便利です。

11.2.4.2. 派生イメージの作成

[Note]

ベースイメージに対しては raw 形式を使用することが できますが、 raw 形式は派生イメージに必要な backing_file オプションに対応していないため、 この形式を利用することができません。派生イメージに対しては、たとえば qcow2 形式をお使いください。

たとえば /images/sles11sp1_base.raw ファイルが、 新規インストールしたイメージを含むベースイメージとします。

tux@venus:~> qemu-img info /images/sles11sp1_base.raw 
image: /images/sles11sp1_base.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 2.4G

イメージの予約済みサイズは 4 GB で、実際のサイズは 2.4 GB です。 また、形式は raw になっています。 この /images/sles11sp1_base.raw ファイルから 派生イメージを作成するには、下記のように実行します:

tux@venus:~> qemu-img create -f qcow2 /images/sles11sp1_derived.qcow2 \
-o backing_file=/images/sles11sp1_base.raw 
Formatting '/images/sles11sp1_derived.qcow2', fmt=qcow2 size=4294967296 \
backing_file='/images/sles11sp1_base.raw' encryption=off cluster_size=0

作成された派生イメージの情報は、下記のようになります:

tux@venus:~> qemu-img info /images/sles11sp1_derived.qcow2 
image: /images/sles11sp1_derived.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 140K
cluster_size: 65536
backing file: /images/sles11sp1_base.raw \
(actual path: /images/sles11sp1_base.raw)

派生イメージが予約するサイズはベースイメージのものと同じ (4 GB) ですが、実際の サイズは 140 KB しかありません。これは派生イメージ側で行なわれた変更点だけが 派生イメージに書き込まれるためです。あとは派生イメージ側で仮想マシンを起動して、 必要であれば登録を行なったり、最新の修正をインストールしたりしてください。また、 不要なソフトウエアパッケージをアンインストールしたり、必要なものをインストール したりすることもできます。その後 VM ゲスト をシャットダウンして、再度派生 イメージを確認すると、下記のようになります:

tux@venus:~> qemu-img info /images/sles11sp1_derived.qcow2
image: /images/sles11sp1_derived.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 1.1G
cluster_size: 65536
backing file: /images/sles11sp1_base.raw \
(actual path: /images/sles11sp1_base.raw)

disk size の欄が 1.1 GB まで増えています。これは ベースイメージと比較し、ファイルシステム上に施された変更点が書き込まれている ためです。

11.2.4.3. 派生イメージの再ベース

いったん派生イメージを修正する (修正の適用やアプリケーションのインストール、 環境設定の変更など) を行なうと、派生イメージのサイズはそれなりのサイズに なってしまいます。場合によっては、そこから既存のベースイメージと派生イメージを 利用した '合成' イメージを作成したい場合が考えられます。たとえば最初の ベースイメージを新規にインストールしたシステムとして作成し、そこから セキュリティの修正や更新をインストールした状態を追加のベースイメージとしたり したい場合が考えられます。あとは後者のほうのベースイメージを雛型にして 派生イメージを作成したりすることができます。後者のほうのベースイメージは、 前者のベースイメージとは独立した存在となります。派生イメージから新しい ベースイメージを作成する作業を、 '再ベース' と呼びます:

tux@venus:~> qemu-img convert /images/sles11sp1_derived.qcow2 \
-O raw /images/sles11sp1_base2.raw

このコマンドでは、新しいベースイメージ /images/sles11sp1_base2.raw を、 raw 形式で作成します。

tux@venus:~> qemu-img info /images/sles11sp1_base2.raw
image: /images/sles11sp1_base2.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 2.8G

新しいイメージは元々のベースイメージと比較して 0.4 GB ほど大きくなっています。 また、このファイルには backing file (ベースイメージ) の表示がありませんので、 このイメージファイルをベースにして、新しい派生イメージを作成することができます。 これにより、お使いの環境に合わせて洗練された仮想ディスクイメージの構造を作成する ことができるため、作業の手間を大幅に省くことができます。

11.2.4.4. VM ホストサーバ におけるイメージのマウント

作業上の都合によっては、仮想ディスクイメージをホストシステム側でマウントした ほうが便利な場合があります。たとえば VM ホストサーバ 側にネットワークサポートが 存在しない場合、マウント作業は VM ゲスト とファイルの転送を行なう唯一の手段と なります。

Linux システムでは、 'ループバック' デバイスを利用することで raw 形式のディスクイメージ内のパーティションをマウントする ことができます。最初の例は少し複雑ですが詳しい説明が、もう 1 つの例は簡単で わかりやすい方式です:

手順11.1 パーティションオフセットを計算してディスクイメージをマウントする方法

  1. まずは loop (ループ) デバイスを設定し、 マウントしたいパーティションを含むディスクイメージを指定します。

    tux@venus:~> losetup /dev/loop0 /images/sles11sp1_base.raw
  2. 次にマウントしたいパーティションの セクタサイズセクタ番号 を確認します。

    tux@venus:~> fdisk -lu /dev/loop0
    
    Disk /dev/loop0: 4294 MB, 4294967296 bytes
    255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectors
    Units = sectors of 1 * 512 = 5121 bytes
    Disk identifier: 0x000ceca8
    
           Device Boot      Start         End      Blocks   Id  System
    /dev/loop0p1              63     1542239      771088+  82  Linux swap
    /dev/loop0p2   *     15422402    8385929     3421845   83  Linux

    1

    ディスクのセクタサイズを示しています。

    2

    パーティションの開始セクタ番号を示しています。

  3. 下記のようにしてパーティションのオフセット値を計算します:

    セクタサイズ * 開始セクタ番号 = 512 * 1542240 = 789626880

  4. ループデバイスを削除し、計算結果のオフセット値を指定して、パーティションを 用意しておいたディレクトリにマウントします。

    tux@venus:~> losetup -d /dev/loop0
    tux@venus:~> mount -o loop,offset=789626880 \
    /images/sles11sp1_base.raw /mnt/sles11sp1/
    tux@venus:~> ls -l /mnt/sles11sp1/
    total 112
    drwxr-xr-x   2 root root  4096 Nov 16 10:02 bin
    drwxr-xr-x   3 root root  4096 Nov 16 10:27 boot
    drwxr-xr-x   5 root root  4096 Nov 16 09:11 dev
    [...]
    drwxrwxrwt  14 root root  4096 Nov 24 09:50 tmp
    drwxr-xr-x  12 root root  4096 Nov 16 09:16 usr
    drwxr-xr-x  15 root root  4096 Nov 16 09:22 var
    
  5. マウントできたパーティションに対して、ファイルをコピーしたりします。 作業が終わったらマウントを解除します。

    tux@venus:~> cp /etc/X11/xorg.conf /mnt/sles11sp1/root/tmp
    tux@venus:~> ls -l /mnt/sles11sp1/root/tmp
    tux@venus:~> umount /mnt/sles11sp1/

手順11.2 kpartx を利用したディスクイメージのマウント

  1. まずは loop (ループ) デバイスを設定し、 マウントしたいパーティションを含むディスクイメージを指定します。

    tux@venus:~> losetup /dev/loop0 /images/sles11sp1_base.raw
  2. ディスクイメージのパーティション情報から、デバイスマップを作成します。

    tux@venus:~> kpartx -a /dev/loop0
  3. 事前に用意しておいたディレクトリに、ディスクイメージ内のパーティションを マウントします。

    tux@venus:~> mount /dev/mapper/loop0p1 /mnt/p1

    なお、 loop0p1 の項目には、マウントしたいパーティションの 番号を指定してください。たとえば loop0p3 と指定すると、 ディスクイメージ内の 3 番目のパーティションをマウントすることになります。

  4. あとは必要に応じてマウントされたパーティションに対してファイルやディレクトリの コピーや移動を行ないます。作業が終わったらマウントを解除し、ループデバイスを 削除します。

    tux@venus:~> umount /mnt/p1
    tux@venus:~> losetup -d /dev/loop0
[Warning]

仮想マシンが実行中の場合は、それらのイメージに対して 読み書き可能な 形で マウントを行なってはなりません。これを行なってしまうと、 パーティションの情報を破壊してしまうほか、 VM ゲスト 全体を破壊してしまう場合が あります。


openSUSE KVM を利用した仮想化 13.1