●逆襲のOS/2●(2009.11.04/2010.12.07)
USBマスストレージ
私がUSBを使用する最大の目的は、USBフラッシュメモリやメモリカードリーダーを使用すること。実家−自宅間のデータ交換や、仕事の納品の際に使用する。しかし、なかなか安定した動作をしないため、かなり苦労した。せっかく実家から持ち帰ったデータが破損していたり(実際は読み取り不良)、納品直前にシステムごとふっとんだり、それはもう、たいへんな苦労だったのである。現時点では、一応安定動作をする条件を発見したが、未だにUSBを自由に使用できる状況ではない。現状は;

●USBマスストレージの用途と要件

USBのマスストレージの用途は、@データ交換、Aデータ待避、の二つだろう。

データ交換とは、異なったPC間/異なったOS間でデータを交換すること。通常、容量はそれほど大きくなくても良い。大容量のデータ交換が必要な場合は、DVDに焼いたりネットワークでつないだりする方が普通。つまり、@の用途では、容量よりも可搬性と互換性が重要視される。具体的にはUSBフラッシュメモリやCF/SDなどのメモリカードが適当で、ファイルフォーマットはFAT(8.3名制限)またはFAT32(ロング名対応)。HPFSでは他環境との互換性が低い。使い勝手を考えるとUSBメモリが最適だと思われるが、前記のようにUSB 1.1というシバリがあるため、容量面の制限が非常にキツくなる。いくら容量は重視しないといっても、実質256MBが上限で、しかもUSB 1.1の256MBはなかなか入手できない、という状況は厳しい。「1.1規格のカードリーダ+CF」という組み合わせならば、たぶんGBクラスまで大丈夫だと思う(16GB CFの動作確認済み)。

一方、データ待避とは要するにバックアップのこと。この場合は容量がかなり重要で、少なくとも、数十GBクラスのものが欲しい。そうなると、基本的にUSB HDDしかない。USB HDDは通常2.0対応なので、我が家のシステムでは実用になるかどうか怪しい。過去の実験例では、ドライブを認識させるのさえ一苦労で、使用可能になっても、すぐにシステム・フリーズしたりデータ・クラッシュしたりで、とても実用にならなかった。しかし、USBドライバのバージョンアップをしたので、ひょっとすると現環境ならば上手く動作するかも知れない(現状でもそれなりの感触は得ている)。ファイルフォーマットはHPFSかFAT32。単純にバックアップだけなら、HPFSの方が便利なような気もするが、たとえばバックアップしたデータをDVDに焼くとか、カラープリンタから打ち出すというような状況を考えると、Windowsで扱えるFAT32の方が良いような気もする。

現時点では、USB 1.1のメモリカードリーダーに16GB/FAT32のCFを入れて、データ待避用に使用しているが、速度と容量の両方に不満は残る。安定性に関しても、未だに全面的には信頼しきれてはいない。

●不安定動作の実例

過去、私がUSBストレージがらみで経験したトラブルは以下の通り。
  1. ポートとデバイスのUSBのバージョンが一致しないと動作しない。
  2. USBストレージを使用すると、システムに異常な負荷が掛かる。
  3. ファイルをコピーすると、データ破損が起きる。
  4. USBストレージにアクセスしていると、突然システムがフリーズする。
  5. USBストレージにアクセスしていると、突然システムがブラックアウトする。
  6. USBストレージのレディランプが突然消えてアクセス不能になる。
  7. HPFSフォーマットが使い物にならない。
  8. FAT32.IFSが正常動作しない。
a) USBのバージョンの問題は後で詳述するが、要するに、OS/2においては、USB 2.0のメモリは2.0/1.1両対応としては機能しない、ということ。2.0には2.0専用の環境が必要になる。

b) 異常負荷というのは、端的に言うとコマンドラインのスクロール速度が極端に落ちること。200行のテキストをスクロールさせるスクリプトでベンチマークを取ったところ、正常状態で2.6秒だったものが、USBストレージを挿入した状態では8秒にまで下がり、抜出しても7秒にしかならなかった。以前はこの症状がほぼ毎回起きていたが、現在使用してる環境では、USB 2.0デバイスのみで発症し、USB 1.1デバイスでは発症しないようになった。ゆえに、ある程度解決された問題と言えるが、原因不明なのが気持ち悪い。リソース競合などを疑ってテストをしたが、結局空振りに終った。

