2012年1月29日日曜日

回線が細すぎてADレプリケーションに失敗する場合の対処法

先日、遠隔地の拠点に新たにADサーバを立てた時に、回線が細すぎてADレプリケーションに失敗するという、「こんなの初めて!」な現象に出くわした。(結構レアだと思う)

発生したエラー
遠隔地のサーバでDCPROMOを実行し、無事終了したので、SYSVOLおよびntds.ditのレプリケーションが完了するまで見守ることにしたのだが、どうもntds.ditのレプリケーションが途中で止まってしまったようで、あるファイルサイズから一向に増えなくなってしまった。

状況を確認するためrepadmin /showrepl を叩くと、下記のようなエラーが表示された。
C:\>repadmin /showrepl
(snip)
==== 入力方向の近隣サーバー======================================
DC=****,DC=****,DC=**,DC=**
    *****\******** (RPC 経由)
        DSA オブジェクト GUID: ********-****-****-****-************
        2012-01-21 19:16:08 の最後の試行は、失敗しました。結果は 1818(0x71a):
            リモート プロシージャ コールが取り消されました。
        7 回連続で失敗しました。
        最後に成功したのは (never) です。
(snip)

「結果は 1818(0x71a)」とはこれいかに。

対処法:RPCタイムアウト値を変更
どうもWindows Server 2003以降は、ADのレプリケーション処理におけるRPCのタイムアウト値は5分になっているらしい。で、5分以内にレプリケーション元サーバからRPC応答が完了しないと、タイムアウトしてしまう。2000の頃は45分だったそうなので、ずいぶん短くされてしまったものだが、裏を返せば2000年から2003年にかけて世の中の通信事情がずいぶん良くなって、マイクロソフトとしては「5分でイケる」と判断したのであろう。
マイクロソフトの判断の是非はさておき、RPCのタイムアウト値を長くすることでこの問題は解決する。
レジストリエディタで
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
にDWORD値 "RPC Replication Timeout (mins)" を追加し、
値を45に設定し、再起動すればOK。
see also:Active Directory Replication Tools and Settings

2012年1月13日金曜日

Subversionでエロいファイルを隠蔽する

少し前にtwitterで「エロいファイルをバージョン管理システムで管理する(他人の目から隠す)」的なツイートを見かけたので、Subversionで実践してみた。
とにかく手軽に実践するため、1台のPCにSubversionサーバとクライアントの両方を導入する。検証に使った環境はWindows7 Ultimate x64。

2012年1月11日水曜日

2012年1月10日火曜日

Windows Vista,7,2008でログオンスクリプトによるネットワークドライブ接続に失敗する

ネットワークドライブが見えない!
Active Directory環境において、グループポリシーのログオンスクリプトを利用して自動的にネットワークドライブに接続させようとしても、うまくいかないことがある。
私が最近遭遇したのは、ログオンスクリプトをVBSで書いていてWScript.NetworkオブジェクトのMapNetworkDriveメソッドでネットワークドライブを割り当てたのに、マイコンピュータに表示されないしnet useコマンドでも表示されないというもの。MapNetworkDriveメソッドの結果をログファイルに出力してみると、結果(Err.Number)は0。つまり「スクリプト的には処理に成功している」のだが、「実際にはネットワークドライブが使えない」という状況であった。

2012年1月6日金曜日

Win2k8R2: WMIを使ってNICのアダプタ名から接続名を調べたりIPアドレスを変更したり。

Windowsの接続名("ローカル エリア接続"とか)はいい加減!
サーバにはNIC(Network Interface Card)が複数付いているのが当たり前である。
WindowsのNICには、通常 "ローカル エリア接続"、"ローカル エリア接続 2"…という具合に自動的に連番の接続名(NetConnectionID)が付けられるが、この名前付けはどうもランダムに行われているようで、まったく同じ構成のサーバでも、違う名前が付いたりすることがよくある。
一方、NICのデバイス名(デバイス マネージャーやコントロールパネルで見えるやつ)はブレることがまずない。
例えば最近のHPのサーバで、NICがNC382iの場合、デバイス名は1番ポートから順に
  • HP NC382i DP Multifunction Gigabit Server Adapter
  • HP NC382i DP Multifunction Gigabit Server Adapter #2
  • HP NC382i DP Multifunction Gigabit Server Adapter #3
という具合に名前が付いており、同一構成のサーバを同じようにキッティングすれば、同じ名前が付く(上はあくまで例で、必ず#2,#3…となるわけではない。悪しからず)。
どのNICがどの接続名になっているのかを知るにはコントロールパネルを見ればいい。デバイス名と接続名が両方表示される。

Figure.1 コンパネで接続名とデバイス名を見る
※上の実行例は、私の自宅リビングのWindows7 PCでの結果。Windows Server 2008での実行結果でなくて申し訳ない。

しかし、同じ構成のサーバを何十台、何百台と構築する場合、いちいち目視で確認などしていられない。
(実際には本番環境のサーバはチーミングを組む事が多いが、ここでは横においておく)。