win10で階層記憶域「ミラー高速パリティ」を意地で再構成する
かつて
を書いた。
そしてうっかりディスクの修復をやってファイルインデックスを全部飛ばし、復元ソフトでデータを取り戻すものの[数字だけのファイル名で中身の判別つかなくなったデータ]と[ファイル名・ファイルサイズは合ってるがバイナリが0にされた破損データ]だけが残されるという我ながら悲惨な目に遭った。
そもそもWindowsServerで普段使いする機能をWin10でも力ずくで機能させるものなので、見た通りに作りにくいというデメリットを理解しておく必要がある。またMicrosoft Buildでも「パリティは複雑なのでバッファを10~20%つくって」「パフォーマンスのためにはSSD:HDD=20:80の構成比にして」と書いてあり、ハードウェアRAIDの方が楽なのではないかとも思える。
復元はもはや諦め収集物は買い直して対応するザマだったが、腫物になったHDD3台とSSD2台は、売ろうと思ったがそこもまだ踏ん切りがつかなかった。
※ちなみにドスパラの買取だと500GBのSSDが2500円/台、8TBのHDDが7000円/台なので、全部売るなら2500*2+7000*3=26000円だが、今8TBのHDDは新品で14000円~15000円が最安なので、売りたい人にはお勧めしづらい。
なので新たにHDDを1台買い足して記憶域を再構築することにした。
結論から言うと、前回書いた記事通りに作業したらエラーで全く進まなくなってしまった。なので別の記述方法で対応することにした。
今まで使ってたディスク
【SSD】[Crucial_CT525MX300SSD1 525.1 GB]x1、[Seagate BarraCuda 120 SSD ZA500CM10003 500.1 GB]x1
【HDD】[ST8000DM004-2CX188 8001.5 GB]x3
新しく買ったディスク
【HDD】[WDC WD80EAZZ-00BKLB0 8001.5 GB]x1
つまりキャッシュにSSD2台は据え置き、キャパシティのHDDを4台にしてパリティすることにした。ちなみに前回のやりかたで構成しようとしたら、最後のnew-virtualdiskの段階で”New-VirtualDisk : Not Supported”とエラメが出て融通効かなくなってしまい終焉だった。
[作業手順]
① 「記憶域の管理」で必要なディスクを読み込む
「コントロールパネル」→「システムとセキュリティ」→「記憶域の管理」にて、必要なディスクを取り込む。
前回の説明と重複するが、ディスクは未フォーマットでいいし、そもそも作成後の記憶域も基本全データ消去なので何か入っているディスクは退避させる必要がある。取り込みの下に”ドライブ使用率を最適化する”というチェックがあるが外した方がいいだろう。どうせ作り変えるのだから意味は無いが、どうせならまっさらな方が良いだろう。
当然ここで記憶域の作成はしない。
このときディスクの名前を自分で管理しやすいよう各々変更しておくと、のちにディスク故障で交換するときに便利になる。同じHDDで構成した場合、故障ディスクの取り外しをシリアルナンバーで指定できないからだ。
② PowerShellを管理者権限で開く
これはいつものやつである。PowerShellには後ろに”ISE”と付くものがあり、これはドラッグした箇所や途中部分にカーソルを当てて消去できるので操作が簡単でおすすめだ。ちなみにオートフィル機能もあるがコピペで完結するので手入力の手間は少ない。
②-1 Get-PhysicalDiskで状況確認
Get-PhysicalDisk | Select SerialNumber, CanPool, CannotPoolReason
これをコピペして物理ディスクの状態を確認する。
”canpool”は現在プール可能か、さらに”cannotpoolreason”でその理由を確認できる。最初の「記憶域の管理」で取り込んだディスクは"In a Pool"もう入ってるので新たに取り込みできないとなっている。
②-2 Unspecifiedを直す
SSDはそのまま行けたりするが、なぜかHDDはUnspecifiedになってしまっているのでHDDに直す。すなわち”Get-PhysicalDisk”でシリアルナンバーを取得し、
Get-PhysicalDisk -SerialNumber --------- | Set-PhysicalDisk -MediaType HDD
をひたすらシリアルナンバー部分を修正しながら1件1件直していく。
今回は試していないが、"ミラー高速パリティ"で検索した際に見かけた記事では、
Get-StoragePool 記憶域 | Get-PhysicalDisk | where MediaType -EQ unspecified | Set-PhysicalDisk -MediaType HDD
を入力すれば、”unspecified=HDD"の条件で一括変更できる。get-physicaldisk~~~で始めてしまうと記憶域プールに取り込んでいないディスクまでHDD扱いされてしまう。
②-3 SSDとHDDのティアを作る
これは前回もやった。
Get-StoragePool 記憶域 | New-StorageTier -FriendlyName SSD -MediaType SSD -ResiliencySettingName Mirror
Get-StoragePool 記憶域 | New-StorageTier -FriendlyName HDD -MediaType HDD -ResiliencySettingName Parity -NumberOfColumns 4
”記憶域”の部分は「記憶域の管理」で作った、デフォルトで”記憶域プール”となっている名前だ。またNumberOfColumns は”auto”だと3固定になる。4台以上導入する時は数字入力しなければならない。
その際”TierClass”が”Unknown”になっているが、現時点で直す方法が無いし直す必要もないのでそういうものとして作業を進めていい。
これを”Get-StorageTier”で見ると、
”Unknown”が2つ並び、なおかつサイズもゼロなので心臓に悪いがここではこういうものである。
②-4 できあがり
ここからは一気に作れる。
$SSDTier = New-StorageTier -StoragePoolFriendlyName '記憶域' -FriendlyName 'SSD' -MediaType SSD -ResiliencySettingName Mirror -ProvisioningType Fixed
ならびに
$HDDTier = New-StorageTier -StoragePoolFriendlyName '記憶域' -FriendlyName 'HDD' -MediaType HDD -ResiliencySettingName Parity -ProvisioningType Fixed -NumberOfColumns 4
このコピペでSSDとHDDの使用割合が決まる。これを省略してしまうと一覧上部のストレージだけ満杯で下の方が10%とかの使用率の歪な固まりが出来てしまう。
前回「-ProvisioningType Fixed」を書かなかったが、シンプロビジョニング(大きく仮想ストレージをつくって実際容量が足りなくなったらHDDを足す)すると処理がめんどくさそうなので固定させる。シンプロビジョニングしたいなら「-ProvisioningType Thin」と書くことになるが、その後の操作を私は知らない。
最後に、
Get-StoragePool 記憶域 | New-Volume -FriendlyName '記憶' -WriteCacheSize 16GB -StorageTiers $SSDTier,$HDDTier -StorageTierSizes 472601441894,21604220699443
の入力で完成だ。
今回なぜかnew-virtualdiskでエラーが発生しnew-volumeで作成できた。
ストレージのサイズが実数になっているが、これは”Get-StoragePool 記憶域 | Get-PhysicalDisk | Format-Table MediaType,Size”で情報を見れば1バイト単位で容量が見られるので、あとは電卓で計算すればいい。これを「8001563222016*4*0.9」や「28.8TB」のような打ち方をすると代数が云々とエラメが出る。実数を入れた方がいい。
できあがったものを”Get-StorageTier”で見ると、
ちゃんとHDDとSSDが階層化”Capacity””Performance”に分類されており、SSDはミラーになっているので使用率が50%、HDDは3/4の75%の使用率になっている。
ちなみにこの仮想ストレージのベンチは
こんな感じで、SATAのSSDが読み書き500MB/sなことを考えるとキャッシュがあるうちは裕福な暮らしができるようだ。
実際のSSD→HDDの書き込みにはwritecachesizeにため込んでからまとめて書き込みとなるらしい。こいつが本当に16GBになっているか確認するためには、
Get-VirtualDisk | Select-Object FriendlyName,WriteCacheSize
で名前と一緒に表示してくれる。16GBなら17179869184と出ているはずだ。
writecachesizeを書かなかった場合でもとりあえずSSD1台につき1GB確保してくれるらしいが、結局HDDパリティの書き込み速度が死んでいるのでどれだけキャッシュを大きくしても行き詰る。なので16GBより大きくしても意味がないと言われているようだ。
余談だが、データの引っ越しが”終わった”のちに仮想ストレージの使用率が100%、80MB/s~160MB/sで読み書きがずっと行われていて、SSDの温度が40℃超えの状態になっている。おそらくSSD→HDDにデータの移行が行われているのだろう。
つまり見た目で処理が終わったからと言ってファイルアクセス以外のディスク自体の操作は止めた方が良い。「タスクマネージャ」でMicrosoft Storage Space Deviceの使用率が0%まで落ちた時が本当のデータ移行が終わったタイミングだろうから、ディスクの操作はそれから始めるほうが安全だ。
エクスプローラがクラッシュするだけでは済まない。
データが本当に消えるのだ。
空になったパーティションを見たくなかったら迂闊な操作はするべきではない。