c) データ破損の問題は、書き込みではなく読み込み時に起きていたらしい。他の環境で正常に書き込んだデータでも、読み込み時にエラーが発生することがある。特に、大サイズのファイルや大量のファイルのコピーの際に頻発する。この症状が厄介なのは、正常なコピーができることもあること(100KB程度のファイルなら破損発生率は1割程度)。ちなみに、メディア側の問題でないことは確認済み。私はチェック用に数十MBのLZHファイルを用意していて、これにLHA tを掛けて最後まで正常に処理できるかどうかで安定動作を判別している。しかし、この現象はUSBドライバの更新で解決できたようだ(W45_PACK収録のrev.10.137を使用)。

d)〜f) システムのフリーズやブラックアウトが起きると、リセットボタンを押すしかなくなる。 リブート時にはすべてのHDDドライブのCHKDSK /Fが必要なる。40GBもあると大変な時間のロスになる。しかも、一度起きるとその後も頻発する傾向にある。とてつもなく迷惑だ。ただし、レディランプが消えただけの場合は、上手に処理すればCtrl+Alt+Deleteが効くようだ。これら現象もUSBドライバを更新したら、ほとんど起きなくなった。

g) USBストレージでもHPFSは使えるのだが、これまた問題が非常に多い。そもそもフォーマット自体が簡単にはいかない。市販のUSBメモリなどをいきなりHPFSフォーマットしようとしてもダメで、LVMで領域の確保からやり直す必要がある。しかも、データが頻繁に破損したり、挿抜するだけでCHKDSK /Fを要求されたりと、ほとんど実用に耐なかった。しかし、これまたUSBドライバの更新で解決された。現在は、ほぼ問題なく通常のリムーバブルとして使用できる。

h) FAT32.IFSの問題は非常に複雑で、物凄く苦労した。使い方が難しいというより、ドキュメンテーションが判りにくいのが最大の原因だろう。艱難辛苦の末、とりあえず現在は実用レベルで使用できるようになった。詳しくは【別項】で述べる。

●安定動作の条件

私の今までの経験から、安定動作の条件は以下の通り。
  1. 最新のUSBドライバを使用する(rev10.137)。
  2. USBドライバのリソース競合を極力避ける。
  3. USB 1.1専用のデバイスのみを使用し、2.0対応のデバイスは使用しない。
  4. ファイルフォーマットはFATを使用する。
  5. copyコマンドに/Vオプションは付けない。

ドライバ名 リビジョン タイムスタンプ
USBUHCD.SYS 10.137 2004-05-25
USBOHCD.SYS 10.137 2004-05-25
USBEHCD.SYS 10.137 2004-05-25
USBD.SYS 10.123 2003-09-30
USBHID.SYS 10.123 2003-09-30
USBMSD.ADD 10.135 2004-03-24

a) USBドライバはW45_PACK収録のものを使用している。これはかなり安定した動作をするドライバで、少なくともUSB 1.1に関しては、まったく何の問題もなく使用できる(逆に言うと、それでも2.0では問題が残っているということだが)。今まで悩まされ続けてきた不安定性やクラッシュの問題はほぼ解決されている。

b) リソース競合ついては【別項】参照。ホント、PnPになってマニュアル設定ができなくなったので、リソース競合の問題が物凄く面倒になっている。無分別にIRQの共有するもんなぁ…。勝手に入ってくんな!Sound Blasterが動かなくなるだろう、てなカンジ…

c) OS/2においては、USBのバージョンの問題は極めて深刻。一般に売られているUSBメモリなんかには「USB 2.0/1.1対応」などと書かれているが、我が家においてUSB 2.0/1.1対応のUSBメモリがUSB1.1のポートでまともに動いたことは一度もない。USB 2.0のポートにおいてさえ、不安定でデータ破損を頻発していた。現在では、「USB 2.0ポート+USB 2.0/1.1メモリ」という組み合わせで比較的安定動作しているが、それでも前述のようにシステムに不可解な負荷が掛かるようになって不快。要するに;

USB 2.0のフラッシュメモリはまともに使えない!

と考えた方が良い状態。一応、2.0でチェックはした結果は次の通り。

