为虚拟磁盘 添加/删除物理磁盘

Add-Physicaldisk     
此命令用于将指定的物理磁盘添加到虚拟磁盘    
在存储池一节已经介绍过将物理磁盘加入存储池的用法,    
在这里将介绍在虚拟磁盘上的用法    
在正式介绍命令用法之前先回答 在Get-StoragePool,Get-VirtualDisk,New-VirtualDisk    
三节中的提问    
要获取未被虚拟磁盘使用的物理磁盘,你必须学会灵活的使用管道命令    
$pool_pd = @(Get-StoragePool -FriendlyName pool_name |Get-PhysicalDisk)    
$vd_pd= @(Get-VirtualDisk -FriendlyName vd_name |Get-PhysicalDisk)    
上面的两个命令分别 获取存储池的成员物理磁盘以及虚拟磁盘的成员物理磁盘    
最为简单(也是最笨)的做法就是人工对比两个变量(其实是数组)的差异    
(PowerShell 不强制要求定义变量的类型,当变量中有多个对象时将自动转化为数组,    
个人建议:如果在定义变量之前可预期变量中对象数量的时,尽可能定义为数组     
即 $ Array= @( ) 这种形式 )    
最为简洁高效的方法就是让系统自动对比出存储池与虚拟磁盘的成员物理磁盘    
脚本如下    
代码开始-----------------------------------------------------------------------------------

$pool_name = "ssdpool"  #虚拟磁盘所在池友好名称   
$vd_name = "ssd_vd"     #虚拟磁盘友好名称

$pool_pd = @((Get-StoragePool -FriendlyName $pool_name |Get-PhysicalDisk).deviceid)   
$vd_pd= ((Get-VirtualDisk -FriendlyName $vd_name |Get-PhysicalDisk).deviceid)    
$vd_pdco=$vd_pd.count    
$pool_pdco=$pool_pd.count    
$nosame = @()    
$sam = @()

foreach ($11 in $pool_pd)                

{                     
   if ($vd_pd -ccontains $11)    
      {$sam += Get-PhysicalDisk|where {$_.DeviceId -eq "$11"}    
           }    
          else    
             { $nosame += Get-PhysicalDisk|where {$_.DeviceId -eq "$11"}    
               }    
                       } 

  Write-Host "$pool_name${$pool_name$}中物理磁盘数量:$pool_pdco"

  write-host "$vd_name${$vd_name}使用物理磁盘数量:$vd_pdco"

if ($pool_pdco -eq $vd_pdco )   
   {    
 write-host "虚拟磁盘已经使用池中全部物理磁盘"    
        }    
    else    
        {

         Write-Host "池中下列物理磁盘尚未被虚拟磁盘使用"

         $nosame |ft -AutoSize   
            }

代码结束-----------------------------------------------------------------------------------   
对于上面的脚本也是存在问题 如果你在正确的使用下脚本的结果是正确的,    
如果你试图用一个不存在的池以及虚拟磁盘让脚本进行判断,结果一定是错误的    
正常情况下应如下图    

借助此脚本你可以轻易的以对象的方式访问未被使用的物理磁盘以及已经使用的物理磁盘    
如果你明白了上面脚本作用,那么为虚拟磁盘添加物理磁盘的必要条件你已经知道了    
下面将实际演示使用Add-Physicaldisk 命令向名为ssd_vd的虚拟磁盘添加物理磁盘    
本次演示将全部池中未使用的物理磁盘添加到虚拟磁盘中    
在本次演示中使用上面提供的脚本中的部分变量进行操作    
(如果你只是添加单一物理磁盘,也可以不使用脚本中变量)    
输入下面的命令即可    
Add-PhysicalDisk -VirtualDiskFriendlyName ssd_vd -PhysicalDisks $nosame    
(上面的命令中指定了虚拟磁盘名称以及将要添加进虚拟磁盘的物理磁盘    
$nosame 这个数组则是在脚本中由系统对比出来的尚未在虚拟磁盘使用中的物理磁盘)

添加完成后再次运行此脚本如下图   

提问:请尝试自行理解脚本作用以及脚本中以下变量    
$pool_pd ,$vd_pd,$vd_pdco,$pool_pdco,$nosame ,$sam     
温馨提示:请合理的规划物理磁盘所承载的虚拟磁盘,以免出现性能瓶颈

Remove-Physicaldisk     
此命令用于向虚拟磁盘以及存储池中删除新物理磁盘    
在删除虚拟磁盘时候会有诸多限制,最为直接的限制就是    
当池中没有任何闲置的物理磁盘时(即全部物理磁盘都承载虚拟磁盘)    
除非你向池中加入新的物理磁盘,否则你将不能删除任何承载虚拟磁盘的    
物理磁盘。处于简单布局下的虚拟磁盘无法删除成员物理磁盘    
(即使成员物理磁盘同时承担多个虚拟磁盘)

下面将演示删除虚拟磁盘的成员物理磁盘   
环境:    
存储池 SSDpool 成员物理磁盘数量9    
虚拟磁盘ssd_vd  成员物理磁盘数量9;固定配置;容量20GB;磁盘布局parity    
环境如下图所示    
存储池    

存储池物理磁盘    

虚拟磁盘状态    
(由于命令过长截图不便 下面附上命令,截图中将省略部分命令)    
Get-VirtualDisk -FriendlyName ssd_vd |Select-Object FriendlyName,`    
ResiliencySettingName,ProvisioningType,size |ft –AutoSize    

对于检查虚拟磁盘使用了那些物磁盘还是用上一节的脚本  

---本文档由联科教育(http://www.iLync.cn)田梦博 原创提供,如有问题请咨询我们的专家团队!---