発表当時は、全Mini9ユーザへの福音かと思われた、Mini9の換装用SSDであるSHD-DI9M32Gですが、
いざ使ってみると、何も考えずWindows XPで使った場合、いわゆる「プチフリ」に悩まされることがあります。
ちなみに、「プチフリ(プチフリーズ)」ってのは、単純に「遅い」っていうのとは違います。
「遅い」だけなら、純正SSDでも結構遅いわけですからねぇ。
「重い作業中にマウスカーソルが一瞬~数秒動かなくなる」ってのが、ここでいうプチフリの定義です。
で、例によっていつもの「これもう少しどうにかならんのか?」が、今回のネタです。 …
原因は、SSDのコントローラにあるようで、どうも細かいファイルの読み書きが瞬時に多発した場合、
IDEバスにいわゆる「応答待ち」の状態が発生してしまうために、固まってしまっているんじゃないかと。
実際、CrystalDiskMarkを実行してみると、RandomWriteの4KBだけが異常に遅くなっていましたし。
まぁ、この辺は推測の域を出ないところですが・・・。
で、この「プチフリ」を防ぐ為の有効な手段と言われているのが、
まぁ既に有名な話ですが「NTFSではなくFAT32でフォーマットしてインストールする」ですね。
フラッシュ製品全般的な話ですが、やはりNTFSよりもFATの方が得意みたいで、
SHD-DI9M32Gでも、実際にFAT32にするだけで体感速度はかなり改善されます。
ただ、FAT32は4GB以上のファイルが使えないし、NTFSじゃないと嫌な人もいるような気はします。
うちも、できればNTFSが使えるに越したことはないとは思います。
で、地味で小難しい話なので、Mini9界隈ではあまり話題になっていないみたいなんですが、
ネット上のSSD関係のいろんな情報を集めながら調べてみると、
細かいファイルが苦手なら、細かいファイルを「細かくない状態」にしてしまえばいいんじゃね?
って事で、NTFSのクラスタサイズを大きく設定してフォーマットすれば、
ランダムアクセス性能が多少改善されるかもしれないらしい。
ほとんどやってる人も、その効果も不明な状態なんですが、何はともあれチャレンジです。
とりあえず、XPもVistaもWindows 7も、インストール時のフォーマットでは、
NTFSのクラスタサイズは自動で標準の4KBに固定されてしまい、
任意のクラスタサイズの指定なんてできません。どうしたものやら。
まぁ、既にフォーマットされてあるパーティションにもインストールできるはずなので、
別環境でフォーマットしてから、フォーマットなしでインストールする感じでいけばいけるかな、と。
ところが、3.5インチHDDなら他のPCでフォーマットできますが、
専用SSDをどうやってフォーマットしようかと考えてようやくDVDブートで解決(後述)したものの、
実際試してみると、これがまた一筋縄ではいかない感じなんですが、
あらかじめ、64KBクラスタ(仕様上最大サイズ)のNTFSを用意しておいてインストールを進めてみても、
再起動すると「ディスクがありません」みたいに言われてブートできないんですよねぇ。
どうやら、BIOSかNTLDRか分かりませんが、64KBクラスタでは起動できない仕様みたいです。
こんなところで諦めては情けない、というわけで、別に起動専用のパーティションを作って、
そこから、64KBクラスタのNTFSのパーティションをあらためて起動する作戦で行くことにします。
というわけで実戦開始。ここで以下の3つのうち、どれかひとつを準備します。
1. Windows 7 (Beta) のインストールDVD
2. Windows Vista のインストールDVD
3. WAIKをインストールして作成したWindows PEの起動ディスク
(以下では、これらの起動ディスクをひっくるめて『Windows PE』と表記しています)
まぁ、結局以前書いた記事はこれの為の布石だったワケなんですけどね(笑
こいつらでブートしたWindows PE 環境で、インストール前にフォーマットする作戦です。
VistaやWindows 7 のDVDを使う方はこちらの記事も参考にしながら、
頑張って修復オプション経由でコマンドプロンプト(cmd.exe)を起動します。
WAIKでWindows PEを作った方は、特に細工してないなら、最初からコマンドプロンプトが起動しているはずです。
で、プロンプトからDiskPartを起動します。これはWindowsでいう「ディスクの管理」のコマンドライン版です。
X:WindowsSystem32>diskpart Microsoft DiskPart version 6.1.7000 Copyright (C) 1999-2008 Microsoft Corporation. コンピューター: MININT-1234567
すると、DISKPARTのプロンプトに移行しますので、順番に対話形式でやる事を入力していきます。
これからやりたい事は、起動専用のごく小さいFAT領域と64KBクラスタのNTFSの作成です。
適当に、入れるコマンド意訳みたいなものを付けながら進めてみると、
「今接続されているディスクの一覧を表示して」
DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ --------------- ------- ------- --- --- ディスク 0 オンライン 31 GB 0 B
「んじゃ、以降はディスク番号0のドライブに対して作業するね」
DISKPART> select disk 0 ディスク 0 が選択されました。
「んじゃ、とりあえずディスクの中身全部消して。」
DISKPART> clean DiskPart はディスクを正常にクリーンな状態にしました。
「新規にプライマリパーティションを作成するよ。サイズは31MBね。」
DISKPART> create partition primary size=31 DiskPart は指定したパーティションの作成に成功しました。
「追加でプライマリパーティションを作成するよ。サイズ指定しないから残りの空き容量全部ね。」
DISKPART> create partition primary DiskPart は指定したパーティションの作成に成功しました。
「今作成されているパーティションの一覧を表示して」
DISKPART> list partition Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 プライマリ 31 MB 1024 KB Partition 2 プライマリ 31 GB 32 MB
「んじゃ、以降はひとつめのパーティションに対して作業するね」
DISKPART> select partition 1 パーティション 1 が選択されました。
「ここから起動するから、ここをアクティブにしてね」
DISKPART> active DiskPart は現在のパーティションをアクティブとしてマークしました。
「ここをフォーマットしてね。ファイルシステムはFATで。」
DISKPART> format FS=fat 100% 完了しました DiskPart はボリュームのフォーマットを完了しました。
「んじゃ、以降は2つめのパーティションに対して作業するね」
DISKPART> select partition 2 パーティション 2 が選択されました。
「ここをフォーマットしてね。ファイルシステムはNTFSで。
あ、アロケーションユニット(クラスタ)サイズは64KBで。
そうそう、時間かかりそうなので、クイックフォーマットでいいや」
DISKPART> format FS=ntfs UNIT=65536 QUICK 100% 完了しました DiskPart はボリュームのフォーマットを完了しました。
「今作成されているボリュームの一覧を表示して」
DISKPART> list volume Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 0 FAT Partition 31 MB 正常 Volume 1 NTFS Partition 31 GB 正常
「んじゃ、以降はひとつめのボリュームに対して作業するね」
DISKPART> select volume 0 ボリューム 0 が選択されました。
「こいつにデフォルトでドライブレターが割り当てられない属性に設定して」
(↑補足:起動パーティションがCになると、システムがDになって使いづらくなるため)
DISKPART> attributes volume set nodefaultdriveletter ボリュームの属性が正しく設定されました。
「今のボリュームの属性を表示して」
DISKPART> attributes volume 読み取り専用 : いいえ 隠し属性 : いいえ 既定のドライブ文字がありません: はい シャドウ コピー : いいえ
「よし、これで用は済んだから終了して」
DISKPART> exit DiskPart を終了しています... X:WindowsSystem32>
以上で、DiskPartによる作業は終了なんですが、やっぱり面倒くさいですかね?(笑
ていうか、むしろうちが面倒くさいので、上の作業を自動で行うバッチファイルも作ってみました。
上で何をやってるか理解する気もないけど試してみたいって方は自己責任でどうぞ。
これはWindows PE上でSHD-DI9M32GをNTFSの64KBクラスタでフォーマットするバッチファイルです。
上でやったように、31MBの起動パーティションと残り31GBのシステムパーティションを作ります。
解凍後、USBメモリなどに入れて、Windows PE上で実行してください。
一応、SHD-DI9M32Gに換装したMini9以外では動作確認していません。
このバッチファイルの使用により、想定外のディスクがフォーマットされても責任は取れませんのでご注意ください。
・・で、話は戻りまして、DiskPartの作業が終了したら、
Windows PEは終了して再起動します。
で、Windows XP(もしくはリカバリディスク)のCDからブートして、
31GBのパーティションの方に、フォーマット「しないで」インストール。
既にフォーマットされているので、入れたい領域でEnterを押すだけで勝手にコピーが始まると思います。
インストールが終了すると、31MBの起動パーティションにはドライブレターが割り振られず、
31GBがCドライブとしてWindowsがインストールされていると思います。これで成功です。
そのままドライバを入れていけば、ようやく使えるようになります。
で、肝心のプチフリはどうなったかというと・・・デフォルトよりはいくらか軽減しているような気はします。
両者を直接的に比較できないのでプラシーボな可能性も捨てきれないところですし、
CrystalDiskMarkの結果は全く変わらないので、「気休め」程度なのかもしれません。
(まぁ、プチフリが起こる高負荷とベンチマークはまた状況が違うとも思いますが・・・)
元々、いわゆるプチフリの発祥元であるJMicronのSSDほど酷いものではなかったので、
こればっかりは、各自が使ってみて比較して頂くのが一番かと思います。
少なくとも、前よりも悪くなっていると感じる事は今のところないです。
ちなみに、この手法には少しお得な(?)副作用もあって、
NTFSの仕様上、4KBより大きなクラスタサイズでフォーマットされた場合、
NTFS圧縮に非対応となります。
Mini9では、リカバリの場合、標準で容量を稼ぐためにNTFS圧縮してあって、
このままだとパフォーマンスが低下するために、圧縮を解除して使ってる方も多いんですが、
64KBクラスタでインストールすると、元から対応してないので圧縮が全て解除されます。
インストール後に何十分もかけて圧縮を解除するのを考えると、
リカバリCDの改造なしで、圧縮されずインストールできるのは、意外と便利かもしれません。
というわけで、誰にでもオススメできるって感じではないんですが、
今から、新規インストールやリカバリするって方は試してみてもいいかもしれません。
で、以下はこの件に関するフォロー記事です。
●オイこれ「オペレーティングシステムの選択」が毎回毎回表示されてすげぇウザイんですけど。
インストール時にNTLDRをCドライブの前にある31MBの領域に書き込むわけですが、
それ以降は、ドライブレターが割り当てられない状態になってしまうので、
boot.iniが編集できない状態になってしまい、このままだと起動毎にNTLDRが表示されます。
一番簡単なのは「ディスクの管理」から、31MBの領域に新たにドライブレターを割り振る事ですが、
インストールしたXP上でこれをやってしまうと、マウントしたが最後、
ブート領域なので、二度とマウントを解除することができなくなります。
それでも特に問題はないんですが、起動専用パーティションが意味なくマウントしてるのも気持ち悪いので、
うちはXPではマウントせず、フォーマットに使ったWindows PEを再び使って、boot.iniを編集しました。
上でやったのと同じように、Windows PEでDiskPartを起動して、
DISKPART> select disk 0
DISKPART> select partition 1
DISKPART> assign letter=q
DISKPART> exit
とすると、31MBの起動用パーティションがQドライブとしてマウントされます。
なので、Windows PE上のメモ帳とかで、boot.iniを編集します。
あ、boot.iniは隠しファイルなので、別のファイラーを使ってみた方が便利かもしれません。
あと読み取り専用も付いてるので、編集時はあらかじめ解除してくださいね。
boot.iniは、
[boot loader] timeout=1 default=multi(0)disk(0)rdisk(0)partition(2)WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(2)WINDOWS="Microsoft Windows XP Home Edition" /noexecute=optin /fastdetect C: = "ドライブ 上の識別できないオペレーティング システム"
こんな感じになっているので、
[boot loader] timeout=1 default=multi(0)disk(0)rdisk(0)partition(2)WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(2)WINDOWS="Microsoft Windows XP Home Edition" /noexecute=optin /fastdetect
こうやって、最後の一行を削ると、「オペレーティングシステムの選択」は表示されなくなります。
上にあるバッチファイルにそれっぽいものもオマケで同梱してあるので、参考にしてみてください。
●XPは分かったけど、VistaやWindows 7もクラスタサイズ広げてインストールできるの?
えー、結論から言うと、残念ながらできないみたいです。
クラスタサイズを変えたNTFSにインストールするように選択はできるんですが、
インストールの途中でエラーが出て先に進めなくなってしまいます。
推測ですが、NTFS圧縮ができなくて進めないんじゃないかな、っていう気はするんですが、
もしそうだとしたら、これは仕様上の制限なので、どうしようもないですしねぇ。
何かまた進展したら、ここで記事にしようとは思っていますが、まぁ期待薄ですかね。
ただ、異様に遅いのはXPだけの話なんで、VistaやWindows 7の場合は、
4KBクラスタのまま使っても、そこまで不満はないような気はします。
●64KBクラスタだとクラスタギャップが大きすぎるので、32KBや16KBにしたい。
試してませんが、できると思います。DiskPartでフォーマットするとき、
DISKPART> format FS=ntfs UNIT=65536 QUICK
の、65536っていうのを小さくするだけでいいかと。
もちろん、「キリのいい」数字を入れないとダメですよ。
速度と効率を考えて、各自でベストの値を見つけてみるのも面白いと思います。
●面倒くさい事やらせといて全然速くなってねーよバカ
何しろ、劇的な効果があるんならみんなやってるよなぁ、って感じなので、
試すにあたってWeb上に全然情報がないっていうのは、ちゃんと理由があるわけですかね。
まぁ、うちみたいにWindowsのインストール何度やっても苦にならない人種もいるので、
そうでない方は、過度な期待はせず、スルーした方が賢明かもしれませんね。
こんなまどろっこしい事しなくても、お金をかければ解決する話でもありますので・・・。
コメント