doc drawn up: 2001-11-24 .. 2007-10-22

Windows チューンナップ

Windows をチューンナップさせるためのカスタマイズ方法を書き留めています。あくまでも自分自身が行ったカスタマイズに関するメモ程度の内容です。もっとしっかりした内容の情報が必要でしたら、専門的なサイト(例えば、Windows.FAQ)をご自分で検索して見つけることをお勧めします。

Win2000 (SP4) チューンナップ

101-US⇔106-JP キーボードの入れ替え

Windows.FAQ によると [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]"LayerDriver JPN"kbd101.dll にするか kbd106.dll にするかで設定できるそうなので、レジストリパッチ【無保証】を用意。

肥大化した IE ブックマークの整理方法

IE のブックーマークが知らず知らずのうちに溜まってしまい、肥大化したブックマークの整理縮少が積年の懸案事項だった。

当初は、IE のお気に入りメニュー(「お気に入りの整理」を含む)の中から、ブックマークを選んでリンクがまだ有効であることを検証したり、削除したり、並べ替えたり、フォルダに移動したり、というようなことを行っていた。これがなかなか面倒なのである。移動するブックマークをドラッグしながら、枝分かれするフォルダの中に移動していって、そこでドロップするという行為が、非常にやりづらい作業で、なかなか効率が上がらない。その上、僕の環境特有の問題かも知れないが、ブックマークのフォルダ移動を行ったりすると、IE が頻繁にエラーを発生して再起動してしまう。

そこで、IE のお気に入りメニューの中で整理作業を行うのではなく、ブックマークファイルの存在するフォルダ(C:\Documents and Settings\[USER NAME]\Favorites)を開いて直接作業することにした。すると、ストレスなく非常に快適に作業が進められることに気が付いた。

ブックマークの内容を確認するには、単にブックマークファイルをダブルクリックしてブックマークされた Web ページを閲覧すればいいだけ。削除するのもそのまま選択してブックマークファイルを削除すればいいだけだし、ブックマークの名称の変更、フォルダの作成、移動も、通常のファイルに対する作業と同じに行えるので、非常に楽。これまで滞っていた作業が、嘘のようにスムーズに進められ、肥大化したブックマークの整理縮少が一気に進んだ。

お気に入りメニューのような枝分かれする一次元(線形)的な構造として表現されたものよりも、フォルダのような階層による二次元(平面)的な集合として表現されたものの方が、ユーザインタフェースとして人間の感覚に適しているのだろう。

ちなみに、ブックマークのフォルダ移動を行うと、エクスプローラがエラーを発生して再起動しやすいという症状は同じなので、クィック起動メニューにブックマークファイルの存在するフォルダへのショートカットを作成しておいて、再度フォルダを開くための作業が発生するのを回避している。

レジストリ

へなちょこだった Win9x とくらべてメモリ管理などがかなり向上したので、これといった Tips はあまり多くはないようである。下の 2 つのレジストリ設定は、Win2000/XP では結構おきまりの設定。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"DisablePagingExecutive"=dword:00000001
"IoPageLockLimit"=dword:00010000

僕の環境では、初期状態では、上の 2 つのレジストリ値がともに 0 だったので、自分で上のように変更した。

DisablePagingExective は、Windows の OS 本体(カーネル)の一部を仮想メモリ上にロードする機能を、無効にするかどうかというもので、0 が「無効にしない」、1 が「無効にする」設定である。十分なメモリを搭載しているのなら当然無用な機能なので、無効にしておく。

IoPageLockLimit は I/O (入出力)バッファの大きさ(上限)を指定するものらしい。256MB 以上のメモリを搭載している場合は、64MB くらいにするのが目安だとか巷(ネット)では言われているので、その通りにした(dword:00010000 は16進値表記で、64MB に相当)。

おきまりの設定値を単に書き留めるだけというのも、今さら芸のないことなので、上のレジストリ設定を行うレジストリパッチ【無保証】を用意しておく。

Big Disk (137GB超) の使用

Win2000 (SP4) で 137GB 超(48-bit LBA 方式)の大容量 HDD を利用するには、以下のレジストリ操作が必要とのこと。

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\atapi\Parameters]
"EnableBigLba"=dword:00000001

上のレジストリ設定を行うレジストリパッチ【無保証】。

最近使ったファイルを 15 個(デフォルト値)から 30 個に変更

17 インチのモニタを使うと画面が広いので、30 個ぐらいは表示したいと思った。数は dword 値(十六進数)で指定する。1e の場合は 30 個のこと。

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"MaxRecentDocs"=dword:0000001e

上のレジストリ設定を行うレジストリパッチ【無保証】。

Win98 (SE) チューンナップ

system.ini の記述

