Windows10 Pro 64bitでファイルサーバーの構築

はじめに

 メインPCのストレージをSSDにすべて置き換えましたが、いかんせん使用頻度の低いファイルを保存したままにすると容量を圧迫していきます。使用頻度の低い物はUSB接続のHDDケースを使ってHDDに保存する運用をしていましたが、USB-SATAコントローラーがHDDの熱と自身の発生する熱で夏場に頻繁にハングアップし、HDDクラッシュを引き起こします。それが原因で何度もHDDに不良セクターを発生させてしまい、HDDを破損させてきました。熱対策、HDDの騒音対策、アクセスの安定性向上を解決する方法としてファイルサーバーを構築することにしました。

 自作PCをやっていくと、メインPCのパーツを買い換えていくなかで、余剰パーツが発生しそれを集めると十分に1台分のPCを構築できます。それらのパーツを使ってファイルサーバーとします。

 これから構築方法を説明するファイルサーバーのOSは、Windows10 Pro 64bitを使います。Windows Serverを導入するのが理想ですが、個人のファイルバックアップではOSの購入費用はかなり負担が大きくなります。すでにUbuntu、Mintなどをサーバーとして運用していましたが、Windows10からSMBプロトコルを使ってLinux系のSAMBAサービスとやりとりするとたまにファイル情報が正しく読めない不具合が発生します。自分ではこの問題を解決する方法が見つけ出せないことと、最新のMintではSAMBAサービスの構築、設定を行うのがCUIのみとなってしまったのでLinux系OSをやめました。

 Windows10 Pro 64bitを使うのは、使うマザーボードのUEFIでライセンス認証を通っているので新たなOSライセンスが必要ないためです。

1.ハードウェアの準備

余り物を基本とする構成で、システムディスクとしてNVMeのSSD、メインメモリDDR4 2666MHz CL16 16GBを準備します。

・CPU / AMD RYZEN 7 1700

・M/B / GIGABYTE GA-AX370-Gaming K7(AMD X370 Chipset)

・GPU / GIGABYTE GV-N105TOC-4GL (NVIDIA GeForce GTX1050Ti 4GB OC Low Profile)

・Case / CORSAIR OBSIDIAN 550D

買い足したのは、

・PSU / CORSAIR RM750X

・RAM / CORSAIR VENGEANCE LPX DDR4 2666MHzCL16 16GB (8GB×2)

・SSD / WD WDBLACK SN750 NVMe(PCIe3.0*4) 250GB

HDDは、TOSHIBA DT01シリーズ 3TB(7200prm)を2台、SEAGATE Barracuda 3TB(7200rpm)を2台、WD GREEN 3TB(5400rpm)を2台、SEAGATE Barracuda 8TB(5400rpm,SMR)を2台のいずれもマザーボードのSATA3コネクターに接続します。

2.OSのインストール

(1)インストールメディア

 メインPCで、Microsoftのサイト「Windows10のダウンロード」から、「ツールを今すぐダウンロード」をクリックして、インストール用USBメモリを作製するためのツールをダウンロードし、それを実行します。

(2)ドライブ構成

起動ディスクとなるNVMeのSSDだけをマザーボードに搭載し、データドライブとなるHDDはまだ接続しません。接続したままOSをインストールするならUEFI BIOSで起動ドライブのリストからHDDをすべて外します。起動時に不必要なアクセスがなくなるので起動が速くなります。

あとでWindows10 Proの機能「記憶域」を構築するので、RAIDは構築しません。

AMD RAIDは疑似RAIDと呼ばれるもので、ハードウェアRAIDのように思われますが、BIOSからCPUやメモリを使って制御するローレベルソフトウェアRAIDです。AHCIからRAIDに変更してしまうと、HDDをMBR方式に否応なく変更してしまうので、HDDにデータが入っている場合はそのデータが読み込めなくなります。

(3)OSインストール

普通のPCとしてWindows10 Pro 64bitをインストールします。ファイルサーバーだからといってインストール時に何かを特別に設定する必要はありません。

3.ドライバーのインストール

(1)チップセットドライバー

AMDまたはGIGABYTEのサイトからチップセットドライバーをダウンロードしてインストールします。RAID/ACHIドライバーは必要ありません。

RYZEN 7 1700はTDP65WのCPUで8コア16スレッドとしては省電力のCPUです。チップセットドライバーには電源設定「Ryzen Blanced」のプロファイルが含まれているので、チップセットのインストール後、再起動してからコントールパネルの「電源オプション」でそれを選択します。

(2)LANカードドライバー

GIGABYTE GA-AX370-Gaming K7には、Intel製のネットワークICとQualcomm製のネットワークICが搭載され、Ethernet RJ45ポートが2口あります。それぞれのドライバーをGIGABYTEのサイトからダウンロードしてインストールします。

