
多くの人は、USBフラッシュドライブをコンピューターに差し込めば何が起きるか分かっているつもりです。ドライブ文字が表示され、一定の容量が認識され、そこへファイルをコピーしたり、そこからファイルを取り出したりできる。USBフラッシュドライブとはそういうものです。
ただし、必ずしもそうである必要はありません。
USBストレージは、プラスチックケースの中に入っているNANDフラッシュだけで決まるわけではありません。USBコネクタとNANDメモリの間にはコントローラがあり、そのコントローラが、デバイスが自分をどう識別するか、そしてホストコンピューターがそのデバイスとどうやり取りするかを大きく左右します。
ここから話が面白くなります。USBフラッシュドライブの内部にはごく普通のNANDフラッシュが入っていても、コンピューターに対してはまったく別のものとして振る舞うことができるからです。
その一例が、ハードウェアコントローラレベルでCD-ROMデバイスとして動作するよう構成されたUSBフラッシュドライブです。
そして、いいえ。単にファイルを読み取り専用にするという話ではありません。
コンピューターは実際にはUSBメモリの中身を知っているわけではない
USBデバイスをコンピューターに差し込んだとき、OSがプラスチックケースの中を見透かしてNANDフラッシュを発見するわけではありません。USBホストとデバイスの間で一種の会話が行われ、デバイス側が自分は何者なのか、そしてコンピューターは自分とどう通信すべきなのかという情報を提供します。
少し、空港の入国審査カウンターに人が歩いていく場面を想像してみてください。
その人は、実質的に次のような内容を示す身分証明書を提示します。
「私はこの種類のデバイスです。こういう形で自分を識別します。こういう機能を提供します。そして、こうやって私と通信してください。」
USBフラッシュドライブの場合、この会話の大部分をコントローラが担当します。
一般的なフラッシュドライブでは、コントローラがストレージを、OSがディスク型ストレージとして認識できる形で提示します。Windows、Linux、macOSはそれに応じたサポートを読み込み、そのデバイスと通信します。
しかし、NANDフラッシュそのものが必ずその形で提示されなければならないわけではありません。
CD-ROMエミュレーション向けに設計・構成されたコントローラであれば、NANDフラッシュを使いながら、光学メディアのように動作する論理ストレージデバイスとして公開できます。ホストコンピューターから見ると、その時点で普通の書き込み可能なUSBフラッシュドライブよりも、ずっとCD-ROMデバイスらしく見えるわけです。
その下にある物理ストレージが実際にはNANDフラッシュであることを、コンピューターはそれほど気にしません。
そこが面白いところです。
物理的なストレージ技術と、コンピューターに提示されるストレージデバイスは、必ずしも同じである必要はありません。
ここでは、ソフトウェア上の小細工と、本当の意味でのコントローラレベルの動作との違いも重要になります。この違いについては、USB CD-ROMエミュレーションと、ファームウェア方式とソフトウェア方式の違いの記事でも詳しく説明しています。簡単に言えば、コントローラがストレージをどのように提示するかを変えることは、単にファイル属性を変更したり、ソフトウェアでISOファイルをマウントしたりすることとは根本的に違います。
ドアの看板だけが違う建物だと考えてみる
ひとつの物理的な建物を想像してください。
外に銀行という看板を出せば、訪れる人は窓口、口座、入金、引き出しを想定して中に入ります。
その看板を図書館に変えると、人々はまったく同じ建物に対して、完全に違う期待を持つようになります。窓口でお金を預けようとはしません。本を探し、図書館のルールを期待します。
建物そのものは、必ずしも変わっていません。
変わったのは、外に示されているアイデンティティと、そのアイデンティティに結びつくルールです。
USBコントローラも、概念的にはよく似たことができます。
内部のストレージは依然としてNANDフラッシュでも、通常の書き込み可能なディスク型ストレージとして提示する代わりに、OSがCD-ROM形式のメディアとして理解する論理デバイスとして提示できます。
OSはその情報に応じて反応します。
ここは重要な違いです。USBフラッシュドライブ上にCD-ROMメディアを作ることは、Windowsでファイルをクリックして「読み取り専用」を選ぶこととは同じではありません。
また、通常のUSBストレージに対して書き込みだけを禁止することとも、必ずしも同じではありません。
そうした方法は、誰かがそのストレージデバイスに対して何をできるかを制御しようとするものです。
CD-ROMエミュレーションはさらに一歩進んで、ホストに対して提示されるストレージデバイスの種類そのものを変えます。
なぜわざわざこんなことをするのか
最初に聞くと、現代のUSBフラッシュドライブをCD-ROM時代の技術のように振る舞わせるというのは、逆行しているように思えるかもしれません。
しかし、実際には驚くほど実用的な理由があります。
15年、あるいは20年前に作られた産業用機械を考えてみてください。
そのサービス用ソフトウェアは、CD-ROMドライブがどこにでもあった時代に設計されたかもしれません。アプリケーション側が、更新ファイル、キャリブレーションファイル、インストールパッケージ、参照資料、復旧ユーティリティなどは光学メディアで提供されるものだと想定している可能性があります。
やがて物理的なCDドライブが壊れます。
交換用の光学ドライブは見つけにくくなり、焼いたディスクを維持するのも面倒になります。元のコンピューター自体は交換する価値がないかもしれませんが、それにつながっている産業設備には十分価値があります。
しかも、そのコンピューターを交換すると、まったく別の問題が生まれることもあります。産業システムというのは、常に新しいPCを置いて、いくつかソフトをコピーして、はい火曜日の午後には終了、という世界ではありません。
専用ドライバ、独自ハードウェア、検証要件、認証上の問題、あるいは何年も更新されていないソフトウェアが存在するかもしれません。更新されていない理由は単純で、今までずっと問題なく動いてきたからです。
機械そのものは10万ドルの価値があるのに、それを制御しているコンピューターでは、多くの人が子どもが小学生だった頃を最後に見たようなOSが動いている、ということもあります。
そうなると、新しさより互換性のほうが価値を持ちます。
自分自身を適切な光学メディアとして提示できるUSBデバイスなら、そうした異なる世代の技術をつなぐ橋になれる可能性があります。
古いアプリケーションを書き換えて現代のストレージを理解させる代わりに、現代のストレージ側に、古いアプリケーションがすでに理解している言葉を話させるわけです。
CD-ROMエミュレーションとは、CDのふりをすることよりも、CD-ROMという言葉を聞くことを期待しているコンピューターに対して、その言葉で話しかけることに近いのです。
組み込みシステムはさらに気難しいことがある
現代のデスクトップOSは非常に柔軟です。
普通のUSBフラッシュドライブを現在のWindowsコンピューターに差し込めば、Windowsがそれが何なのかを判断し、ファイルへアクセスさせてくれる可能性はかなり高いでしょう。
しかし、組み込みシステムはまったく別物です。
CNCマシン、診断装置、研究室の計測機器、製造システム、キオスク端末、自動車整備機器、POSシステム、特殊な測定装置などを考えてみてください。
こうした機械の多くは、汎用コンピューターとして設計されていません。
プログラマーは、その機械が何をするべきか、どのハードウェアを使うべきか、そして多くの場合、情報がどういう形で入ってくるべきかまで正確に分かっていました。
20年後に誰かが何かを接続するかもしれないからといって、あらゆるデバイスを処理できる素晴らしく柔軟なストレージルーチンを書く理由はほとんどありませんでした。
元の仕様に「ソフトウェアはCD-ROMで提供される」と書かれていれば、プログラマーはその前提で設計します。
そのためシステムは、デバイス種別、メディアの動作、ファイルシステム構造、論理ユニット、その他のストレージデバイス特性について一定の前提を持っている可能性があります。
そこでエミュレーションは単なる珍しい機能以上の意味を持ちます。
ホストシステムを変えるのではなく、USBデバイスがホストに対して「自分は何者か」と伝える内容を変えるのです。
高価で、変更が難しい、あるいは変更不可能な古い機器や特殊機器にとって、これは非常に有効な選択肢になり得ます。
USBフラッシュドライブはコネクタとメモリだけではない
これは、USBフラッシュドライブに関するもうひとつの興味深い誤解も浮き彫りにします。
USBフラッシュドライブを、次のような単純な式で考えたくなります。
USBコネクタ + NANDフラッシュ = USBフラッシュドライブ
しかし、この式には重要な要素が抜けています。
コントローラです。
USBコントローラは、ホストコンピューターとNANDフラッシュメモリの間にあります。その役割のひとつは、ホストが要求することと、フラッシュストレージ内部で実際に起きることの間を変換することです。
またコントローラは、デバイスがどう自分を識別するか、ストレージがどう公開されるか、どの特性が報告されるか、ホストからのコマンドにどう応答するかという点にも関わります。
つまり、似たNANDフラッシュを使っている2つのUSBデバイスでも、まったく同じコンピューターに接続したときに大きく違う動作をすることがあります。
ひとつは一般的なリムーバブルストレージとして表示されるかもしれません。
別のものは固定ディスクのように動作する設定になっているかもしれません。
さらに別の実装では、CD-ROMの論理ユニットを公開できます。
そして一部のコントローラアーキテクチャでは、さらに興味深いことができます。ひとつの物理USB接続を通じて、複数の論理ストレージデバイスを公開することです。
ひとつのUSBプラグから、2つの別々の部屋へつながる
1本のUSBフラッシュドライブをコンピューターに接続するところを想像してください。
コンピューターは、次の内容を含むCD-ROM形式の領域を見つけます。
インストーラ
マニュアル
ドライバ
復旧ツール
しかし同じ物理USBデバイスは、さらに通常の書き込み可能なストレージも提供し、そこには次の内容が入っています。
ログファイル
レポート
設定ファイル
ユーザーデータ
手元にあるのは依然として、ひとつのUSBコネクタとひとつの物理デバイスだけです。
しかし論理的には、コンピューターには、別々の仕事のために設計された2つの異なるストレージ環境が提示されています。
CD-ROM側にはメーカーが公開したオリジナル資料を入れ、書き込み可能な側は現場で生成される情報用として残しておくことができます。
技術者は、ひとつのデバイスにオリジナルの診断ソフトウェアとサービス資料を持ち歩きながら、同じデバイスの別領域にテスト結果、機器ログ、顧客ごとの設定ファイルを保存できます。
ここでの違いは重要です。
これは単に普通のUSBフラッシュドライブを2つのパーティションに分けることと同じではありません。
パーティションは、ディスク型ストレージデバイスの容量を分割します。どちらのパーティションも、基本的には同じ種類のストレージ環境の一部です。
それに対してUSBコントローラは、LUNと呼ばれることもある複数の論理ユニットを公開できます。これにより、ひとつの物理デバイスがホストに対して明確に異なるストレージとして振る舞うことができます。この点をさらに詳しく知りたい方には、LUNとパーティションの違い、そして1本のUSBドライブが2つのディスクとして表示される理由についての別記事もあります。
つまりCD-ROMエミュレーションでは、単に保存容量を分けるのではなく、ホストに提示される論理ストレージデバイスの動作やアイデンティティそのものを変えることができます。
ひとつの部屋を壁で2つに分けることと、まったく別の仕事をするために2つの部屋を作ることの違いです。
コンテンツ配布という面でも利点がある
CD-ROMにはもうひとつ便利な特性がありました。あまりに当たり前にそういうものだったため、多くの人がその意味を意識しなくなっていた特性です。
公開側が元の内容を管理していました。
20年前、CD-ROMでソフトウェアを買い、それをコンピューターにインストールしていました。ソフトをインストールしてもCD自体が変わることはありませんでした。
誤って休暇の写真をディスク上のインストールディレクトリへドラッグすることはできませんでした。社員が気軽にインストーラの半分を削除することもできませんでした。さらに300MB必要だからといって、誰かがドキュメントを消すこともできませんでした。
そのメディアは、実質的に「公開済みの完成物」だったのです。
USBフラッシュドライブは、ほぼすべての実用面で光学ディスクを上回りました。小さく、速く、持ち運びやすく、容量も圧倒的に大きくなっています。
しかし通常の書き込み可能なUSBストレージは、コンテンツを公開する側と、それを利用する側の境界も曖昧にしました。
ドキュメント、ソフトウェア配布、サービスツール、トレーニング資料、復旧ユーティリティ、その他管理されたコンテンツでは、その境界が役立つ場合があります。
CD-ROM形式の論理領域を設ければ、元の配布状態のまま残すべきコンテンツを置く場所を確保しつつ、同じデバイス上の別のストレージを、正当に変更が必要な情報のために使うことができます。
これはセキュリティと同じではない
ここには、明確にしておくべき重要な境界があります。
CD-ROMエミュレーションを、自動的に完全なセキュリティシステムだと表現すべきではありません。
ストレージを光学メディアのように動作させても、暗号署名、セキュアブート、暗号化、認証、その他ソフトウェアやデータが信頼できるかどうかを判断するための技術を置き換えることはできません。
それらは別の問題を解決する技術です。
CD-ROMエミュレーションの価値は主に、デバイス動作、互換性、管理された配布、公開済みコンテンツの維持にあります。
用途によっては、通常の変更を防止できることが非常に役立ちます。しかし「ユーザーには変更しにくい」と「暗号技術によって本物であることが証明されている」は同じ意味ではありません。
その違いを理解することは重要です。特にこうしたデバイスを産業環境や特殊用途で使う場合にはなおさらです。
USBフラッシュドライブをUSBフラッシュドライブらしく動かしたくないこともある
物理的なCD-ROMドライブが消えたからといって、光学ストレージの便利な特性まで全部一緒に消えてしまったわけではありません。
古いコンピューターが光学メディアを前提にしていることがあります。
専用ソフトウェアがそれを前提に設計されていることもあります。
組み込みシステムは、変更するより合わせるほうがはるかに簡単な場合があります。
メーカーが、オリジナルのドキュメントやソフトウェアを、ユーザーが変更する前提のストレージとは分けておきたい場合もあります。
そして時には、古いシステムに新しいものを理解させることが最も実用的な解決策とは限りません。
新しいもののほうを、古いシステムがすでに理解しているもののように振る舞わせればいいのです。
これは、USBフラッシュドライブを差し込むだけという単純さの裏側に隠れている、USB技術の面白い部分のひとつです。
手に持っているものの中にはNANDフラッシュメモリが入っているかもしれませんが、コンピューターが何を見るかを決めるのはNANDだけではありません。
その会話では、コントローラにも発言権があります。
そして適切なコントローラと設定があれば、USBフラッシュドライブは必ずしもUSBフラッシュドライブらしく動く必要はないのです。