ディスクキャッシュ

[vcache]
MinFileCache=0
MaxFileCache=131072

物理メモリの 1/4 程度の数値(KB 単位)を最大値(MaxFileCache)として設定する。例えば、192MB なら 48MB=49152KB となる。

これ(最大値の設定)をやらないと、いくら物理メモリが 128MB や 256MB と大量に積んでいても、ディスクキャッシュ(CD-ROM 等のディスクドライブのアクセスを高速化(滑らかに)するためのバッファとなるメモリ)がどんどんメモリの中に増えて溜まっていってメモリを食い、常に物理メモリが満杯になって、スワップメモリ(ハードディスク上にファイルとして作成される仮想メモリ)が発生し、パフォーマンスが低下、システムが不安定になる。

この問題は、Win9x 特有の下手なメモリ管理システムに起因する問題らしく、WinNT やその系列の Win2000, WinXP では解消されているようである。

スワップメモリの制限

[386Enh]
ConservativeSwapfileUsage=1

これによって、物理メモリが不足した時にだけ、スワップメモリ(ハードディスク上にファイルとして作成される仮想メモリ)を新規に作成するようになる。

デフォルトでは、Windows の起動時からスワップメモリを物理メモリと並行して使い、メモリの使用状況によってスワップメモリのサイズが増減するような動作をする設定になっている。

スワップファイルのサイズの増減によって、デフラグでは対処できない断片化したスワップファイルが出現してしまい、これによるパフォーマンス低下を嫌う人は、スワップファイルの最小サイズと最大サイズを同じにして、固定サイズのスワップファイルを使うように設定する場合がある。ただし、スワップファイルを自動サイズではなく固定サイズにすると、大量のメモリを消費してメモリが不足した場合に不安定になってフリーズしたりしやすくなるという欠点がある。

このスワップメモリを制限する設定にしておけば、スワップファイルが常に存在するわけではないという状態になるわけだから、スワップファイルの断片化は気にしなくていいはずである。つまり、スワップファイルのサイズを固定化するようなことは必要なく、自動サイズで構わないものと思われる。

タスク切り替えスピード

[386Enh]
MinTimeslice=3

デフォルトでは、20ms 毎にタスクを切り替えてマルチタスクを実現しているが、これは、Win3.1 時代のハードウェアを基準とした数値をそのまま受け継いでいるという話だ。今の高速な CPU ではもっと細かくタスク切り替えを行わないと、タスク処理待ちになるタイムラグが速度を低下させる。もちろん、タスク切り替えスピードが速すぎると、今度は、切り替えのために CPU のパワーを浪費する(すなわちオーバーヘッドが発生する)ことになるので、速ければ速いほどいいというわけではない。ちょうどいい数値にすることがポイントである。とはいえ、Win3.1 時代用の 20ms というのはあまりにも遅過ぎるので、ゆるめに設定しても、PentiumII や Celeron なら 5ms でも十分 OK だろう。PIII 以上なら、3ms 程度でも構わないと思う。参考として下に挙げた設定例は、雑誌に掲載されていた情報のようだ。

僕はこの設定を変更(PIII 700MHz で 20ms → 3ms)することによって、Windows 全体の反応速度が劇的に向上した。恐らく、同時に色んな処理を行っているような場合は、タスク処理の循環が円滑になるから、その差は大きいに違いない。ギガ超の CPU なら 1ms でも OK だと思う。

レジストリ

ネットの同時接続数のリミッタを解除

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000008
"MaxConnectionsPer1_0Server"=dword:00000010

レジストリパッチ【無保証】
ファイルのダウンロードで同時に送受信できる数がデフォルトでは 2 個(HTTP 1.0 のサーバの場合は 4 個)に制限されている。そのため、ブロードバンド化してもせっかくの高速通信のメリットが活かし切ることができない。そこでレジストリによってそのリミッタを外す。 8 くらいにしておくと快適である(HTTP 1.0 サーバ用はその倍の 16 くらい)。とはいえ、やたらめったらたくさんにしても、画像が 1 ページに大量に貼ってあるようなページの場合に読み込みエラーになってしまうし、またプロバイダによっては同時リクエストを制限しているルーターを経由する場合もあるようなので、実用の範囲内で制限値を上げておく程度にする。

Win98 (SE) でのハードディスクドライブのバックアップ

Windows から普通に C:\windows ディレクトリを含む C ドライブの中身を丸ごとバックアップしようとすると、WIN386.SWP(スワップメモリのファイルであり、このファイルに関してはバックアップする必要はない)のような OS が使用中のファイルのコピーに失敗して途中でコピー作業が終ってしまう。この場合、xcopy コマンドを使ってコピーすれば、対処できる。普通に xcopy しても、同じように使用中のファイルでコピー作業が終ってしまうが、/c オプションを付けることによって、作業の終了を回避することができる。

