2008年2月27日水曜日

WPADのContent-Type

Web Proxy Auto-Discovery ProtocolいわゆるWPADですが、なんとWindows Update ClientはContent-Typeをちゃんと見ていました。application/x-ns-proxy-autoconfigに設定されていないと、無効と見なされてしまうようです。
これ気づいてる人は少ないようで、proxycfg.exeに頼ってる記述が多々ありました。

2008年2月20日水曜日

RAIDデバイス名の変更

Linuxのsoftware RAID(md)の場合、disk controllerをまたがって好きなようにRAIDを構成できるため重宝します。またhardware RAIDの場合、raid controllerが故障すると読み出せませんが、そのような欠点もありません。
mdはディスク内に自身のデバイス名(md0)などを保持しています。ここで例えばディスク交換のために、/パーティションをmd0からmd1にコピーした場合、新たに作られる/はmd1というデバイス名を持ってしまいます。これを繰り返すとデバイス名がどんどんいびつになっていきます。
これをどうにか整理したかったのですが、どこにも書かれていなかったので自力で解決しました。

まだまだ説明が続きます。多くのドキュメントではmdのcreateについてしか記述されていませんでした。しかし実際にはassembleとstopという行為が重要になってきます。なぜこれらが記述されていないのかというと、Linuxの各ディストリでは起動時やshutdown時のscriptにあらかじめ組み込まれていて、説明する必要がないわけです。そして、試した結果わかったのですが、「mdはディスク内に自身のデバイス名(md0)などを保持しています。」これはcreate時だけでなくassemble時にも更新されるようです。

いよいよデバイス名の変更の仕方です。例えばmd2をmd1に変更するには

# umount md2
# mdadm -S /dev/md2
# mdadm -A /dev/md1 /dev/sd... /dev/sd...
# mount ...
わかってしまえば簡単でした。
このあと/etc/fstabの変更も忘れずに。

ただしこれができるのはumount可能なパーティションだけです。CD bootなどでもいいかもしれません。
CD bootできなくてもがんばれば更新できます。例えば/のデバイス名をmd0に変更する場合kernel optionで
raid=noautodetect md=0,/dev/sd...,/dev/sd... root=/dev/md0
で変更されます。raid=noautodetectを指定しておかないと、autodetectされ、保持されているデバイス名でassembleされてしまい変更できません。またデバイス名が変わるためroot=/dev/md0の指定をしないと起動に失敗します。
このあと/boot/grub/menu.listや/etc/fstabの更新も忘れずに。

2008年2月11日月曜日

ハードディスクの2TBの壁

750GB×4のハードウェアRAID5で、2.25TBになります。このときハードディスクのパーティションテーブルは32bit sectors(4giga sectors)×512bytes/sector=2TBまでしか表現できないという、2TBの壁にぶつかりました。
Debian GNU/Linux(etch)をインストールしたところ、パーティションエディタは2TBの壁を超えるために新しいGPT形式に対応していて、ファイルのインストール自体はできました。ところがブートローダのGRUBがGPTに未対応のバージョンのため、結局ブート不可能なインストール結果となってしまいました。

2008年2月9日土曜日

ハードディスクの問題が検出されました

時々、OSからハードディスクが認識されなくて、先週からは起動時のBIOSからも認識されなくなって、やばいと思っていました。週末ということもあり、バックアップして徹底的にチェック! …まずはバックアップを~こんなダイアログが出ました。Windows VistaってSelf-Monitoring, Analysis and Reporting Technology、いわゆるS.M.A.R.T.に対応してたのね。
ググると遭遇している方が結構いらっしゃるようです。でも…この警告を無視するコメントが多数…う~ん、無理に使ってデータが壊れても自己責任ですよ。

Windows Vista SP1 RTM

2/4にWindows Server 2008とWindows Vista SP1のRelease To Manufacturing、RTMがアナウンスされました。それと同時にMSDNでWindows Server 2008の提供も開始されましたが、Vista SP1に関しては3月中旬に公開されるそうです。
…と、これでは寂しいのでVista SP1のRTM版を入手してインストールしました。普通にインストールできました。ハイ、それだけです。

robocopy

ファイルを多数コピーしたくなりました。Explorerでは遅いからここはxcopyコマンドだと思い、まずはコマンドヘルプを…

C:\Users\sayuri>xcopy /?
ファイルとディレクトリ ツリーをコピーします。

注意: Xcopy は現在推奨されていません。Robocopy を使用してください。

XCOPY 送り側 [受け側] [/A | /M] [/D[:日付]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
[/EXCLUDE:ファイル1[+ファイル2][+ファイル3]...]
…ん?
C:\Users\sayuri>robocopy /?

-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー

-------------------------------------------------------------------------------

これはバックアップとか便利に使えそうなコマンドのようです。

2008年2月2日土曜日

LoadLibrary

今までLoadLibrary()を使ってましたが、実はLoadLibraryEx()にLOAD_WITH_ALTERED_SEARCH_PATHフラグを付けた方がいいことが判明。
こうすることによって、ロード対象のDLLがさらに依存するDLLを探す際に、DLL自身のdirectoryを検索対象に含めることができるようになる。