(3)GPUドライバー

NVIDIA GeForce GTX 1050Ti 4GBのGPUなので、NVIDIAからSTUDIOドライバーをダウンロードして、ドライバーだけインストールします。「GeForce Experience」というGPU関連のアプリケーションはあえてインストールしません。このアプリは最新のGAMEドライバーの更新を通知してくるのでファイルサーバーの管理上不都合です。

なお、STUDIOドライバーをインストールするのは、ドライバーによる不安定、不具合を回避するためです。STUDIOドライバーはGAMEドライバーとは違う検証工程のようなので頻繁に更新する必要がないためです。

(4)オーディオドライバー

ファイルサーバー以外の用途で必要ならGIGABYTEからダウンロードしてインストールします。必要ないなら、オーディオデバイスはBIOSで無効にしておいてください。HDMI接続ならGPUでサウンドが再生されるので、マザーボードに搭載されたオーディオデバイスが必要になることは少ないです。

(5)マザーボードのファン制御

GIGABYTEからAppCenterをダウンロードしてインストールします。このツールから更にSIVと@BIOSをインストールします。SIVはマザーボードに接続されているFANの制御やオーバークロックなどの設定を行います。GIGABYTE GA-AX370-Gaming K7には2つの温度センサーストリップが付属しています。このセンサーをHDDに貼り付けるなどして温度を監視してFANの回転数を制御できます。

4.Windows Updateの実施とWindowsセキュリティー

(1)Windows Update

ドライバーのインストール中にWindows Updateが実行される場合がありますが、一旦停止させるか、Windows Update後にドライバーをインストールします。

(2)Windowsセキュリティー

ウィルス対策ソフトはMicrosoft Defender、今のWindowsセキュリティーで必要十分です。インターネットからダウンロードしたファイルは、常に右クリックしてMicrosoft Defenderでチェックする習慣を身につけてください。

特にP2Pでは注意してください。ファイル単位でメモリーを経由しないディスクI/OはMicrosoft Defenderのリアルタイムスキャンから外れます。

5.記憶域の設定

記憶域はWindows Server 2016以降から搭載されている仮想化ストレージ(シンプロビジョニング)の機能です。Windows10 Proではそのサブセットが搭載されています。

詳しくはMicrosoftドキュメントの「記憶域スペースの概要」を参照してください。

[シンプル]
・物理ディスク間でデータをストライプ化する。
・ディスク容量を最大化し、スループットを向上させる。
・回復不可能 (ディスク障害からは保護されない)。
[双方向ミラー]・[3方向ミラー]
・一連の物理ディスクにわたって、データのコピーを2つまたは3つに保存。
・信頼性は向上、容量は減少。書き込みごとに重複が発生。また、ミラースペースは、複数の物理ドライブ全体にデータをストライプ化する。
・データスループットが向上し、パリティよりもアクセス待機時間が短くなる。
・ダーティ領域追跡 (DRT) を使用して、プール内のディスクの変更を追跡する。予期しないシャットダウンからシステムが再開され、スペースがオンラインに戻ると、DRT によってプール内のディスクの一貫性が相互に保たれる。
[パリティー]
・物理ディスク間でデータとパリティ情報をストライプ化する。
・シンプルと比較すると信頼性が向上するが、パリティー分の容量が減少する。
・ジャーナリングによる回復性の向上。予期しないシャットダウンが発生した場合、ジャーナリングによってデータの破損を回避できる。

Windows8.1 Proにおいてパリティーで構築した記憶域を運用していましたが、書き込み速度が50MB/s以上にならない、パリティー専用のHDDが固定される、そのHDDがいっぱいになると書き込みが出来なくなるなどの制限があり、クライアントOSでの運用は難しいと考えています。

また6台の3TBのHDDを一つの記憶域プールに追加し、それらすべてを使って記憶域の双方向ミラーを構築してテスト運用しましたが、I/O速度の違うHDDを混ぜると必然的に速度は低い方へ合わせられ、タイミングがずれるためシーク時間の待ち時間と併せて更に速度が低下します。更に7200rpmと5400rpmのディスクによって振動の振幅に強弱が発生し、うなりとなって「ブーン、ブーン」と耳障りな音が聞こえてきます。

従って今回の構成は下図のように4種類8台のHDDを使って、4つの記憶域プールを作成します。

(1)記憶域の設定

コントロールパネルから「記憶域」をクリックし、「新しいプールと記憶域の作成」をクリックします。

下図は別のPCの画面を参考に貼り付けています。1つの記憶域プールに同じ型番のHDDを2台ずつ選んでいきます。

