Windows机器在线扩容系统盘大小后如何批量扩展卷实现多台机器自动扩容C分区(windows在线是什么意思)
 南窗  分类:IT技术  人气:167  回帖:0  发布于1年前 收藏

首先,强调一个概念,在线扩容系统盘扩的是容量,不是分区,对云平台来说,分区不可控,容量可控,扩容能产品化,扩展分区需要自己来。

https://cloud.tencent.com/document/product/213/34068#.E6.9F.A5.E7.9C.8B.E5.AE.9E.E4.BE.8B-cloudinit-.E9.85.8D.E7.BD.AE

这篇文档需要修改:

即便cloudbase-init没问题,也需要重启机器cloudbase-init才会自动扩展卷把C分区后面的空白空间加到C分区,前提条件是C分区和空白空间之间无其他分区干扰。注意:并不会对数据盘起作用。

如果C分区和空白空间之间无其他分区、且不想重启,那就手动执行powershell命令:

$DiskOps="@
select disk 0
select volume c
extend
exit
@"

$DiskOps | diskpart.exe | Out-Null

在线扩容系统盘扩的是容量,扩展分区是文件系统级别的,没法承诺,为什么没法承诺?比如有的客户C分区后面有个隐藏的recovery分区,阻挡在C分区和后面新增的空白空间之间,这种就相对麻烦一些,重启机器后cloudbase-init也处理不了这种,就得评估下是否需要那个隐藏的recovery分区,不需要的话手动删掉,然后再对C分区做扩展卷操作

参考这篇文档描述:https://woshub.com/extend-volume-blocked-by-windows-recovery-partition/

站长素材网改进点:文档写得不细致,细节没有描述到位

另外,有时候cloudbase-init有问题,重启了也不一定实现扩展卷,比如禁止了cloudbase-init服务开机启动或者安装了第三方安全软件影响了cloudbase-init的功能(我自己有台2008R2就是这样,安装了360杀毒和360安全卫士,影响了重启机器后cloudbase-init自动扩展卷)。

要么手动扩展卷,要么执行命令扩展卷,相对保险一些(都是人为)。

总有各种特殊情况,人为check是必要的。

命令扩展卷的好处就是可以通过WinRM批量操作,可参考我这篇文档https://cloud.tencent.com/developer/article/1907025

批量扩展卷的具体实现,我这里录了个视频方便大家参考(录屏里的密码已改、机器已销毁):https://cloud.tencent.com/developer/video/76337

下面先图文说下过程:

对多台机器扩容系统盘大小,完事后就可以给多台机器下发扩展卷的指令了。

https://console.cloud.tencent.com/api/explorer?Product=cvm&Version=2017-03-12&Action=ResizeInstanceDisks

ResizeDisk接口目前是扩容弹性云盘的(所谓弹性,就是可以从cvm上解绑下来的云盘),系统盘因为无法解绑,所以此接口不适用扩容系统盘。

ResizeInstanceDisks接口目前是扩容非弹性云盘的,包括云系统盘(早年一些云盘机器,数据盘跟cvm一起买的,是无法解绑的,叫做非弹性云盘;当然,云系统盘自然是非弹性云盘)。

上图圈出的地方,文档开头那里描述错误,ResizeInstanceDisk接口是支持扩容云系统盘和非弹性云数据盘的。

接口只能一台一台操作,api explorer操作的话只需要选定地域后指定3个参数(cvm实例id、系统盘目标大小、在线扩容)

当然,如果写代码的话,搞个简单的循环,就可以实现多台机器的操作(如果系统盘目标大小一样,地域一样,只是调系统盘大小,意味着每次只需要换cvm intanceid,也就是说搞个记录cvm intanceid的数组,每次传数组的一个值来调用接口即可)

在线扩容一般没有风险,可以先拿一台机器做个验证(注意提交扩容后等一会儿,然后重新扫描磁盘才会看到C分区后面的空间,一些高版本系统可能会自动刷出来,无需重新扫描磁盘,但最好操作一下)

在多个实例全部扩容系统盘后,就可以批量扩展卷实现多台机器自动扩容C分区了

找一台机器做客户端下发命令,用的是Windows自己的WinRM,端口是5985

首先,在客户端上执行netstat -ato|findstr :5985看下端口在不在,不在的话执行如下代码:

reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WinRM" /f 2>&1 >$null
winrm quickconfig -q 2>&1 > $null
winrm quickconfig -q -force 2>&1 > $null
restart-service winrm 2>&1 > $null
#Set-Item WSMan:localhost\client\trustedhosts -value * -force 2>&1 > $null
winrm set winrm/config/client '@{TrustedHosts="*"}' 2>&1 > $null
netstat -ato|findstr :5985
$Username = 'Administrator'
$Password = '密码'

$pass = ConvertTo-SecureString -AsPlainText $Password -Force

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass

#多台机器的内网ip
$iparray = @('172.16.4.4','172.16.4.14','172.16.4.2','172.16.4.5','172.16.4.12')

#循环下发扩展卷的命令
for($i=0;$i -lt $iparray.Length;$i++){

"`$iparray["+$i+"]="+$iparray[$i]+"`n"

#扩展卷的代码
Invoke-Command -ComputerName $iparray[$i] -Credential $Cred -ScriptBlock {
$DiskOps="@
select disk 0
select volume c
extend
exit
@";
$DiskOps | diskpart.exe | Out-Null;
}

}

注意:cloudbase-init的extend_volume只是针对系统盘的。前面介绍的都是扩展系统盘C分区,如果是扩展数据盘的最后一个分区,可以参考我这篇文档:https://cloud.tencent.com/developer/article/1885062

讨论这个帖子(0)垃圾回帖将一律封号处理……