ドライブの丸ごとバックアップにおいて必要となる xcopy のコマンドオプションは、空のディレクトリも含めてサブディレクトリもすべてコピーするために /e は必須。隠し属性およびシステム属性のファイルもすべてコピーするために /h は必須。ファイル属性も元のままそっくりコピーするために /k は必須。ディレクトリの場所を示すパス指定に基づくコピーであって、複数ファイルを示すワイルドカード指定に基づくコピーではないので、/i オプションも必要となる。

また、コピー先のドライブに同じディレクトリが存在しなければ問題はないが、たまたま同じディレクトリがあった場合は、同じ場所にあるファイルに関しては上書きコピーの必要性が生じてくるから、その場合は /r オプションが必要となってくる。また、上書き確認プロンプトが表示されるとその都度コピー作業が中断されて大変なことになるので、/y オプションもついでに指定しておくのが賢明(つまり反対のオプションである /-y は逆に指定するべきではない)。同じ理由で /p オプションは指定していたら作業がはかどらずに時間がかかるだけなので、不要と言うよりは不可。

/a や /m については、アーカイブ属性ファイルのバックアップに関するものなので不可。/d も特定の新しく更新されたファイルの同期をとるためのバックアップに関するものなので不可。/u もコピー先に既に存在するファイルのみの更新に関するものなので不可。/n は古いDOSとの互換性のために長いファイル名をわざわざ短いファイル名でコピー先にバックアップするためのオプションなので不可。/e を指定すれば、/s /e の両方を指定しても同じことなので、/s は特に指定する必要はない(もちろん明示的に指定しても構わない)。/w は指定してもしなくても好みの問題。/q と /f と /l は単に進行状況の表示をする・しないの問題なので、これも好みの問題だが、進行状況がだいたい把握できるように /f を指定する人が普通だろう。ただし、WIN386.SWP のように使用中のためにコピーできずにスキップされたファイルの存在を把握したい場合には、/f ではなくて /q オプションを指定する。そうすれば、通常のメッセージでエラーメッセージが流されてしまったりするようなことがなくて済む(だが、通常はそういったスキップされるファイルは、WIN386.SWP のみだろう)。

/t はディレクトリ・ツリーだけを先に一旦コピーして構築しておいてから、次にファイルだけをコピーするような二段階方式のやり方を使いたいときに、一段階目のコマンドで使ってもいいオプション。/e /h /k /i と併用することが必須。また /q も役立つ。

以上を踏まえると、具体的なコマンド例は(コピー元が C ドライブ、コピー先が D ドライブとする。またここでドライブ指定に¥を付けてルートディレクトリであることを明示する。そうしないとカレントディレクトリがルートディレクトリでない場合に、予想外の結果を招くことになる):
xcopy C:¥ D:¥ /c /e/h/k/i /r/y /q
また、上のコマンドに先立ってディレクトリ・ツリーのみのコピーを行う場合は:
xcopy C:¥ D:¥ /t /e/h/k/i /q
を使えばいいということになる。

参考:
Windowsの起動ドライブをコピーするには」(まりもさん)
xcopy のコマンドオプション」(畑)

C ドライブの移転

上述「Win98(SE) でのハードディスクドライブのバックアップ」によって、古い C ドライブを新しい C ドライブに移行しようとするとき、上述のやり方でファイルの構成はそっくりコピーできるのだが、このままでは新しい C ドライブとして Windows を起動できるものとはならない。

新しい C ドライブは、「基本パーティション」として領域確保されており、その上「アクティブ・フラグ」がその基本パーティションに立っていること、さらにパーティションのブートセクタに「ブートコード」が書き込まれていることとハードディスクの MBR に「マスター・ブートローダ」が書き込まれていること、これらが要件となる。

新しく増設したばかりの空のハードディスクであれば、領域確保とフォーマットを行う際に、以上の要件をふまえて行えばいい。問題は、元々 D ドライブなどとして使用していてデータファイルなどがすでに詰った物理的な別のドライブに、上述のやり方で C ドライブの中身をすべてコピーして統合し、(古い C ドライブの使用を廃止して D ドライブを)新たに起動用 C ドライブとして使おうと思っているような場合である。この場合、D ドライブの領域確保・フォーマットをして D ドライブに元から入っていたファイルを消してしまうわけにはいかないので、簡単ではない。

