none
powershell 初始化刚挂载磁盘 RRS feed

  • 问题

  • 请问各位大神,在ASM里面,如何用powershell 对一块刚挂载的磁盘进行初始化,本人正在为一个客户编写一个在windowsVM、LinuxVM下挂载、初始化磁盘的脚本,目前进度,WindowsVM的脚本加载已经完成,但初始化的命令未能编写,LinuxVM的脚本还在研究中,望各位大神指点。
    2017年1月20日 7:28

答案

  • Hi Tank,

     

    这部分脚本代码是来自这篇文档:Use PowerShell to Initialize Raw Disks and to Partition and Format Volumes,文档中对于该脚本已给予了详细解释。

     

    我给您提供的脚本适用于一次处理多个磁盘初始化操作,若您只需要一次初始化一个磁盘可以直接使用文档提供的脚本。

    此处我再稍作解释:

    > $disks = Get-Disk |   Where partitionstyle -eq 'raw' | sort number
    获取未初始化的数据磁盘,未初始化的数据磁盘 partitionstyle 为 raw。
    
    > $letters = 70..89 | ForEach-Object { ([char]$_) }
    Letters 为 F~Y的字母,用于初始化磁盘驱动器的名称
    
    >foreach($d in $disks) {… …}
    循环处理各个未初始化的磁盘卷
    
    >Initialize-Disk -PartitionStyle MBR -PassThru |
    初始化磁盘,分区类型选择为 MBR,返回磁盘对象用于管道操作
    
    >New-Partition -UseMaximumSize -DriveLetter $driveLetter |
    对初始化后的磁盘进行分区,指定卷的名称
    
    >Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force 
    格式化该卷,文件系统使用 NTFS,根据提供的$labels设置改卷名称

    另外在执行该脚本时需要先远程到您的虚拟机,该步骤此前没有给您写在脚本中,此处给您补上,完整脚本如下:

    $securePassword = ConvertTo-SecureString <your_password_for_remote_vm> -AsPlainText -force
    $cred = New-Object System.Management.Automation.PsCredential(<your_vm_name\your_user_name>,$securePassword)
    $SessionOption = New-PSSessionOption -SkipCACheck
    $Session = New-PSSession -ComputerName <your_vmname.chinacloudapp.cn > -Credential $cred -Port <your_powershell_endpoint> -UseSSL -SessionOption $SessionOption
     
    Invoke-command -session $Session -ScriptBlock {
        $disks = Get-Disk |   Where partitionstyle -eq 'raw' | sort number
        $letters = 70..89 | ForEach-Object { ([char]$_) }
        $count = 0
        $labels = @("data1","data2")    
        foreach($d in $disks) {
            $driveLetter = $letters[$count].ToString()
            $d |
            Initialize-Disk -PartitionStyle MBR -PassThru |
            New-Partition -UseMaximumSize -DriveLetter $driveLetter |
            Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force 
            $count++
        }
    }

    我已给您测试过,脚本是可行的:

    执行脚本前,在我的虚拟机中有两个未初始化的磁盘:

    脚本执行后,回显信息显示磁盘已初始化并分区:

    远程到虚拟机中,可以看到磁盘已被初始化:


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com




    2017年1月23日 7:05
    版主

全部回复

  • Hi Tank,

     

    > WindowsVM的脚本加载已经完成但初始化的命令未能编写

     

    以下脚本可以帮助您完成windows 附加新磁盘的初始化操作:

     

    $disks = Get-Disk |   Where partitionstyle -eq 'raw' | sort number
    
    $letters = 70..89 | ForEach-Object { ([char]$_) }
    $count = 0
    $labels = @("data1","data2")
    
    foreach($d in $disks) {
        $driveLetter = $letters[$count].ToString()
        $d | 
        Initialize-Disk -PartitionStyle MBR -PassThru |
        New-Partition -UseMaximumSize -DriveLetter $driveLetter |
        Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] `
            -Confirm:$false -Force 
        $count++
    }
     

    附加数据磁盘的脚本供您参考: PowerShell + Azure Automation : Add Disk to VM

     

    > LinuxVM的脚本还在研究中

     

    关于Linux 如何附加磁盘请参考:如何将数据磁盘附加到 Linux 虚拟机

     

    希望对您有帮助,如您有任何其他疑问,欢迎继续发帖提问。


    MSDN 社区技术支持&lt;br/&gt; 如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 &lt;a href=&quot;mailto:MSDNFSF@microsoft.com&quot;&gt;MSDNFSF@microsoft.com&lt;/a&gt;。

    2017年1月20日 10:55
    版主
  • Hi,David,首先感谢你的,其实这段代码好似曾经在Azure.cn里面有,但只是我按照官网上面的操作,暂时无法成功,不过其实我对这段代码没读明白,能否请你帮忙解释解释,万分感谢
    2017年1月21日 16:28
  • Hi Tank,

     

    这部分脚本代码是来自这篇文档:Use PowerShell to Initialize Raw Disks and to Partition and Format Volumes,文档中对于该脚本已给予了详细解释。

     

    我给您提供的脚本适用于一次处理多个磁盘初始化操作,若您只需要一次初始化一个磁盘可以直接使用文档提供的脚本。

    此处我再稍作解释:

    > $disks = Get-Disk |   Where partitionstyle -eq 'raw' | sort number
    获取未初始化的数据磁盘,未初始化的数据磁盘 partitionstyle 为 raw。
    
    > $letters = 70..89 | ForEach-Object { ([char]$_) }
    Letters 为 F~Y的字母,用于初始化磁盘驱动器的名称
    
    >foreach($d in $disks) {… …}
    循环处理各个未初始化的磁盘卷
    
    >Initialize-Disk -PartitionStyle MBR -PassThru |
    初始化磁盘,分区类型选择为 MBR,返回磁盘对象用于管道操作
    
    >New-Partition -UseMaximumSize -DriveLetter $driveLetter |
    对初始化后的磁盘进行分区,指定卷的名称
    
    >Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force 
    格式化该卷,文件系统使用 NTFS,根据提供的$labels设置改卷名称

    另外在执行该脚本时需要先远程到您的虚拟机,该步骤此前没有给您写在脚本中,此处给您补上,完整脚本如下:

    $securePassword = ConvertTo-SecureString <your_password_for_remote_vm> -AsPlainText -force
    $cred = New-Object System.Management.Automation.PsCredential(<your_vm_name\your_user_name>,$securePassword)
    $SessionOption = New-PSSessionOption -SkipCACheck
    $Session = New-PSSession -ComputerName <your_vmname.chinacloudapp.cn > -Credential $cred -Port <your_powershell_endpoint> -UseSSL -SessionOption $SessionOption
     
    Invoke-command -session $Session -ScriptBlock {
        $disks = Get-Disk |   Where partitionstyle -eq 'raw' | sort number
        $letters = 70..89 | ForEach-Object { ([char]$_) }
        $count = 0
        $labels = @("data1","data2")    
        foreach($d in $disks) {
            $driveLetter = $letters[$count].ToString()
            $d |
            Initialize-Disk -PartitionStyle MBR -PassThru |
            New-Partition -UseMaximumSize -DriveLetter $driveLetter |
            Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force 
            $count++
        }
    }

    我已给您测试过,脚本是可行的:

    执行脚本前,在我的虚拟机中有两个未初始化的磁盘:

    脚本执行后,回显信息显示磁盘已初始化并分区:

    远程到虚拟机中,可以看到磁盘已被初始化:


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com




    2017年1月23日 7:05
    版主