†逆襲のOS/2†
作成開始日 2013.12.03
最終更新日 2014.05.11
【参考】インストール直後のINIファイルの大きさは、OS2.INIが400〜500KB台、OS2SYS.INIの方は80KB前後。しかし、クラッシュの頻発に悩まされた私のシステムでは、OS2SYS.INIが2MB以上に膨れあがっていた。Handles0/1の中身は「BLOCK」という単位で管理されていて、通常はせいぜいBLOCK2か3くらいまでにしかならないそうだ。ところが、私のマシンではBLOCK9にまで達していた。ひょっとすると、BLOCK9が上限で、それ以上の情報を書き込もうとする度にクラッシュしていたのかも知れない。もちろん、PM上でのファイル操作は地獄の遅さだった。
CHECKINI /C /Y:2 /Hなお、/Cは修正(corrections)、/Y:2は確認に対する自動応答(yes)、/HはHandlesのみの修正を意味する。ただし、この方法では
CHECKINI /C /Hとすればよいわけだ。Y/N応答が多少わずらわしいが、ディレクトリ単位の処理のようなので、たとえ幽霊ハンドルが数百あっても、同一ディレクトリ内のものであれば、それほどの手間にはならない。
PMREXXベースのCheckini用PMインターフェースとしてCheckiniPMがあるが、インストール手順も使い勝手も良くない。
ただし、いずれしろ、CHECKINIでは正常なハンドル情報は削除できない。特にリムーバブルドライブやネットワークドライブ上のファイルの数は、実質的に無限と見做してもよい。PM上でファイル操作をする限り、OS2SYS.INIは早晩パンクする。フォルダを表示したり、PMアプリケーションでファイルを開くだけでも肥大化する。現実的にはパンクは不可避であり、そうなったらシステムを再インストールしてOS2SYS.INIを初期化するしかなかった。
私が主として使用しているPMアプリケーションはPMViewだが、PMViewによるOS2SYS.INIの肥大化は、ユーザーの間でも以前から問題になっていたらしい(http://www.pmview.com/forum/lofiversion/index.php/t258.html)。 で、それを回避する為に、コマンドラインのAPIを使ってcopy/move/deleteを実行するように変更したらしい(オプションでPMのAPIを使うことも可能)。ところが、それでも、やっぱりOS2SYS.INIは急速に肥大化する。バグっているのか、それともリネーム等はやっぱりPM経由なので肥大化するのか…?
この問題が厄介なのは、ファイルのハンドル情報が正規のデータであり、本来であれば必要な情報だと言う点にある。これがファイルをオブジェクト化できるPMのキモらしい。正規の必要な情報であれば、削除できないのが当然だろう。だが、ハンドル情報が本当に必須のものかどうかは判断が難しい。そもそも、ローカルに存在するファイルのすべてがOS2SYS.INIに登録されるわけではない。少なくとも、PMでいじらないファイルに関しては、登録はされないのではないかと思う。さらに、OSを再インストールした直後の状態では、データファイルのハンドル情報は全て消えてしまっているのだが、さりとて特段困ったことが起きるわけではない。確かに、フォルダの表示位置や大きさなどの設定は消えてしまっているし、もし、ファイル単位で特別な設定がしてあれば(シャドウの作成やクラスの変更など)、それも消えてしまうだろう。しかし、単純なファイルとしての機能に一切の支障はない。
と言うか、ファイルのオブジェクト化自体、本当に意味があることかどうか疑わしい。パスとファイル名と拡張子による管理の方がずっと便利だというのが私の実感だ。現実を無視した理念先行のアダ花だったと思う。
ならば、正規の情報であろうとなかろうと、ファイルハンドルなんて消してしまえば良いのではないか? このような必要のないファイルハンドル情報を削除するのがCLEANINIというツールだ(Carsten's OS/2 Homepagesより入手)。
CLEANINI /c /Restartとすれば、使用されていないハンドル情報をすべて削除して、システムを再起動してくれる。もちろん、必要な情報は残しているので、まっさらに戻るわけではないが、ウチのOS2SYS.INIは90KB台になった。OSインストール直後は80KB台なので、ほぼ初期状態と言ってもよいだろう。ちなみに、このウチではOS2SYS.INIが130KB台に達するとシステムがやや不安定になるので、数日に一度の割合でこのCLEANINIとCHECKINIを掛けている。
【参考】CLEANINIの存在を知る以前、トリッキーな対処方法として、正常ファイルの擬似幽霊化を試したことがある。たとえば、ローカルファイルのファイル名をコマンドライン上で変更したり、リムーバブルメディアを抜いたり、LANドライブを切断したりしてCHECKINIを掛ける。こうすると、それらのファイルは既に存在しないと見做され、理論上はCHECKINIで削除可能になる。が、実際にはそんなに上手くはいかなかった。どうも、コツというかタイミングのようなものがあるらしい。また、切断したドライブ上のシャドウなども消えてしまうため、それはそれでけっこう不便だった。
もう一つ、極めて直截な方法としては、INIエディタでHandles0/1情報を削除してしまうという荒業がある。無論、これには非常に大きなリスクが伴う。後ろのブロックから慎重に削除していくと上手くいくこともあるが、かなり高い確率でシステムが再起不能になる。Handles情報はある程度分類した上でノード状に連結されているようで、僅かでも手を加えると、全滅のリスクがあるようだ。少なくとも、不要データのみを選択的に削除するのは困難。無論、どの途再インストールが必要なら、やっちまっても同じだろう、という覚悟があれば止めないが。
蛇足ながら、インストール直後のOS2SYS.INIを保存しておいて、肥大化したOS2SYS.INIと差し替えるという方法は上手くいかない。たいていはシステムがブートしなくなる。また、OS2SYS.INIにはOS2SYS.!!!というバックアップファイルがあり、効率化のために処理を振り分けているようだ。そのため、INIの内容の変更が即座に反映されなかったり、変更したはずなのに、いつのまにか元に戻っていたりすることがある。
ただし、実装方法がPMMERGE.DLLにパッチを当てて、元来DOSCALLS(DOSCALL1?)を呼び出すべきところを、NEWCALLSの呼び出しに置き換えるという、ちょっとイヤな方法を取っている。この方法では、DLLのバージョンが違っていた場合でも有効なのかどうか…。また、その効果に関しても多少疑問で、確かに安定化したような気もするが、OS2SYS.INIが130KB台になると一度不安定化するのは変わっていない。とりあえず、現在は使用していない。
FPOS | フォルダ/ファイルの位置情報を削除 |
ICONOMIZE | カスタム・アイコンを削除 |
特に、カスタム・アイコンは意外なほど容量を食う。無駄にデカいアイコンは削除するとよい。PM123のアイコンを削除するだけで1MB→700kBくらいになった。
checkini /DD:\デスクト /cとする。「/c」オプションが必須かどうかはわからないが、私は付けて復活させた。なお、一時的デスクトップ状態でかな漢字変換が使用可能かどうかは不明。私は、システムドライブ(D:)のDIRを取ってディレクトリ名を表示させ、コピー&ペーストで「デスクト」を入力した。−−日本語のディレクトリ名というのは実に迷惑だな。