2013/08/15

iSCSIターゲットの実装を目指して

長らく放置プレーにしていて、削除するつもりだったblogをまたしても更新しているのは、単純に今が夏休みだからに他ならない。することがないのだから、仕方がない。

思い返せば、今から数年前になるのだろうか? ファイルの作成日付を見ると2009年になっているのだが、なんとなくiSCSIでも実装してやろうかと思い立ったわけだよ。根拠はないが。でもって、iSCSIというものはRFC3720で決められているというところまではわかった。

だったら、後はちょっと頑張ってこれを読んでやれば、それっぽいものが作れるのではないかと考えた。ついでに、頑張って読むのだから合わせて日本語に訳したメモも作ってやろうかと。それを始めたのが、大体2009年4月頃らしい。

それから暇を見つけてはRFC3720を少しずつ和訳して、それをOpenOfficeのWriterで作文していった訳だよ。で、一通り読み終わった後で気がついたんだよ。

で、結局、一番使いそうな書き込む命令とか、読み込む命令とか、どこに書いてあったのか? Readとか、Writeとかいう命令があってもよさそうな気がするけど、出てこなかったんじゃないのか? メディアの容量を取得するとか、なんか、直感的にいって、そんなものもいるんじゃないのか?

まぁ、書いてないんだよ。これが。RFC3720には。

とどのつまり、RFC3720はSCSIのコマンドを搬送するプロトコルなだけだから、メディアがどーのとか、データの書き込みがどうとかといったコマンドは、全部SCSIで決まっていることになっている。でもってそれを、SCSIコマンドPDUとか、SCSIレスポンスPDUとか、SCSI Data-In PDUとか、SCSI Data-Out PDUとか、そういったやつに押し込んで搬送するだけなんだよ。

ということは何か? SCSIのコマンドも調べる必要があるのか? という、そういうことらしい。

しかも、どこにでも情報がありそうなSCSIのコマンドについては、意外とこれまた日本語の情報はまったくといっていいほど存在しない。世の中に人間は、それで困らないのだろうか? まぁ、それはいいとして。

結局、SCSIのコマンドで何を読む必要があるのか?

とりあえずは、RFC3720で頻繁に参照されている「SAM2」つまり、SCSI Architecture Model - 2という代物が必要になるらしい。なので、これを頑張って和訳してみる。

しかし、ここにも肝心のコマンドについては何もかかれていない。タイトル通り、これはSCSIのアーキテクチャ全体を述べたものである。しかし、これを読んでわかったことがある。それは、SCSIのコマンドは、SCSI Primary Commandsと、デバイスごとに定義される固有のコマンドとに分かれて定義されているということだ。

つまり、ごくまれにRFC3720で参照されている「SCSI Primary Commands -3」と、まったく参照されていない「SCSI Block Commands - 2」を、さらに読まなければならないということだ。

ここまでくるとさすがに嫌になってくる。SPC-3は全部で500ページ位ある。こんなものを全部読めというのかと。

しかし、そうはいってもすでにRFC3720が日本語で200ページ程度、SAM-2が100ページ程度作成済みである。これを無碍に捨てるのも惜しい。そういうことで、結局このまま進むことにした。したよ。してやったよ。

で、気がついてみれば今は2013年で、ようやくSPC-3の和訳も終わって、このあたりでちょっと公開しておいてみようかと。

後はSBC-2が残っているが、それも今の時点で2/3位まで終わってるし、まぁ、もうしばらくしたら実装に着手できるのではないかと。どうでもいいことだけどね。

0 件のコメント: