Windows2012R2存储池硬盘故障更换硬盘

自从了解到Windows2012支持块去重和存储池以后,文件共享服务器装2012R2成了首选
有台N36L跑Windows2012R2,3Tx4做的存储池,里面虚拟磁盘做的mirror方式,所以允许损坏单侧的一半硬盘
刚好发现在拷贝数据的时候忽然变慢,用HDTune查看了一下,发现有坏道,于是换了块硬盘
由于之前在虚拟机下测试过,也在Win8.1下实际应用过更换硬盘,所以就想当然的关机,换硬盘,开机
在进入系统之后,手工添加新增的硬盘到存储池后,发现并没有自动恢复存储池
于是乎搜索了一番(如果是Win8.1它在添加完磁盘后会自动开始重组的)
经过若干个小时的数据备份(因为怕误操作导致数据丢失)
以下就是命令行的恢复方法

输入如下命令列出所有物理磁盘

1
2
3
4
5
6
7
8
9
Get-PhysicalDisk |? { $_.ObjectId.Contains( $PhysicalDiskGUID ) }
FriendlyName CanPool OperationalStatus HealthStatus Usage
------------ ------- ----------------- ------------ -----
PhysicalDisk3 False OK Healthy Auto-Select
PhysicalDisk1 False OK Healthy Auto-Select
PhysicalDisk0 False OK Healthy Auto-Select
PhysicalDisk4 False OK Healthy Auto-Select
PhysicalDisk2 False OK Healthy Auto-Select
PhysicalDisk-1 False Lost Communication Warning Retired

PhysicalDisk-1就是系统记录的更换下去的旧硬盘,显示状态为Lost Communication,我们需要输入以下命令让它“退休”

1
Set-PhysicalDisk -FriendlyName "PhysicalDisk-1" -Usage Retired

接着输入命令重组和坏硬盘相关的虚拟磁盘,我的虚拟磁盘命为vd1,你需要替换为你自己的虚拟磁盘名

1
Repair-VirtualDisk -FriendlyName vd1

之后得到如下恢复进度

1
2
3
4
5
6
7
Repair-VirtualDisk -FriendlyName vd1
已完成 1/2
[oooooooooooooooooooooooooooooooooooooooooooooooooooooo
剩余 00:00:02。
Repairing virtual disk
Running
[ooooooo

如果不小心这个窗口关闭了,则输入如下命令是查看存储池任务进度

1
Get-StorageJob

得到如下进度

1
2
3
4
5
6
Get-StorageJob

Name ElapsedTime JobState PercentComplete IsBackgroundTask
---- ----------- -------- --------------- ----------------
Repair 02:51:18 Running 66 False
Regeneration 00:00:00 Running 66 True

最后输入以下命令彻底删除损坏的硬盘

1
Remove-PhysicalDisk -FriendlyName "PhysicalDisk-1"

在后续的使用过程中,发现修复完的虚拟磁盘在重新启动计算机之后没有自动挂载,另外如果是从其他计算机导入过来的存储池也不会自动挂载,需要自动挂载需要输入以下命令
查看虚拟磁盘状态

1
2
3
4
5
6
Get-VirtualDisk

FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
------------ ------------------- ----------------- ------------ -------------- ----
vd1 Mirror OK Healthy True 5.0 TB

可以看到,此时vd1这块虚拟磁盘的IsManualAttach参数为True,将虚拟磁盘vd1变更为自动挂载,输入以下命令
注:必须以管理员身份运行PowerShell

1
Set-VirtualDisk -FriendlyName vd1 -IsManualAttach $False

如果有多个虚拟磁盘想同时开启自动挂载,则可以输入以下命令

1
Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True} | Set-VirtualDisk –IsManualAttach $False