メーカー型番容量サポートUSB1.1ポート USB2.0ポート
IOデータEasyDisk 32MB 1.1○R/W可○R/W可
ADTECIntelligent Stick256MB1.1○R/W可△データ損傷多発
IOデータTB-C2 256MB 2.0/1.1△Rのみ可△Rのみ可
pqiTravelling Disk U190 512MB2.0/1.1×認識せず○R/W可
ELECOMMF-CU204GWH4GB2.0/1.1×認識せず○R/W可

2.0対応メモリに関しては、○が付いていても安定動作かどうかはかなり疑わしい。また、ADTECのIntelligent Stickは2.0ポートでデータ破損を頻発したことがあり、「2.0ポート+1.1デバイス」という組み合わせも、決して安全ではないことがわかる。安全性最重視なら;

USB 1.1ポート+USB 1.1専用デバイス

という組み合わせが良い。なお、IOデータのTB-C2はかなり特殊な仕様のようで、OS/2では領域確保ができなかった。これはUSB 2.0/1.1とは別の問題がありそうだ。

d) ファイルフォーマットはFATを推奨。実は後述のように、USBメモリやメモリカードリーダーでも、HPFSやFAT32を安定動作させる方法はある。また、リムーバブルストレージのロング名対応というのはかなり重要な問題だ。しかし、だからと言って、いきなりこれらのファイルフォーマットに手を出すと迷路に入り込むことになる。決してスンナリとは使えない。まずはFATで安定動作環境を作ることが最優先。

e) COPYコマンドの/Vオプションの問題はやや特殊かも知れない。お手製のファイルコピー・スクリプトの中でCOPY /Vを使用しているのだが、このスクリプトを使うとコピー先のファイルが破損することを発見した。無論、HDDやネットワークドライブへのコピーのときにはそんな現象は起きない。てか、絶対に起きてはならない(何のための/Vオプションだ!?)。この現象がどのような条件で起きるのかは確定できていないが、FAT32のメディアにファイルをコピーする場合には再現率100%で確認されている。ただし、CACHEF32を使うとこの現象は起きない(…といっても、そもそも遅延書き込みをするのに/Vは無意味だと思うが)。

●USBフラッシュメモリの容量

結局、OS/2では(少なくとも我が家のOS/2では)USB1.1専用のUSBメモリしか実用にならないわけで、容量的に厳しい。現在、新品でUSB1.1専用メモリを入手するのはほぼ不可能。中古品だと、IOデータのEasyDisk Mate/Cuteシリーズが代表的だが、これもUSB1.1専用は256MBが上限。現在ではかなり厳しい容量だと言える。

特に問題になるのは、256MBではWarp 4.52のインストールファイルが入りきらないという点。もっとも、Warp 4.52はそれ以前のOS/2とは異なり、そもそもHDDインストールができない?ようなので、インストールファイルだけ持っていってもあまり意味はないかもしれないが…。

  なお、USB 2.0の大容量USBフラッシュメモリにDOSを組み込んで、Warp 4.52のインストールファイルを運ぶという逃げ道がある。ただし、Warp 4.52のインストールディスクはDOSからは読めない!なんか、ISO違反のファイル名が含まれている模様。ゆえに、この方法を使っても生のインストールファイルを運ぶの困難。強いて言えば、OS/2でインストールファイルをZIPして(生でもいけるかな?)FATディスクに置いておいて、それをUSB2.0のDOSシステムから読むか…

いずれにしろ、256MBでは容量が小さすぎる。まあ、ペン型USBとかカメラ付きUSBのようなギミック系のデバイスの中には、USB1.1専用で1GB以上なんてのもあるようだが、それを買うのもちょっと…。むしろ、

USB1.1のメモリカードリーダー+メモリカード

と言う組み合わせの方が現実的だろう。私は、IOデータのCardDockに512MBのノーブラCFを差して使っている。FATだと2GBが上限だが、HPFSやFAT32ならば、より大きなサイズのメモリカードも扱える。一応、CardDockでADataの16GB CFが使用できることは確認済み。 ただし、取り回しは不便。せめて、ベイ内蔵型のリーダーを使いたいのだが、1.1縛りはなかなかに厄介。

●USBストレージのロング名対応

