WindowsServer : してログ

これ
これ

Windows 2000 Server でログオン直後に「WINTRUST.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すことこの問題は解決される場合があります。」というエラーが表示され、シェル(エクスプローラ)が起動せず、何も表示されないデスクトップしか出てきません。

だいぶ古いサーバーで直前にHDDの調子が悪かったので、運悪く重要なファイルが壊れてしまったんだと思います。さほど重要なサーバーではなく、ネットワーク上では正常に動いているように見えたので、今まで気づきませんでした。修復インストールすれば回復するかも知れませんが、今回は取り外すことにします。

設定やデータの吸い上げをするのに、リモートからも実機からもログオンできないので、しばらく悩みましたが、Ctrl + Alt + Del でタスクマネージャが開くことに気づきました。タスクマネージャの「新しいタスク」から任意のプログラムを呼び出せるので、コマンドプロンプト(cmd)を起動できます。これで、ダメージを受けていないファイルを特定したり、管理ツールを立ち上げて設定を確認したり、なんとか GUI なしでも思う通りの操作が可能になりました。

教訓。サーバーというものは、物理的にも見てあげないとダメなものですね。

サーバー専用機も安くなってきたとは言え、壊れたときパーツの換えが利かなかったり、前の世代のECCメモリなど割高で入手し辛くなりがちです。そこで今回は普通の自作PCにセットアップしてみたいと思います。

なお、この情報は試行錯誤しながらうまく行った部分のみのメモレベルであり、重要な試行作業が抜けていてこの通りにやってもうまく行く保証はありません。試してみる場合は失敗しても取り返しがつくような環境にした方が良いと思います。

ネットワークアダプタの非対応に注意

マザーボードに搭載されているネットワークアダプタが Windows Server 2016 で対応しているかどうかが問題です。マザーボードの仕様からベンダーを特定し、スペックシートなどを検索して調べることになります。ちなみに今回は、H110M-A/M.2 に搭載の Intel I219V というアダプタでした。

はい。という訳で見事にサポートされておりませんでした。Intel 製だったらたぶん大丈夫だろう、という甘い考えで選んだのですがそううまく行かないもんです。対応した拡張LANカードは1万円もしませんが、今回は以下の情報を元に無理矢理動作させてみました。

ハードウェアRAIDは高くつく?

サーバー機なのでRAID0構成としたいところですが、安いアダプタだと Windows Server 2016 に対応しないと思います。かと言って、Adaptec や LSI のサポートしてるお高いやつにしたら本末転倒もいいところです。だとすれば、ソフトウェアRAIDという話しになりますが、Windows だとシステムボリュームで組むのに注意点があります。

システムボリュームでソフトウェアRAIDを組む

単にミラーリングしたいだけなら、ダイナミックディスクに変換し、ミラーボリュームを追加すれば良いと思います。しかし、これだとブートパーテーションのあるディスクが壊れた場合に起動不能になります。ミラーボリュームのあるディスクにも、diskpart コマンドを使ってブートパーテーションをコピーしておけば良いのですが、手順が若干面倒です。そこで今回は、USBメモリに入れた Ubuntu をライブ起動して dd コマンドによりミラーディスクを作ることにしました。

  1. 公式日本語チーム ubuntu のISOイメージを準備します
  2. こちらのサイトからUSBメモリに書き込むツール Universal USB Installer を準備します
  3. これらを使って起動可能なUSBメモリを作成します
  4. サーバー機は、同じ容量のHDDを2本搭載し、Windows Server 2016 をインストールしておきます
  5. サーバー機の準備ができたら、USBメモリを使って ubuntu を起動します(電源投入直後に F8 を、ぽんぽんぽんっと押し続けているとブートメニューが出ますので、USBメモリを選んで起動します)
  6. ubuntu が起動したら、terminal を開きます(左上のサーチアイコンで「ter」と入れれば見つかります)
  7. fdisk コマンドにてディスクのラベルを確認します
  8. dd コマンドにてディスクをコピーします(ブートパーテーションが終わったら強制終了)
  9. Windows Server 2016 を起動し、システムボリュームにミラーボリュームを追加します
  10. ミラーボリュームのリビルドが終われば完成です
