modprobeを実行します。
# modprobe nbdメジャー番号を調べます。
# dmesg | grep nbd nbd: registered device at major 43デバイスファイルを作成します。
# mknod /dev/nbd0 b 43 0これで準備ができました。
コンソールを2つ用意します。1つはnvpが起動したままになり、もう1つはmountするのに使います。
赤い文字のところが入力部分です。
# modprobe nbdnvpを実行します。ここではカレントディレクトリにnvpのプログラム本体が存在するとします。
# ./nvpnbdのパスを聞いてくるので入力します。ここでは/dev/nbd0を使うことにします。/dev/nbd0は存在していなければなりません。
nbd name: /dev/nbd0イメージファイル名を聞いてくるので入力します。ここではカレントディレクトリのtest.vmdkを使うことにします。test.vmdkは存在していなければなりません。
filename: test.vmdk書き込み禁止にするかどうか聞いてくるので選択します。ここでは書き込み禁止にするとして1を入力します。
readonly? 1. readonly 2. readwrite 3. cancel : 1nvpが認識できるイメージ形式でハードディスクだった場合はパーティションを選択します。ここでは1番目のパーティションを選択することにします。
partition no? 0. cancel 1. 0x04 DOS FAT16(<32M) offset=63,length=61425 2. 0x04 DOS FAT16(<32M) offset=61551,length=41013 3. 0x06 DOS FAT16(32M-2G) offset=102627,length=107037 : 1今回入力した内容のコマンドライン引数が表示されます。このコマンドライン引数を使用することで上の入力を省くことができます。
command line [# nvp /dev/nbd0 test.vmdk r 1] start (stop:Ctrl-C)
# mount /dev/nbd0 /mntパーティションの形式がわかっている場合は指定したほうがいいかもしれません。
# umount /mntアンマウントが終わったらコンソール1をCtrl-Cで終了します。
ata0-master: type=disk, path="c.img", mode=flat, cylinders=20, heads=16, spt=63コンソール1
# ./nvp nbd name: /dev/nbd0 filename: c.img readonly? 1. readonly 2. readwrite 3. cancel : 1ハードディスクイメージなので1を選択します。
harddisk? 1. harddisk 2. floppydisk 3. cancel : 1PC/AT系なので1を選択します。
pc/at? 1. pc/at 2. pc-98 3. cancel : 1イメージ開始位置は0,セクタ長は512バイト,全セクタ数はcylinders*heads*spt=20160,ヘッド数はheadsの16,トラック長はsptの63を指定します。
image offset: 0 bytes per sector: 512 total sectors: 20160 heads: 16 sectors per track: 63あとは同じです。
partition no? 0. cancel 1. 0x0E DOS FAT16X offset=63,length=20097 : 1 command line [# nvp /dev/nbd0 c.img r h a 0 512 20160 16 63 1] start (stop:Ctrl-C)
# ./nvp nbd name: /dev/nbd0 filename: floppy.tst readonly? 1. readonly 2. readwrite 3. cancel : 1フロッピーディスクイメージなので2を選択します。
harddisk? 1. harddisk 2. floppydisk 3. cancel : 21.44MBのフロッピーの場合は以下のようになります。
image offset: 0 bytes per sector: 512 total sectors: 2880 heads: 2 sectors per track: 18パーティションは1つなので選択なしでスタートします。
command line [# nvp /dev/nbd0 floppy.tst f 0 512 2880 2 18 ] start (stop:Ctrl-C)拡張子によっては細かい設定なしでスタートするかもしれません(flp,ima等)。
ata0-master: type=disk, path="growing.img", mode=growing, cylinders=203, heads=16, spt=63コンソール1
# ./nvp nbd name: /dev/nbd0 filename: growing.img readonly? 1. readonly 2. readwrite 3. cancel : 1growingイメージではヘッド数とトラック長を指定します。
heads: 16 sectors per track: 63あとは同じです。
partition no? 0. cancel 1. 0x04 DOS FAT16(<32M) offset=63,length=61425 2. 0x04 DOS FAT16(<32M) offset=61551,length=41265 3. 0x06 DOS FAT16(32M-2G) offset=102879,length=101745 : 2 command line [# nvp /dev/nbd0 growing.img r 16 63 2] start (stop:Ctrl-C)
ata0-master: type=disk, path="base.img", mode=undoable, cylinders=20, heads=16, spt=63, journal="redo.img"コンソール1
# ./nvp nbd name: /dev/nbd0undoableイメージでは差分ファイル名(journal=に書いてある方)を先に指定します。
filename: redo.imggrowingイメージと同様に入力していきます。
readonly? 1. readonly 2. readwrite 3. cancel : 2 heads: 16 sectors per track: 63ここで元ファイル名(path=に書いてある方)を指定します。
base file name: base.imgあとは同じです。
partition no? 0. cancel 1. 0x0E DOS FAT16X offset=63,length=20097 : 1 command line [# nvp /dev/nbd0 redo.img 16 63 base.img 1] start (stop:Ctrl-C)
ata0-master: type=disk, path="test.img1", mode=sparse, cylinders=203, heads=16, spt=63sparseイメージではファイル名の最後の数字から1引いた数字のついた同名のファイルが存在した場合は、それを親のファイルとして認識します。この例の場合test.img0が存在すると、それを親としてtest.img1はそこからの差分となっていると認識します。親のファイルに対して書き込みをした場合子供のファイルは無効となるので注意してください。
# ./nvp nbd name: /dev/nbd0 filename: test.img1 readonly? 1. readonly 2. readwrite 3. cancel : 1 heads: 16 sectors per track: 63上で書いたようにsparseイメージでは親のファイル名が決まるので指定する必要はありません。
partition no? 0. cancel 1. 0x04 DOS FAT16(<32M) offset=63,length=61425 2. 0x04 DOS FAT16(<32M) offset=61551,length=41265 3. 0x06 DOS FAT16(32M-2G) offset=102879,length=101745 : 2 command line [# nvp /dev/nbd0 test.img1 r 16 63 2] start (stop:Ctrl-C)