この問題は非常に厄介だった。USBストレージでHPFSやFAT32が使えることは判っていたが、今までは全く安定動作しなかった。データクラッシュとシステムハングアップの連続だった。仕方ないので、ロング名ファイルをZIPしてFATのメモリカードに書き込んだり、sambaクライアントを経由してWindowsをUSBサーバとして使用したりしていた。しかし、USBドライバをアップデートしたところ、OS/2でもロング名フォーマットが安定的に使用できるようになった。FAT32に関してはかなり面倒な問題があるので【別項】に譲るとして、ここではHPFSのUSBメモリの作り方について述べる。USBメモリをHPFSでフォーマットすればいいだろう……という簡単なハナシではない。用意するものは、USBメモリとWindowsマシン、それにもちろんOS/2マシン。また、USBメモリを完全初期化する必要があるため、必要なデータはバックアップを取っておくこと。
  1. USBメモリをWindowsマシンに装着する。
  2. コマンドラインのDISKPARTを起動する。
  3. USBメモリを選択して、CLEAN命令で構成情報を初期化する。【危険】
  4. USBメモリをOS/2マシンに装着する。
  5. LVMを起動して、物理ビューでUSBメモリに基本区画を作成する。
  6. 論理ビューに切り替えて、新規ボリュームを作成し、USBメモリの基本区画を割り当てる。
  7. LVMを終了して、USBメモリにHPFSフォーマットを掛ける(場合によっては要リブート)。
ポイントはWindowsマシンを用いて区画を解放する点。LVMで直接解放しようとしても、アクセスを拒否される可能性が高い。特に、FAT32フォーマットで販売されているUSBメモリはWindowsでないと解放できないだろう。また、一般に区画の解放にはDISKPARTのDELETE PARTITION命令を使うが、USBメモリはDELETEでは解放不能な場合も多い。そこで、DISKPARTのCLEAN命令を使用している。この点に関しては【別項】も参照。

●リムーバブルメディアのマウントとイジェクト

リムーバブル・メディアは使用方法を誤ると、システムをクラッシュさせたり、データを破壊したりするので、十分に注意のこと。

マウント
リムーバブル・メディアを使用するときは、[取り外し可能メディア]アイコンをダブルクリックしてマウントを行わないとドライブ・アイコンが現れない。コマンドラインからLVMを起動してもよい。というか、[取り外し可能メディア]の正体は、LVM /RediscoverPRMである。また、これらの操作をしなくても、コマンドラインからDIRするだけでもマウントが可能な場合がある。

イジェクト
メディアを取り外すときは必ずイジェクト(ディスクの取り出し)を実行すること。コマンドラインからEJCECTコマンドを実行してもよい。これをしないでメディアを交換すると、メディア上のファイルに不整合が起きて、ファイルが壊れる(チェックディスクで修復可能)。イジェクト操作をすると、ドライブのレディランプが消え、再マウント不可能になる。再マウントするときは、いったんメディアを取り出して再挿入する。

ホットスワップ
OS/2でもホットスワップは可能。逆に、上手く認識されないときは、USBコネクタをはめ直すと良い。なお、Warp 3.5ではホットスワップはうまく機能しないようだ(正確にチェックはしていないが、[取り外し可能メディア]のアイコンがない;コマンドラインならどうだろう?)。
マルチ・メモリカード・ドライブであるIOデータ USB-6MRWで、2番目のスロット(CF用)を使用するときは、側面にある切り替えスイッチを2に設定して、USBコネクタをはめ直すこと。

●ドライバについてのおさらい

USBのベースドライバを組み込んだ後に、
    BASEDEV=USBMSD.ADD /V /FLOPPIES:0 /REMOVABLES:1
のように組み込む。原則、上記以外のオプションはつけないこと。特に、フロッピーとして扱うオプションを付けてアクセスしたら、データが全部すっ飛んだことがある(T_T)

リムーバブルメディアは、/REMOVABLES:で指定された数だけ自動的にディスクとして登録される。使用していないリムーバブルは、LVMで<誤った容量>の<壊れたディスク>として認識される。逆に言うと、LVMに表示されても、それだけでリムーバブルとして正常認識されている保証にはならない。また、容量が正しくても、領域として割り当てが不可能ならば、やはり正常認識されていない。割り当て可能な状態になって、はじめて正常認識と呼べる。

【逆襲のOS/2目次】 【ホーム】