市販されているパーティション操作ツールを使えば、それほど難しくはないのかもしれないが、Windows 標準のツールや、フリーウェアなどでやろうとすると、ちょっとややこしい。まず、D ドライブが拡張パーティションの中の論理ドライブの場合は、諦めて他の方法を探した方がいいかもしれない(少なくとも筆者には、どうやればいいのかわからない)。もし、D ドライブが基本パーティションなのであれば、「アクティブ・フラグ」の問題と、「ブートコード」および「マスター・ブートローダ」の問題さえクリアすれば何とかなる。Windows 標準の fdisk を使って、どの基本パーティションに「アクティブ・フラグ」を立てるかという操作をする。ここで fdisk では「アクティブ・フラグ」の操作は、第 1 番目のハードディスクにしか行えない仕様になっている点に注意。つまり物理的に 2 台以上のハードディスクを接続している場合、1 台目を取り外して、2 台目を第 1 番目のハードディスクとして認識されるように、接続をつなぎ変えてから fdisk を使用する必要が生じる(通常は、プライマリ&マスタとして接続すればそのハードディスクが第 1 番目として認識されるはずである)。次に、ブートセクタへの「ブートコード」の書き込みだが、これは単に sys コマンドを用いればいい。最後に「マスター・ブートローダ」のMBRへの書き込みは、fdisk /mbr コマンドによって行う。

以上のようにすれば、M/B の BIOS ROM に書かれた BIOS が、起動後まず始めにハードディスクの MBR を読み込みに行く。MBR に書き込まれている「マスター・ブートローダ」によって、4 つの基本パーティションのうちのどのパーティションを起動パーティションと見なせばいいのかを、「アクティブ・フラグ」を目印に見つける。そして「アクティブ・フラグ」の立ったパーティションのブートセクタに書かれている「ブートコード」を読み込み、起動することによって、そのブートコードが Windows OS の起動プロセスを開始するという仕組みになっているのである。

これらの下準備を適切に施した上で、実際に古い C ドライブを取り外し、元々の D ドライブ(ジャンパ・ピン設定も適切に変更し)とコネクタを繋ぎ変え、BIOS 設定も適切に変更して新たな C ドライブとして認識させた上で、マシンを起動することになる。

参考:「ブートとハードディスクのすべて」(のぶさん)

256 フォーマット済み FD の再フォーマット

先日(2000 年 10 月頃の話)、仕事で、FD でファイルを配らなければならない事態が発生した。自分が判断すれば、はじめから FD などは使わないやり方を選択するのだが、仕事でやれと言われたので、仕方がない。二、三枚なら何とかなるが、まとまった枚数の FD など持っているはずもないので、いくらなんでも FD ごときを買いに行くために秋葉原にまで足を運ぶわけにもいかない。近所の文房具屋で見つけて、買ってきた。

ところが、買うときには大丈夫だと思って買ったのだが、それは JIS 256 フォーマットとかいう、聞いたこともない形式でプレフォーマットされている。普通、プレフォーマットと言えば、MS-DOS 形式か、Macintosh 形式だと思っていたのだが、256 なるマイナーな形式でわざわざプレフォーマットをするもんだろうか? ならば、未フォーマットの方がマシだと思うのだが。ともかく、Windows でフォーマットすれば、256 だろうが Mac だろうが、同じことさと思って、それを買った。それしか置いてなかったから。

しかし、実際に Windows でフォーマットしようとしても、ディスクが壊れていると認識されて、フォーマットのプログラムがフォーマットを行ってくれない。なんだこれは? FD の説明書きによると、「一部のシステムでは、再フォーマットできません」と書いてあるが、まさか Windows で再フォーマットできないとは。そんな話、聞いたことないぞ。どんなフォーマットをされていたとしても、強制的に物理フォーマットで上書きすれば、消されるのが理屈である。

どうやらこれは、Windows(私が使っているのは Win98SE)のフォーマットプログラムの仕様に欠陥があるからである。単純に物理フォーマットを行えば、先にどんなフォーマットがされていても、上書きされる。それなのに、Windows のフォーマットプログラムは、先にフォーマットされている場合、それを認識し、フォーマットが異常だと、ディスクが物理的に壊れていると勝手に決めつけ、そこでプログラムが作業を中断してエラー終了してしまうのである。あまりにもお馬鹿すぎる仕様である。

仕方がないので、独立した別のフォーマット用のソフトをネット上で見つけ、使ってみた。Alkonost MaxFormat という海外のシェアウェアである。期限付きで試用ができる。このソフトは、もともと、1.44MB の 2HD の FD を 1.7MB のサイズでフォーマットするためのツールであるが、1.7MB 以外にも 1.44MB や何種類かのフォーマットができるようになっている。このソフトを使ったら、いとも簡単に 256 フォーマットの FD を MS-DOS の 1.44MB フォーマットで再フォーマットすることができた。


mihr.net::comp::WIN