●逆襲のOS/2● | (2010.06.08/2013.12.03) |
もちろん、原因はHandles0/1の肥大化。Handles0/1の中身は「BLOCK」という単位で管理されていて、通常はせいぜいBLOCK2か3くらいまでにしかならないそうだ。ところが、私のマシンではBLOCK9にまで達していた。ひょっとすると、BLOCK9が上限で、それ以上の情報を書き込もうとする度にクラッシュしていたのかも知れない。もちろん、PM上でのファイル操作は地獄の遅さだった。
なんでこんなことになったのかと言うと、そもそも大量のファイルをいじっていた上に、整理したデータをコマンドライン命令で移動/削除していたため(だと思う)。つまり、すでにHDD上になくなっていたファイルの幽霊情報がどんどん蓄積されていったのだろう。PM上で最終処理されたファイルならば、その情報はHandels0/1から削除されるので、幽霊情報が蓄積されるようなことはないらしい。こうなると、私の使い方の問題も大きいようだが、この程度の状況は想定して、対処機能を付けるのが普通だと思うがなぁ…
CHECKINI /C /Y:2 /Hなお、/Cは修正(corrections)、/Y:2は確認に対する自動応答(yes)、/HはHandlesのみの修正を意味する。これによって、OS2SYS.INIが220KB⇒190KBになった。意外に効果が小さいように感じられるが、このシステムは再インストールしてから日が浅く、幽霊情報があまり蓄積されていなかったためだろう。実在するファイルに関する情報は消せない(実は消す方法あるが:後述)ので、まあ、こんなもんでしょう。
ただし、この方法では
CHECKINI /C /Hとすればよいわけだ。Y/N応答が多少わずらわしいが、ディレクトリ単位の処理のようなので、たとえ幽霊ハンドルが数百あっても、同一ディレクトリ内のものであれば、それほどの手間にはならない。
ただし、これにはビミョーな問題がつきまとう。それは、リムーバブルドライブやLANドライブは、ファイルのアーカイブ(保存庫)として利用することが多く、そこには物凄く大量のデータが入っている可能性がある。リムーバブルドライブなど、メディアを交換すれば実質的に容量は無限である。これらに保存されたデータは実在するものであり、そのハンドル情報も決して幽霊情報ではない。しかし、だからと言って無限に貯まられてはたまったものではない。データ数が1万くらいになると、Handles0/1の容量はほぼ上限(BLOCK9)に達するだろう。こうなると、実在していようといまいと、ハンドル情報を削除するしかない。……もちろん、アーカイブはPMでは絶対にいじらない、ということであればこうした問題も起きないが、なかなかそうもいかなくて。
CHECKINI /C /Hとすればよい。これでリムーバブルドライブおよびLANドライブ上のファイルのハンドルは、実在/幽霊を問わずすべて削除できる。それはそうなのだが、ここでもう一つ問題が出る。この方法ではリムーバブル/LANドライブ上のフォルダのシャドウなども消えてしまう。抜き出し/切断によって、それらのフォルダはなくなったと見做されるわけだから。そういう場合は、同じディレクトリ構造を持った、ダミーのメディア/サーバを用意して、抜き出し/切断ではなく、ダミーに接続した状態で上記の命令を実行すればよい。
もし、それが面倒だと言うのなら、まったく推奨できない、極めて危険な方法だが、INIエディタでHandles0/1を直接削除してしまうという方法もある。その際、絶対に守らなくてはならないのは、Handels0/1のBLOCK1は必ず残しておくということ。これまで削除すると、ブート不能状態に陥る。また、Hadles0およびHandles1の両方のBLOCKを削除すること。つまり、Handles0のBLOCK2〜BLOCK9とHandles1のBLOCK2〜BLOCK9を削除する。これによって、OS2SYS.INIのサイズは劇的に減少する。
でも、そんなことして大丈夫なのか?−−答えは判らない。でも、大丈夫だったことはあった。システムがぶっこわれて再インストールしたこともあった。まあ、賭けですな(^^; で、その経験から言えることを少々。まず、このHandles情報はノードで鎖状につながっているようで、一部だけ選択的に消すことはできないようだ。テーブル構造で部分削除が簡単なら、こんな苦労をしなくて済むのだが。また、ハンドル情報は時系列に従って単純に後ろに追加されるのではなく、ある程度の分類がなされた上で、種類ごとに別のチェインにまとめられているような気がする。
ここから何が言えるのかと言うと、INIエディタで選択的にハンドル情報を消そうなんて考えるのは止めた方が良さそうだ、ということ。また、重要な情報ほど頭の方に入っている可能性が高く、お尻のBLOCKから1つずつ(ただしHadles0/1の両方)順番に消していけば、リスクを小さくできるかも知れない、ということ。もちろん、1回ごとにシステムのリブートが必要。
なお、INIエディタによってBLOCKを削除したあとは、Ctrl+Alt+Deleteはではなく、必ず正規の手順でOS/2を終了させること。これによって、その時点のデスクトップの情報がiniに書き込まれているようで、仮にBLOCK削除によって重要情報が削除されても、デスクトップへの被害は少なくて済むようだ。ま、いずれにしろ、私の狭い経験からの推測で、何の保証もできないことは言うまでもないが。
PMREXXベースのCheckini用PMインターフェースCheckiniPMというのもあるようだが、インストール手順も使い勝手も良くない。もちろん、選択的な削除の役には立ちそうにない。 また、os2.iniに書かれているフォルダ情報はfposというツールで消せるようだ。ただし、こちらはフォルダの表示設定情報などを記憶しているので、消してしまうといろいろと不便が発生する。 |
ただし、この方法はファイルに対しては有効だが、ディレクトリに対しては有効ではない。ディレクトリ名の変更で同様な効果があれば実に便利なのだが、そもそもディレクトリに対してはRENは無効。ディレクトリ名の変更にはMOVEを使うのだが、同じコマンドライン命令でもMOVEでは効果はないようだ。
【追記の追記:2013.12.03】その後、ディレクトリのリネームで擬似幽霊化させる方法が判明した。と言うか、擬似幽霊化がOS2SYS.INIに反映にされるのには、かなりのタイムラグがあるらしいことが判った。コマンドラインないしはコマンドラインベースのファイラーでディレクトリをリネーム後、一度システムをリブートすると良い。ただし、別項でも述べているが、この方法も長続きはしない。知らないうちに全情報が勝手に復元されてしまう。
checkini /DD:\デスクト /cとする。「/c」オプションが必須かどうかはわからないが、私は付けて復活させた。なお、一時的デスクトップ状態でかな漢字変換が使用可能かどうかは不明。私は、システムドライブ(D:)のDIRを取ってディレクトリ名を表示させ、コピー&ペーストで「デスクト」を入力した。−−日本語のディレクトリ名というのは実に迷惑だな。
FPOS | フォルダ/ファイルの位置情報を削除 |
ICONOMIZE | カスタム・アイコンを削除 |
特に、カスタム・アイコンは意外なほど容量を食う。無駄にデカいアイコンは削除するとよい。PM123のアイコンを削除するだけで1MB→700kBくらいになった。