fdisk の操作
sudo fdisk -l

SATA なら sda や sdb になっていると思いますが、コピー元がどっちなの確認する必要があります。Windows Recovery なんとか、とか Microsoft LDM data などがリストされている方がコピー元になります。新しくインストールしている場合は、間違えてもやり直せばいいだけですが、そうでない場合、取り違えには十分注意してください。なお、ディスクの容量の数値を確認しておくと、進捗でいつ終了するのか推定しやすいです(単位の計算で1024か1000かいつも悩む)。

dd の操作
sudo dd if=/dev/sda of=/dev/sdb bs=32M

間違えないように if にコピー元、of にコピー先のディスクを指定します。適切なブロックサイズ(bs=32M)の値はわかりませんが、デフォルトだと時間が掛かったかと思いますので大きめの値にしておきます。この設定で私の環境では 200MB/s の速度(1時間で 0.6TB 程度)が出ました。最初の起動パーテーションが終わった頃合いで強制終了させ、不完全なシステムボリュームは Windows 側で作り直したほうが無駄が無いと思います(どうせRAID組むときにリビルドされるしね)。

進捗の確認方法
sudo watch -n 10 pkill -USR1 dd

もうひとつ Terminal を開き、上記コマンドを実行させると10秒ごとに進捗を表示させることができます。コピー済みの容量、経過時間、転送速度が表示されるので、だいたいの終了時間も計算できます。ちなみに、容量のところで TB と TiB がありますが、テラバイト(1012バイト)とテビバイト(240バイト)を表す単位です。

ミラーボリュームの構成

コピーが終わって、Windows Server 2016 を起動したらディスクの管理を確認します。コピー先のディスクが「不足」や「オフライン」になっていましたので、再アクティブ化などやってベーシックディスクにしました。このとき「すべて消えます」的なメッセージが出るがブートパーテーションは消えないのでそのまま実行します。ディスクをオンラインにできたら「回復パーテーション」と「EFIシステムパーテーション」が見えると思います。残りの領域は「未割り当て」となっているので、そのままコピー元のディスクのシステムボリュームから「ミラーの追加」をします。追加先ディスクを選んで進めると、「再同期中」という表示になり、しばらくする(けっこう待つ)と進捗率が表示されました。

進捗率が表示されるまで結構時間が掛かる
進捗率が表示されるまで結構時間が掛かる
ディスク障害の試験

システムボリュームのミラー構成ができたので、実際にディスク障害を想定した試験を行ってみます。

まず、プライマリのSATAケーブルを抜いた状態で起動させてみました。何事も無く Windows ブートマネージャが立ち上がり、普通に起動することを確認できました。ディスク管理を覗くと当然、外した方のディスクは「不足」となっています。

2つに分かれてて想像と違う
2つに分かれてて想像と違う

実際の場合は新しいHDDに起動パーテーションをコピーし直すところですが、それは省いて外したHDDを繋げてみます。しかし、起動しても復旧せず、論理的なディスクとしてバラバラに表示されるだけでした。

構成が復元し再同期開始されるのを期待したが…
構成が復元し再同期開始されるのを期待したが…

再同期は免れなくてもミラー構成は復元されると踏んでいましたが、色々操作してみても無駄でした。いったんベーシックディスクに戻してから、ダイナミックディスクにします(当然システムパーテーションは消えます)。「不足」になっていたミラーボリュームは、ミラーを解いて削除します。

いちどミラーを解いた状態
いちどミラーを解いた状態

ここまで来たら、最初のときと同様にミラーボリュームを構成してあげれば復旧完了です。ハードウェアのRAIDと比べると復旧の手間は掛かりますが、いちど練習しておけばいざという時にも何とかなるレベルだと思います。

最後に

問題なく Windows Server 2016 を普通のPCに入れることができました。デバイスマネージャを見るとまだ認識できてないデバイスがありますが、サーバーとして使う分にはいらないものばかりなのでそのままにします。ただ、これらのドライバもLANアダプタと同様な方法で動かせるかも知れません。