2TBを超えるHDDを使うのでGTPパーティションにしておきます。Windows10 Pro 20H2では、ReFSのファイルシステムは選択できなくなっています。ファイルシステム自体にフォルトトレラントの仕組みがあるReFSはそれなりにメリットがありますが、NTFSで出来ることがすべて出来るわけではありません。どうしてもReFSに拘る場合は、Windows10 Pro for Workstationにアップグレードしてください。

(2)記憶域プール、記憶域の名前を変更

記憶域プール(ストレージプール)、記憶域(バーチャルディスク)、物理ドライブの3構成で表示されます。記憶域は初期値では「記憶域」という名前になっています。「設定の変更」ボタンを押し、「変更」をクリックすると記憶域の名前と仮想容量が変更できます。

後々、Powershellのコマンドレットで操作する際に一意の名前になっていないと困ることになるので、「記憶域プール」も「記憶域」も変更します。

6.ネットワークの設定

(1)TCP/UDPチェックサムオフロードの無効化

チェックサムをネットワークインターフェイスのチップに行わせる機能ですが、かなり処理が重く通信速度が低下します。通信品質が保てる環境ならこれらのチェックサムオフロードは無効に設定します。

「イーサネットのプロパティ」から「構成」ボタンを押し、「詳細設定」タブを開いてチェックサムオフロードの項目をすべて無効にします。

(2)SMBダイレクトの有効化

Windows10 Proでは、RDMAに対応したネットワークインターフェイスはSMBプロトコルにおいて「SMBダイレクト」という機能が使えます。これが有効になっていないときと比べると約10%の速度向上があります。また複数のネットワークインターフェイスがある場合はネットワークフォルトトレラントの機能が使えます。

下図から分かるようにRDMAはメインメモリを経由せずにネットワークインターフェイスのキャッシュからディスクI/Oへデータを渡すため、経路が少ない分速度上昇が見込めます。

Powershellを管理者権限で起動し、

Set-NetOffloadGlobalSetting -NetworkDirect Enabled

と入力して実行します。

(3)RSS Capableの無効化

Powershellを管理者権限で起動し、

Get-SmbClientNetworkInterface

と入力し実行します。

RSS Capableがすべてのネットワークインターフェイスで無効になっていることを確認します。無効になっていない場合は、コマンドプロンプトを管理者権限で起動し、

netsh int tcp set global rss=disabled

と入力し実行します。「ok」と表示されれば成功です。確認のために

netsh int tcp show global

と入力します。

Recive-Side Scaling 状態  : disabled

となっていれば成功です。もう一度Powershellで、

Get-SmbClientNetworkInterface

と入力し実行します。

RSS CapableがすべてFalseになっていれば完了です。

フォルトトレラントについては、共有フォルダーを適当に作りそこに向かって大きなファイルをコピーし、コピー中に片方のLANケーブルを抜いてコピーが中断されないことを確かめます。

また負荷分散については、同じくファイルコピー中にタスクマネージャーでネットワークの使用率と速度を確かめます。

(3)IPv6の無効化

ネットワークのプロパティーを開き、すべてのネットワーク接続からIPv6を無効化します。

一部のインターネットプロバイダーではIPv6が必要な場合がありますが、IPv6はローカルの情報がインターネット上に晒され、インターネット側から直接接続されててしまうので使いません。

(4)DNSの手動設定

プロバイダーが割り当てているDNSのアドレスがブロードバンドルーターなどからDHCPで自動で設定されますが、契約しているプロバイダーの上位ルーターのDNSが不調になることが多いので、ローカルルーターのDNSサーバーのアドレス、インターネット上の上位の高速DNSサーバーのアドレスを手動で割り当てます。

検索順は、ローカルDNS[192.168.xxx.xxx]、最速のDNS[1.1.1.1]、[1.0.0.1]です。

[1.1.1.1]、[1.0.0.1]はAPNICが提供する最速で安全なDNSです。

7.ファイル共有とアカウント設定

(1)Microsoftアカウントでのログオン

アカウントの各種情報を完全同期できるので、擬似的なディレクトリサービスとして使います。ただし同期する項目から「テーマ」と「その他のWinmdowsの設定」を外します。

(2)PINの削除

Windows10 20H2の更新で、PIN入力でログオンする設定では、セキュリティー向上のためアカウント情報へのアクセスが制限されます。

スタートメニューの「設定」の歯車アイコンをクリックし「設定」を開きます。

次に「アカウント」を開きます。「サインインオプション」から「Windows Hello 暗証番号(PIN)」を開きます。

「削除」をクリックして、PINを削除し、WindowsにMicrosoftアカウントでログオンし直します。

(3)共有フォルダーの設定

先に作成した記憶域の仮想ディスクにフォーマット済みのボリュームが出来ているはずです。バックアップを作成するファイルサイズに合わせてバックアップ先のフォルダーを作成します。

