試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

QEMUのrawディスクイメージに関する覚え書き(前半)

QEMUが使用できるディスク形式には、ハードディスクの内容そのままの形で読み書きする「raw」がある。
ここでは、この形式のイメージファイルの作成から、ホストOS上でイメージファイルの中身にアクセスしたいときに使用するlosetupの概要までを扱う。

rawイメージの作成方法

ファイル形式は「そのまま」のデータとなるため、専用の初期化方法(ディスクイメージ作成ツールによるイメージ作成)は必要ない。単に、割り当てたいだけの大きさの適当なデータをファイルに書き出しておけばよい。
ファイルの作成をGUIで行いたいのであれば「ddコマンドで/dev/zeroからファイルを作成する作業をGUIで実行」を参照。
端末から作業を行う場合は

$ dd if=/dev/zero of=[rawファイルの場所] bs=[ブロックサイズ] count=[ブロック数]

のようにする。例としては

$ dd if=/dev/zero of=[rawファイルの場所] bs=1M count=4k

で4GiBが確保できる。サイズはbs=の値とcount=の値とを掛けたものとなるが、ブロックサイズを大きくしすぎるとメモリ使用量が無駄に増えるだけ*1なので、ほどほどにしておく。

OSのインストール

OSのインストール時には、他の形式と同様、ハードディスクのイメージファイルとして、このrawファイルを指定する。
OSのインストールCD/DVDのイメージを同時に読み込ませて起動し、通常通りにOSをインストールする。

rawイメージの中にアクセスする

ここでは、例としてCentOS 5.2を試しにインストールした上で、その中の各(LVMによる仮想を含む)パーティションにアクセスすることにする。
構成としては

  • ディスク全体は4GiB
  • LVMのボリュームグループ名はVolGroupCentOS
  • レイアウト自体は既定だが、サイズを変更(/(論理ボリューム名:LogVolRootfs)は3.5GiB、スワップ(論理ボリューム名:LogVolSwap)は384MiB)し、/boot/ext2にした

となった。

losetupについて

ファイルシステム上にあるSquashfsファイルシステムISO9660ファイル*2などをマウントするときにも使われているが、これらと同様、ループバックデバイス(/dev/loop[数字])を使用してイメージファイルをデバイスとして、実際のハードディスクに近い感覚で扱うことができる。その際に使用されるのがutil-linuxに含まれるlosetupファイルシステムが書き込まれたファイルのマウントのときとは違って、全体を丸ごとそのまま使用する。
なお、ループバックデバイスには同時使用数に限度があり、利用可能なデバイス-fオプション付きで表示してくれるのだが、全て使用中のときには

$ /sbin/losetup -f
losetup: could not find any free loop device
$ echo ${?}
255

となり、利用できない。

(「QEMUのrawディスクイメージに関する覚え書き(後半)」に続く)

関連記事:

*1:例えばbs=1Gを指定すると1GiBのメモリが必要になる

*2:ISO9660ファイルはCDEmuのほうがお手軽に使える