NASからWindows Server 2022へ移行【記憶域プール作成】

我が家ではデータの保管にNASを使っています。家族の写真・動画、録りためた番組など、基本的には何でも詰め込んでいます。また自宅前の防犯カメラのデータも、サイクリックで書き込んでいます。
さらに、NASからAmazon Prime Photoへの同期を行い、最強?の写真バックアップ体制を整えていました。

しかし、そろそろNASの本体も4年目を迎え、そのほかにもリプレースを考える要素が出てきたため、今回Windows Serverを導入することにしました。

理由1:Amazon Prime PhotoがNASとの同期をサポートしなくなった

Amazon Prime Photoは、2020年11月に、NASからの同期サポートを終了したため、クライアントのWindowsマシンから、NASの写真を読みに行き、それをPrime Photoにアップさせるという、あまりスマートではない方法での同期を続けてきました。

私は曲がりなりにもシステムエンジニアであり、そのスマートではないシステム構成に違和感を抱えており、「いつかはWindows Server」などと思いながら、暫定対処をおこなってきました。

理由2:防犯カメラ増設を検討しており、現行のNASでは2台までしかカメラをサポートしていなかった

今使っているNASは、SynologyのDiskStation DS418jという、4ベイのNASの中でもローエンドのモデルです。このNASはNASとしての基本機能と、ホームサーバーとしてのエントリー機能をその備え、かなり便利に使えていました。DLNA、監視カメラ管理、バックアップ機能、ほかにも、アプリがいくつか存在しており、機能拡張もできるという優れモノでした。

しかし、エントリーだけあって、パフォーマンスは最低限であり、防犯カメラも2台までという制約がついていました。

カメラを3台以上つなげることになったため、ミドルレンジのサーバーまたはNASを検討する必要が出てきたのです。

移行のためのサーバー構築

まずはWindows Server 2022をインストールするマシンを用意しました。第7世代のCore i7が載っており、まあまあなパフォーマンスです。HDDは4発と、バックアップ用として2発載せる想定。

NASにあったデータを空いているHDDなどにひたすらrobocopyでコピーしまくりました。6TBと、2TBが2本の計3本で収まりました。NASのバックアップディスクもあるにはあるのですが、万が一のために最後まで手を出したくないので温存。

あとはNASに搭載していたHDDをすべて外し、Windows Server2022のマシンへ搭載。DISKPARTコマンドで全領域削除。

健康状態をチェックしたところ、とりあえず3本とも問題なさそうなのでこのまま使います。

ここからが本題。カラになった6TBHDDでまず記憶域プールを作っていきます。

GUIでの記憶域プール~仮想ディスク~までのチャレンジ

まずはサーバーマネージャーで「ファイルサービスと記憶域サービス」をクリック。

「ディスク」をクリックして、右上の「タスク」から「記憶域の再スキャン」をクリック。

「記憶域プール」をクリックして右上の「タスク」から「記憶域プールの新規作成」をクリック。

あとは指示に従っていきます。これは仮想ディスクを切り出すためのディスクをまとめたグループを作るような作業なので、実際にまでデータ保存領域としては使用できる状態にありません。

ディスクもすべてを選択します。

プールが定義出来たら、「このウィザードを閉じるときに仮想ディスクを作成する」にチェックを入れて閉じるを押します。

これも指示に従って愚直に。

「記憶域のレイアウトの選択」とありますが、これはグループ化(ストレージプールとして定義したディスク群)から、どのような冗長性能を持たせてディスクを切り出すかの設定です。NASで使用していたものもパリティなので、Parityを選択。コストが潤沢であればMirrorがおすすめなのは間違いないでしょう。

プロビジョニングは記憶域プールから仮想ディスクを切り出すとき、仮想ディスクと同領域のデータを物理的に予約するか、予約せずに論理的に使っていくかの選択となります。ホストマシンだけ(Hyper-Vを使用しない)で稼働させる場合は、「最小限」が便利だと思いますが、Hyper-Vを使用する場合は、固定の方がいいかなと、個人的には思います。どうせゲストのディスクは仮想化されてしまうので。

仮想ディスクは目いっぱい使いたいので、「最大サイズ」を指定したいところですが、エラーを吐くので約1割引きします。11に対して10TBぐらいを指定しました。

と、ここまではよかったのですが、なぜかこの後エラー。

色々調べたり、Hyper-Vを先に有効化してみようとしてみたり、やってみたものの有力な情報はつかめず。
調べている間にちらっと見た気がした「GUIだとエラーになる」的な記述を思い出し、コマンドでの作成を実施することにしました。

GUIで仮想ディスクが作れなかったため、CUI(PowerSell)での作成

GUIで作成した記憶域プールを解体し、以降をPowerSellで作業します。

まずは書きコマンドで記憶域プールの対象となるストレージを確認します。

> Get-StoragePool -IsPrimordial $true | Get-PhysicalDisk -CanPool $True

記憶域プールを「StoragePool」という名称で定義します。

> New-StoragePool -FriendlyName StoragePool -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -CanPool $True)

仮想ディスクを切り出します。ここではParityで、最大容量までを1ドライブとして作成しています。

> New-VirtualDisk -StoragePoolFriendlyName StoragePool -FriendlyName vDisk0 -ResiliencySettingName Parity -UseMaximumSize

ここまでうまくいけば、後は物理ディスクと同じようにOSが認識しているので「ディスクの管理」から「オンライン」→「GPT」→「初期化」→「フォーマット」ができました。
記憶域プールという機能はコマンドを利用することでさらに柔軟なストレージ設計が可能ですが、「まとめて、切り出す」という部分ではこれで最低限の作業となります。

めちゃくちゃ遅い…

過去にもWindows8 Proで作成したことがある記憶域プールですが、こんなに遅かったっけ?というぐらい遅くて、データ移行で心が折れてしまいました。Linux系ベースのOSであるNASでも、書き込み速度は100MB/sぐらい出ていたと思うのに、Windowsで同じようなことをしようとしたらこんなに遅くなるもんなの?CPUはもっとメモリはもっと強力なのに?

あまりに悔しいので、SSDをキャッシュとして混ぜた「階層記憶域プール」に次回チャレンジして、それでパフォーマンスが出るなら常用したいと思います。本当はケースが狭いので、あまり余計なものは入れたくないのですが…