作成したフォルダーを右クリックし、「プロパティー」から「共有」タブを開きます。「共有」ボタンを押し「ネットワークアクセス」が開くので、共有させたいMicrosoftアカウントを追加します。

クライアントPCからは、コマンドを使いバックアップ用のバッチファイルを実行しますがMicrosoftアカウントで接続されるので難しく考える必要はありません。

8.コマンドによるバックアップ

(1)ROBOCOPYの確認

いつの間にかWindowsに追加されていた堅牢性の高いファイルコピーコマンドが「ROBOCOPY」です。詳細はマイクロソフトドキュメントの「robocopy」を参照してください。最初のコピーはすべてのコピーが行われますが、二回目以降は通常は変更のあったファイルのみコピーされます。

(2)バッチファイルの作成

バックアップ元のルートフォルダーと同階層に右クリックで新しいテキストファイルを作成します。下の例を参考にテキストファイルを編集します。

C:\Windows\System32\Robocopy.exe [バックアップ元のフォルダーパス] \\[サーバー名]\[共有フォルダー名] /E /J /MT:3 /NOOFFLOAD /R:100 /W:10 /V /NP /ETA /LOG:E:\RoboSyncLog_Photo.txt /XD "System Volume Information" "$RECYCLE.BIN"

バックアップ元のルートフォルダーと同階層に作る場合は、「C:\Windows\System32\」は必要ありません。「ROBOCOPY」にはパスが通ってます。

オプションは

/E
空のフォルダーを含むすべてのサブフォルダーとファイルをコピーします。
/J
WindowsのファイルI/Oの仕組みを利用しません。大きなサイズのコピーに適しています。
/MT:[n]
nはスレッド数。経験上、1Gbps環境でコピー先がCMRのHDDの場合3が妥当。SMRだと1が妥当。環境に合わせて変更する。コピー先のストレージ速度に余裕がある場合、CPUのコア数-1が妥当。最大128。
/NOOFFLOAD
オフロードをしません。HDDの場合はかなり有効。
/R:[n]
nはリトライ回数。
/W:[n]
nは秒。リトライまでの待ち時間。
/V
ログオプションなので割愛。
/NP
ログオプションなので割愛。
/ETA
ログオプションなので割愛。
LOG:[パス]
MTオプションを使う場合は、処理の最適化のためレスポンスをログファイルに書き込みます。パスにはログファイルのパスを記述。
/XD “パス1” [“パス2”]
パスにはコピーの対象にしないファイルのパスを記述。複数の場合はスペースで区切る。

保存したファイルの拡張子を「.txt」から「.bat」に書き換えます。ダブルクリックで実行するとバックアップの作成が始まります。

定期的に実行する場合は、作成したバッチファイルをタスクスケジューラでスケジュールします。

9.リモートデスクトップ

Windowsでのサーバー構築の最大のメリットはリモートデスクトップでしょう。

(1)リモートデスクトップの有効化

スタートメニューの設定の歯車アイコンをクリックして「設定」を開きます。「リモートデスクトップ」をクリックして、「リモートデスクトップを有効にする」のスライドスイッチをオンにします。

(2)接続の確認

「スタートメニュー」の「Windows アクセサリ」の「リモートデスクトップ接続」を起動します。先にリモートデスクトップをオンにしたファイルサーバーの名前を入力して、Micorosoftアカウントで接続します。

最後に

ファイルサーバー構築の一助になりましたでしょうか。

最終的なネットワーク構成は下図のようになっています。

ファイルサーバーの3.5インチHDDは頻繁に電源を落とさないようにしてくだい。日立の技術者曰く電源を入れっぱなしにすることを前提に設計されているため、頻繁に電源を落とす3.5インチHDDの故障率は高いそうです。

逆に2.5インチHDDは頻繁に電源を落とすことを前提に設計されているため、ファイルサーバーなのどの電源を入れっぱなしにする運用では故障率が上がるそうです。

今回はHDDによるミラー記憶域のファイルサーバーを構築しました。SATA接続のHDDの速度は今のところ200MB/sが最速なので、2Gbpsのネットワークで十分賄えます。8K動画などのリアルタイム編集や共同編集などの同時アクセスには足りませんが、個人のファイルバックアップにはそれほどストレスを感じることはないと思います。

Windows10にはネットワークインターフェイスのブリッジ接続(ネットワークインターフェイスの仮想化)でフォルトトレラントのネットワークを構築する機能がありますが、SMBダイレクトに比べ速度は遅くなりますし、SMBダイレクトを有効にする場合、ブリッジ接続ができません。

すべてのディスクを製品毎にミラー化したので記憶域を使うよりOSのダイナミックボリュームを使ったミラー化の方が運用が良いのかもしれません。しばらく運用してまた検討します。