virt-manager
や virt-install
など、 libvirt
ベースのツールを利用することで、仮想マシンの構築から管理までを便利に行うことができます。実態としては、これらは qemu-system-ARCH
コマンドのラッパーとして動作していますが、 libvirt
ベースのツールを使用せずに qemu-system-ARCH
を直接使用することもできます。
qemu-system-ARCH
と libvirt の関係性についてqemu-system-ARCH
で作成した 仮想マシン は、 libvirt
ベースのツールから参照することはできません。
qemu-system-ARCH
を利用した基本的なインストール #Edit source下記の例では、 SUSE Linux Enterprise Server 11 をインストールした仮想マシンを作成します。各コマンドに対する詳細に名説明については、それぞれのマニュアルページをお読みください。
仮想環境内で使用するシステムのイメージを作成していない場合は、まずインストールメディアでイメージを作成します。この場合、ハードディスクイメージを新規に作成して、インストールメディアのイメージを取得するか、インストールメディアそれ自身を用意します。
まずは qemu-img
でハードディスクを作成します。
>
qemu-img create1 -f raw2 /images/sles/hda3 8G4
| |
| |
イメージファイルのフルパスを指定しています。 | |
イメージのサイズ (この場合は 8 GB) を指定しています。イメージは スパースイメージファイル として作成され、ディスクにデータが書き込まれていくことで実際のサイズが増えていく形態になります。ここで指定したサイズは、イメージファイルの最大サイズを指定していることになります。 |
少なくとも 1 台のハードディスクを作成したら、あとは qemu-system-ARCH
を実行して仮想マシンを起動し、インストールシステムを開始します:
#
qemu-system-x86_64 -name "sles"1-machine accel=kvm -M pc2 -m 7683 \
-smp 24 -boot d5 \
-drive file=/images/sles/hda,if=virtio,index=0,media=disk,format=raw6 \
-drive file=/isos/SLE-15-SP7-Online-ARCH-GM-media1.iso,index=1,media=cdrom7 \
-net nic,model=virtio,macaddr=52:54:00:05:11:118 -net user \
-vga cirrus9 -balloon virtio10
ウインドウのタイトル部や VNC サーバに接続した際に表示される仮想マシンの名前を指定しています。この名前は他の仮想マシンと重複していてはなりません。 | |
マシンの種類を指定します。設定可能な値の一覧を表示するには、 | |
仮想マシンに対して割り当てる最大メモリ量を指定しています。 | |
2 台のプロセッサが搭載された SMP システムであることを指定しています。 | |
起動の順序を指定しています。設定可能な値は | |
1 台目 ( | |
2 台目 ( | |
準仮想化 ( | |
グラフィックカードを指定しています。 | |
準仮想化型のバルーンデバイスを定義し、メモリ量を動的に変更できるように設定しています (ただし |
ゲスト側のオペレーティングシステムのインストールが完了したら、あとは CD-ROM ドライブ無しで仮想マシンを起動することができます:
#
qemu-system-x86_64 -name "sles" -machine type=pc,accel=kvm -m 768 \
-smp 2 -boot c \
-drive file=/images/sles/hda,if=virtio,index=0,media=disk,format=raw \
-net nic,model=virtio,macaddr=52:54:00:05:11:11 \
-vga cirrus -balloon virtio
qemu-img
を利用したディスクイメージの管理 #Edit source上記の章 (35.1項 「qemu-system-ARCH
を利用した基本的なインストール」) では qemu-img
コマンドを利用してハードディスクのイメージを作成してきましたが、このコマンドは一般的なディスク操作にも使用することができます。本章では、ディスクイメージをより柔軟に管理するための qemu-img
のサブコマンドについて紹介しています。
qemu-img
は zypper
と同様に、サブコマンドを指定してさまざまな処理を行います。それぞれのサブコマンドにはそれぞれのオプションが用意されています。オプションによっては一般的なもののほか、サブコマンド特有のものも存在しています。オプションの一覧について、詳しくはマニュアルページ ( man 1 qemu-img
) をお読みください。また、 qemu-img
は、下記のような書式で実行します:
>
qemu-img サブコマンド [オプション]
また、下記のようなサブコマンドに対応しています:
create
ファイルシステム内に新しいディスクイメージを作成します。
check
既存のディスクイメージ内にエラーがないかどうかをチェックします。
compare
2 つのイメージファイル内に同じ内容が含まれているかどうかを確認します。
map
イメージファイル名とそのファイルチェインのメタデータをダンプ出力します。
amend
指定したイメージファイルに対して、イメージ形式固有のオプションを修正します。
convert
既存のディスクイメージを異なる形式に変換して新しいディスクイメージを作成します。
info
ディスクイメージに関する情報を表示します。
snapshot
既存のディスクイメージに対するスナップショットを管理します。
commit
既存のディスクイメージに対する変更を適用します。
rebase
既存のイメージを利用して新しいベースイメージを作成します。
resize
既存のディスクイメージのサイズを拡張/縮小します。
本章では、ディスクイメージの作成方法や状態の確認方法、ディスクイメージ形式の変換方法、そしてディスクイメージの詳細情報の取得方法について説明しています。
qemu-img create
は VM ゲスト のオペレーティングシステム向けに新しいディスクイメージを作成するコマンドです。このコマンドは下記のような書式で実行します:
>
qemu-img create -f fmt1 -o options2 fname3 size4
作成するイメージの形式を指定します。サポートされている形式は、 | |
イメージ形式によっては、コマンドラインに追加のオプションを指定することができるものもあります。この追加のオプションは | |
作成すべきディスクイメージファイルのフルパスを指定します。 | |
作成するディスクイメージのサイズを指定します ( |
たとえば新しいディスクイメージ sles.raw
を /images
ディレクトリ内に作成し、最大サイズを 4 GB として設定したい場合は、下記のコマンドを入力して実行します:
>
qemu-img create -f raw -o size=4G /images/sles.raw Formatting '/images/sles.raw', fmt=raw size=4294967296>
ls -l /images/sles.raw -rw-r--r-- 1 tux users 4294967296 Nov 15 15:56 /images/sles.raw>
qemu-img info /images/sles.raw image: /images/sles11.raw file format: raw virtual size: 4.0G (4294967296 bytes) disk size: 0
上記の通り、新しく作成したイメージの 仮想的な サイズは 4 GB ですが、実際のサイズは 0 バイトになっています。これは、イメージに対してまだ何もデータを書き込んでいないためです。
btrfs ファイルシステム内にディスクイメージを作成する必要がある場合、 btrfs に搭載されたコピーオンライト機能によって、性能劣化が発生する場合があります。この場合に備えて、 nocow=on
オプションを指定してイメージを作成することができます:
>
qemu-img create -o nocow=on test.img 8G
なお、コピーオンライト機能を使用したい (たとえばスナップショットの作成や仮想マシン間を跨いだ共有など) 場合は、 nocow
オプションを指定せずに実行してください。
qemu-img convert
はディスクイメージを他の形式に変換するためのコマンドです。 QEMU でサポートされるイメージ形式の一覧を表示したい場合は、 qemu-img
-h
と入力して実行し、出力の末尾のほうをご覧ください。このコマンドは下記のような書式になっています:
>
qemu-img convert -c1 -f fmt2 -O out_fmt3 -o options4 fname5 out_fname6
作成するディスクイメージを圧縮するための指定です。 | |
元となるディスクイメージの形式を指定します。通常は自動検出されるため、省略してもかまいません。 | |
作成するディスクイメージの形式を指定します。 | |
作成するディスクイメージ形式に対する追加のオプションを指定します。 | |
変換元となるディスクイメージのパスを指定します。 | |
変換先のディスクイメージのパスを指定します。 |
>
qemu-img convert -O vmdk /images/sles.raw \ /images/sles.vmdk>
ls -l /images/ -rw-r--r-- 1 tux users 4294967296 16. lis 10.50 sles.raw -rw-r--r-- 1 tux users 2574450688 16. lis 14.18 sles.vmdk
選択したイメージ形式で利用可能なオプションの一覧を表示するには、下記のようなコマンドを入力して実行します (下記の vmdk
を使用したい形式に置き換えて実行してください):
>
qemu-img convert -O vmdk /images/sles.raw \
/images/sles.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
qemu-img check
コマンドは、既存のディスクイメージ内にエラーが無いかどうかを調査します。なお、ディスクイメージ形式によっては、この機能に対応していないものもあります。このコマンドは下記のような書式で実行します:
>
qemu-img check -f fmt1 fname2
何もエラーが検出されない場合、コマンドは何も出力を行いません。それ以外の場合、それぞれのエラーと発生したエラーの数が表示されます。
>
qemu-img check -f qcow2 /images/sles.qcow2
ERROR: invalid cluster offset=0x2af0000
[...]
ERROR: invalid cluster offset=0x34ab0000
378 errors were found on the image.
新しいイメージを作成する場合、イメージを作成する前に最大サイズを指定しなければなりません (詳しくは 35.2.2.1項 「qemu-img create」 をお読みください) 。ですが、 VM ゲスト をインストールしてしばらく使用していると、最初に指定したサイズでは容量が不足してしまうことがあります。このような場合は、容量を増やして対応することができます。
既存のディスクイメージを 2 GB だけ拡張したい場合は、たとえば下記のように入力して実行します:
>
qemu-img resize /images/sles.raw +2GB
ディスクイメージサイズの変更を行うには、ディスクイメージの形式が raw
, qcow2
のいずれかでなければなりません。それ以外の形式になっているイメージのサイズを変更したい場合は、 qemu-img convert
でサイズ変更可能な形式に変換してから実施してください。
これでイメージファイルの末尾には 2 GB の空き領域が現れることになります。あとは既存のパーティションをサイズ変更するか、もしくは新しくパーティションを作成することで、その領域を使用できるようになります。
qcow2 は QEMU で使用されるメインのディスクイメージ形式です。サイズを必要に応じて拡張する機能が用意されているほか、仮想マシン側で実際に必要とされているサイズのみを割り当てる機能があります。
qcow2 形式のファイルは固定のサイズを 1 つの単位としてまとめられています。これらの単位は クラスタ と呼ばれます。ゲスト側からの見た目での仮想ディスクは、このクラスタのサイズごとに区切られているものとして提供されます。 QEMU の既定では、クラスタのサイズは 64 kB に設定されていますが、新しいイメージを作成する際に異なるサイズを設定することもできます:
>
qemu-img create -f qcow2 -o cluster_size=128K virt_disk.qcow2 4G
qcow2 形式のイメージには、 L1, L2 テーブルと呼ばれる、 2 階層のテーブルセットが含まれています。 L1 テーブルはディスクイメージごとに 1 つしか存在しませんが、 L2 テーブルはイメージファイルの大きさに合わせて多数のものが存在しています。
仮想ディスクへの読み込みや書き込みが発生すると、 QEMU は対応する L2 テーブルを読み込んで、必要なデータの場所を検出します。それぞれの I/O 操作に対応したテーブルの読み込み処理にはシステムのリソース消費が伴いますので、 QEMU ではディスクアクセスの速度を向上させるため、メモリ内に L2 テーブルのキャッシュを保持するようになっています。
キャッシュサイズは割り当て済みの領域の量にあわせて決まります。 L2 キャッシュは下記の仮想ディスクサイズの計算式が出発点となります:
ディスクサイズ = L2_キャッシュのサイズ * クラスタサイズ / 8
既定のクラスタサイズである 64 kB であれば、上記の式は下記のようになります:
ディスクサイズ = L2_キャッシュのサイズ * 8192
このことから、既定のクラスタサイズであるとすると、ディスク領域をマッピングするためのキャッシュは、下記のようになります:
L2_キャッシュのサイズ = ディスクサイズ_(GB) * 131072
QEMU では、既定で L2 テーブルのキャッシュが 1 MB (1048576 バイト) に設定されています。上記の数式に当てはめると、 1 MB のキャッシュはディスクサイズで 8 GB (1048576 / 131072) 分になります。つまり、作成する仮想ディスクのサイズが 8 GB までであれば、 L2 テーブルのキャッシュサイズは十分であることになります。それより大きいディスクの場合は、 L2 テーブルのキャッシュサイズを増やすことによって、ディスクの速度を上げることができます。
キャッシュサイズの指定を行うには、 QEMU のコマンドラインに対して -drive
オプションを指定します。それ以外の方法としては、 QMP との通信を行っている場合、 blockdev-add
コマンドを使用することもできます。 QMP に関する詳細は、 37.11項 「QMP - QEMU マシンプロトコル」 をお読みください。
それぞれ下記のオプションを指定することで、仮想化ゲストのキャッシュサイズを設定することができます:
L2 テーブルキャッシュの最大サイズを指定します。
refcount ブロックキャッシュの最大サイズを指定します。 refcount に関する詳細については、 https://raw.githubusercontent.com/qemu/qemu/master/docs/qcow2-cache.txt をお読みください。
両方のキャッシュサイズの合計最大サイズを指定します。
上記のオプションを指定する場合は、下記に注意してください:
L2 および refcount ブロックのキャッシュサイズは、クラスタサイズの倍数である必要があります。
いずれかのオプションのみを指定した場合、 QEMU は指定しなかったほうのオプションを自動調整します。具体的には、 L2 キャッシュが refcount キャッシュよりも 4 倍大きくなるようにします。
refcount キャッシュは L2 キャッシュほど頻繁に使用されるものではありませんので、下記のように比較的小さな値にしておくことができます:
#
qemu-system-ARCH [...] \
-drive file=disk_image.qcow2,l2-cache-size=4194304,refcount-cache-size=262144
キャッシュサイズを大きくすると、それだけメモリの使用量も増えてしまいます。それぞれの qcow2 ファイルには個別の L2 キャッシュが存在する仕組みであるため、多数の巨大なディスクイメージを使用していると、かなりの量のメモリを使用する結果になってしまいます。メモリの消費は、ゲストの構築作業内でバッキングファイル ( 35.2.4項 「ディスクイメージの効率的な使用」 ) を使用したり、スナップショット (see 35.2.3項 「qemu-img を利用した仮想マシンのスナップショット管理」 ) を作成したりすることで、より大きくなってしまいます。
このような理由から、 QEMU では cache-clean-interval
という設定が提供されています。これは全てのキャッシュ項目に対する設定で、指定した秒数以上アクセスのない項目があった場合、それらをメモリから削除するための設定です。
下記の例では、 10 分間アクセスの無かった全てのキャッシュ項目を削除することになります:
#
qemu-system-ARCH [...] -drive file=hd.qcow2,cache-clean-interval=600
このオプションを指定しない場合、既定値である 0 が適用され、この機能が無効化されます。
仮想マシン のスナップショットは VM ゲスト の動作中に採取することのできるスナップショットです。スナップショットにはプロセッサ (CPU) やメモリ (RAM) のほか、デバイスや全ての書き込み可能なディスクに関する状態が含まれます。
スナップショット機能は、お使いの仮想マシンで特定の状態を保存したい場合に有用です。たとえば仮想化サーバ内でネットワークサービスを設定し、いつでもその時点に戻すことができて欲しいような場合などがあります。それ以外にも、何らかの実験的な作業を行って不安定になってしまう前に、仮想マシンをシャットダウンしてからバックアップを作成するようなことを行うこともできます。本章では後者について説明しています。前者については 第37章 「QEMU モニタを利用した仮想マシンの管理」 で説明しています。
スナップショットを使用するには、お使いの VM ゲスト 内に少なくとも 1 つ以上の書き込み可能な qcow2
形式のディスクイメージが存在しなければなりません。このようなデバイスは通常、 1 台目の仮想ハードディスクであるはずです。
仮想マシン のスナップショットは、対話型の QEMU モニタ内で savevm
コマンドを実行することで作成することができます。スナップショットを分かりやすくするために、 タグ を指定しておくこともできます。 QEMU モニタに関する詳細については、 第37章 「QEMU モニタを利用した仮想マシンの管理」 をお読みください。
qcow2
ディスクイメージ内にスナップショットを保存したあとは、 qemu-img snapshot
コマンドで内容を調査することができます。
仮想マシンが動作している場合、 qemu-img snapshot
コマンドで仮想マシンのスナップショットを作成したり、削除したりしてはなりません。動作中にこれらを実施してしまうと、仮想マシンの状態を持つディスクイメージが破壊されてしまう場合があります。
qemu-img snapshot -l
ディスクイメージ のように入力して実行すると、 ディスクイメージ で指定したディスクイメージ内に保存されている全てのスナップショットを表示することができます。この一覧表示は、 VM ゲスト の動作中でも表示することができます。
>
qemu-img snapshot -l /images/sles.qcow2
Snapshot list:
ID1 TAG2 VM SIZE3 DATE4 VM CLOCK5
1 booting 4.4M 2013-11-22 10:51:10 00:00:20.476
2 booted 184M 2013-11-22 10:53:03 00:02:05.394
3 logged_in 273M 2013-11-22 11:00:25 00:04:34.843
4 ff_and_term_running 372M 2013-11-22 11:12:27 00:08:44.965
仮想マシンの電源が切れている状態で、現在の状態に対するスナップショットを作成するには、 qemu-img snapshot -c
スナップショットのタイトル ディスクイメージ のように入力して実行します。
>
qemu-img snapshot -c backup_snapshot /images/sles.qcow2
>
qemu-img snapshot -l /images/sles.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 booting 4.4M 2013-11-22 10:51:10 00:00:20.476
2 booted 184M 2013-11-22 10:53:03 00:02:05.394
3 logged_in 273M 2013-11-22 11:00:25 00:04:34.843
4 ff_and_term_running 372M 2013-11-22 11:12:27 00:08:44.965
5 backup_snapshot 0 2013-11-22 14:14:00 00:00:00.000
VM ゲスト 側で何らかの問題が発生し、保存されているスナップショットに戻す必要が生じた場合 (たとえば ID 5 に戻したい場合) 、 VM ゲスト の電源を落としてから下記のようなコマンドを実行します:
>
qemu-img snapshot -a 5 /images/sles.qcow2
上記を実行したあとは、通常通り qemu-system-ARCH
で仮想マシンを起動することで、スナップショット番号 5 の状態から起動を行うことができます。
なお、 qemu-img snapshot -c
のコマンドは QEMU モニタ (詳しくは 第37章 「QEMU モニタを利用した仮想マシンの管理」 をお読みください) の savevm
コマンドとは関係がありません。たとえば QEMU モニタで savevm
を実行して作成したスナップショットを、 qemu-img snapshot -a
で適用するようなことはできません。
qemu-img snapshot -d
スナップショット_ID ディスクイメージ のように入力して実行することで、仮想マシンに対する古いスナップショットや不要なスナップショットを削除することができます。これによりスナップショットが占有していた qcow2
ディスクイメージ内の領域が解放されることになります:
>
qemu-img snapshot -d 2 /images/sles.qcow2
まずは下記のような状況を想像してみてください。あなたはサーバの管理者で、複数の仮想化オペレーティングシステムを動作させて管理を行っています。これらのシステムのうち、 1 つのグループは特定のディストリビューションをベースにしていますが、その他のグループは異なる (おそらくは Unix 以外の) プラットフォームを使用しています。さらに複雑なことに、それぞれの仮想ゲストシステムは同じディストリビューションをベースにしていますが、使用している部署や部門が異なるため、構成も異なっているような状態です。ファイルサーバについては Web サーバとは構成やサービスなどが異なっていますが、いずれも openSUSE をベースにしているものとします。
このような場合、 「ベース」 となるディスクイメージを作成して対応するようなことができます。このベースイメージは、仮想マシンの雛形として使用することができますので、何度もオペレーティングシステムをインストールしたりする手間を省くことができます。
まずは通常の手順でディスクイメージを作成し、目的のシステムをインストールしてください。詳しくは 35.1項 「qemu-system-ARCH
を利用した基本的なインストール」 と 35.2.2項 「ディスクイメージの作成/変換/検査」 をお読みください。あとはそのイメージをベースイメージとして、新しいイメージファイルを作成するだけです。これで 派生 イメージを作成することができたことになります。なお、ベースイメージを利用して起動してはなりません。必ず派生イメージのほうを起動してください。また、 1 つのベースイメージから複数の派生イメージを作成することもできます。そのため、ベースイメージのほうを変更してしまうと、派生関係が壊れてしまうことになります。派生イメージを利用して起動を行うと、 QEMU は変更点を派生イメージのほうにのみ書き込むようになります。それに対して、ベースイメージは読み込み専用となります。
ベースイメージを作成する場合は、オペレーティングシステムを新規にインストールし (必要であれば登録作業などを行い) 、修正 (パッチ) などはインストールせず、アプリケーションについてもインストールや削除を行わないようにしておくことをお勧めします。必要であれば、そのベースイメージを元に、最新の修正を適用したもう 1 つのベースイメージを作成してもかまいません。
ベースイメージには raw
形式を使用することができますが、派生イメージには raw
形式を使用することができません。これは、 raw
形式は backing_file
オプションに対応していないためです。下記の例では、派生イメージに qcow2
形式を使用します。
たとえば /images/sles_base.raw
が raw
形式のベースイメージであるとします。
>
qemu-img info /images/sles_base.raw
image: /images/sles_base.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 2.4G
イメージの予約サイズは 4 GB で実サイズは 2.4 GB 、そして形式が raw
であることがわかります。あとは /images/sles_base.raw
ファイルに対する派生イメージを作成します:
>
qemu-img create -f qcow2 /images/sles_derived.qcow2 \
-o backing_file=/images/sles_base.raw
Formatting '/images/sles_derived.qcow2', fmt=qcow2 size=4294967296 \
backing_file='/images/sles_base.raw' encryption=off cluster_size=0
派生イメージの詳細を確認します:
>
qemu-img info /images/sles_derived.qcow2
image: /images/sles_derived.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 140K
cluster_size: 65536
backing file: /images/sles_base.raw \
(actual path: /images/sles_base.raw)
派生イメージの予約サイズはベースイメージと同じサイズ (4 GB) になっていますが、実サイズは 140 KB しかありません。これは、派生イメージにはベースイメージからの変更点のみを記録する仕組みであるためです。あとは派生イメージを利用して仮想マシンを起動し、必要に応じて登録などの処理を行い、最新の修正を適用してください。不要なパッケージを削除してもかまいませんし、必要な新しいパッケージをインストールしてもかまいません。あとは VM ゲスト をシャットダウンし、再度派生イメージの状態を確認してみます:
>
qemu-img info /images/sles_derived.qcow2
image: /images/sles_derived.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 1.1G
cluster_size: 65536
backing file: /images/sles_base.raw \
(actual path: /images/sles_base.raw)
上記の disk size
の値にもあるとおり、この例では実サイズが 1.1 GB まで拡張しました。ここには、ベースイメージからのファイルシステム内の変更点が含まれています。
派生イメージの修正 (修正の適用、必要なアプリケーションのインストール、各種の設定変更等々) を行うことで、必要な環境を構築することができます。ここからベースイメージをマージ (併合) することができるほか、新しいベースイメージを元に派生イメージを作り直すこともできます。
元のベースイメージ (例: /images/sles_base.raw
) には、新規にインストールしたシステムが含まれています。このベースイメージを雛形として、最新のセキュリティ更新などをインストールして、新しいベースイメージを作成することができます。新しいベースイメージからも派生イメージを作成して、必要なアプリケーションやサービスなどを動作させることができます。なお、新しいベースイメージは元のベースイメージから独立させることができます。このような新しいベースイメージの作成を、 再ベース と呼びます。
>
qemu-img convert /images/sles_derived.qcow2 \
-O raw /images/sles_base2.raw
上記のコマンドを実行すると、 raw
形式で新しいベースイメージ /images/sles_base2.raw
を作成することができます。
>
qemu-img info /images/sles_base2.raw
image: /images/sles11_base2.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 2.8G
新しいイメージは元のイメージに比べて 0.4 ギガバイトほど大きくなっています。このイメージファイルはベースイメージを使用していませんので、ここから新しい派生イメージを作成することができます。これにより、組織の要件にあわせ、より洗練された仮想ディスクイメージ階層を作成することで、時間と手間の両方を削減できるようになります。
仮想ディスクイメージは、ホストシステム内でマウントすることもできます。なお、あらかじめ 第20章 「libguestfs」 を読むとともに、仮想マシンイメージにアクセスするための専用ツールを使用しておくことを強くお勧めします。ただし、どうしても手作業でこれを実施しなければならないような場合、本章をお読みのうえ作業を行ってください。
Linux システムでは、 raw
形式のディスクイメージであれば、ループバックデバイスを利用して内部のパーティションをマウントすることができます。最初の例は複雑ではありますがわかりやすいもの、 2 つ目の例は直感的なものになっています:
まずはマウントしたいディスクイメージに対して loop デバイスを割り当てます。
>
losetup /dev/loop0 /images/sles_base.raw
セクタサイズ の項目を探し、マウントしたいパーティションの セクタ番号 の開始位置を判断します。
>
fdisk -lu /dev/loop0
ディスク /dev/loop0: 4294 MB, 4294967296 バイト
単位: セクタ (1 * 512 = 512 1バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x000ceca8
デバイス 起動 開始位置 終了位置 セクタ Id タイプ
/dev/loop0p1 63 1542239 771088+ 82 Linux スワップ / Solaris
/dev/loop0p2 * 15422402 8385929 3421845 83 Linux
開始位置を計算します:
セクタサイズ * 開始位置_(セクタ) = 512 * 1542240 = 789626880
いったんループバックデバイスの割り当てを解除したあと、計算結果をもとに offset 値を指定して、特定のディレクトリにマウントします。
>
losetup -d /dev/loop0>
mount -o loop,offset=789626880 \ /images/sles_base.raw /mnt/sles/>
ls -l /mnt/sles/ 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
あとはマウントしたパーティションに対して必要な作業を実施し、完了したらマウントを解除します。
>
cp /etc/X11/xorg.conf /mnt/sles/root/tmp>
ls -l /mnt/sles/root/tmp>
umount /mnt/sles/
動作中の仮想マシンが使用するパーティションを 読み書き可能な
モードでマウントしてはなりません。読み書き可能な状態でマウントしてしまうと、パーティションを破壊する結果になるほか、 VM ゲスト 全体を破壊する結果になってしまいます。