(内容もお世辞にも分かりやすく書けてません…orz)
きっかけは昨日の記事。iSCSIターゲットサーバ上で論理ボリュームやパーティションを公開する領域として指定した場合、ターゲットサーバ上では1つのパーティションとして扱われる領域が、イニシエータ側ではディスクそのものだと認識され、その中にさらにパーティションが作成されることになります。
イニシエータ側はそれで何の問題もないんですが、ターゲットサーバ側で中身を見たいときに「パーティションの中にあるパーティション」のマウントってどうやるの?と考えたら頭の上にはてなマークが。
で、その解決方法。
実はとっても簡単で、offsetを指定してあげるだけでした。
まずはパーティション内のパーティション(分かりにくい言葉ですね^^;)のoffsetを調べるために、fdiskに -lu オプションを付けて実行します。(以下の例では /dev/hdb1 がiSCSIで公開している領域となります)
fdisk -lu /dev/hdb1
こんな感じの結果が出てくると思います。
この Start とあるのが各パーティションのオフセット値になります。ただしここで表示されているのはセクタ単位。fdiskのoffset値はバイト単位で指定する必要があるので、このStartの値にセクタサイズを掛け算した値を指定する必要があります。上記の例で第2パーティションを指定したいのであれば、Disk /dev/hdb1: 1069 MB, 1069254144 bytes
255 heads, 63 sectors/track, 129 cylinders, total 2088387 sectors
Units = セクタ数 of 1 * 512 = 512 bytes
デバイス Boot Start End Blocks Id System
/dev/hdb1p1 63 1044224 522081 b W95 FAT32
/dev/hdb1p2 1044225 2072384 514080 b W95 FAT32
1044225(セクタ位置) x 512(セクタサイズ) = 534643200
を指定する必要があります。
実際のコマンドは以下のようになります。
mount -o loop,offset=534643200 /dev/hdb1 /mnt
これでターゲットサーバ側でもディスクの内容を参照出来るようになりますが、1つ留意点が。イニシエータ側での書き込みはターゲットサーバ側には即座に反映されません。一度umountしてmountし直すと反映されていましたが、どのタイミングで反映されるかは具体的には分かりません。逆のパターンでターゲットサーバ上での書き込み結果もイニシエータ側はディスクの切り離し/再接続をするまで反映されませんでした。
基本的にはターゲット側とイニシエータ側で同時に書き込みする(それも別の仕組みで)事は考慮されていないと思うので、常時両方からmountするのではなく、イニシエータ側が使用していないときにターゲット側で内容を確認するための手段くらいに考えておいた方が良さそうです。
以下のサイトを参考にさせていただきました。(感謝!)
壊れたかもしれないハードディスクからのデータサルベージ - 黒糖々日記/kokutoto diary
http://d.hatena.ne.jp/kokutoto/20080525/p1
HDDイメージファイルをマウントして使う方法 - adsaria mood
http://d.hatena.ne.jp/adsaria/20080724