gpt4 book ai didi

Azure DSC 扩展在 Windows VM 上错误地装载数据磁盘

转载 作者:行者123 更新时间:2023-12-03 05:21:05 25 4
gpt4 key购买 nike

我正在使用 Terraform 来配置 Azure VM。除了用于安装数据磁盘的 Azure DSC 扩展之外,一切似乎都工作正常。我向 DSC 提供以下详细信息,以将两个数据磁盘安装到虚拟机。

{"分配单元大小":"4",“驱动器号”:“E”,“标签”:“二进制文件”,"缓存":"无",“disk_size_gb”:“32”,"伦":"0","managed_disk_type":"标准SSD_LRS",“write_accelerator_enabled”:“假”}

{"分配单元大小":"64",“驱动器号”:“F”,"标签":"数据","缓存":"只读",“disk_size_gb”:“256”,"伦":"1","managed_disk_type":"标准SSD_LRS",“write_accelerator_enabled”:“假”}

但是,如果我在运行 DSC 后检查虚拟机上的磁盘,32GB 磁盘将获得驱动器号 F: 标签 数据、分配单元 64,其中提供256GB数据盘。

data disks

如果我有两个以上的数据磁盘,则 DSC 会随机安装它们,并提供其他磁盘的详细信息。

下面是用于配置 DSC 扩展的 terraform 代码片段,

resource azurerm_virtual_machine_extension "vm_extention" {
lifecycle {
ignore_changes = [ settings, protected_settings ]
}
name = "DesireStateConfiguration"
virtual_machine_id = var.vm_id
publisher = "Microsoft.Powershell"
type = "DSC"
type_handler_version = "2.80"

auto_upgrade_minor_version = false
settings = <<SETTINGS
{
"wmfVersion" : "latest",
"configuration": {
"url" : "${var.DSC_config.url}",
"script" : "${var.DSC_config.script}",
"function" : "${var.DSC_config.function}"
},

"configurationArguments": {
"DataDisks" : ${jsonencode( var.disk_configurations )},
"mountDisks" : ${var.mountDisks}
}
}
SETTINGS
protected_settings = <<PROTECTED_SETTINGS
{
"configurationUrlSasToken" : "${var.sas_token}"
}
PROTECTED_SETTINGS
}

仅供引用:如果我检查 terraform 状态文件,它会在我输入 DSC 时显示正确的信息,并且在我登录虚拟机检查磁盘安装详细信息之前似乎没有任何问题。

更新:

我还注意到当 LUN 编号未在门户上按顺序显示时会发生此问题 screenshot

我们使用磁盘编号来获取磁盘 ID,以传递给 DSC 脚本以进行磁盘安装,如下所示。

            foreach( $disk in $disks )
{
$lun = [int]$disk.Lun
$query = "SELECT Index FROM Win32_DiskDrive WHERE InterfaceType='SCSI' AND SCSILogicalUnit='" + $lun + "'"
$diskId = ( Get-CimInstance -Query $query ).Index
$partitionStyle = ( Get-Disk -Number $diskId -ErrorAction Stop ).PartitionStyle

if ( $partitionStyle -ieq "RAW" )
{

WaitForDisk "LUN_$lun"
{
DiskId = [uint32]$diskId
RetryIntervalSec = 20
RetryCount = 7
}
Disk "LUN_$lun"
{
DriveLetter = $disk.DriveLetter
DiskId = [uint32]$diskId
FSLabel = $disk.Label
AllocationUnitSize = [float]$disk.AllocationUnitSize
DependsOn = "[WaitForDisk]LUN_$lun"
}
} else { Write-Output "Disk is already mounted" }
}

如果 LUN 编号在门户上显示的顺序正确,则上述脚本可以正常工作并按预期挂载磁盘。我正在使用 azurerm_virtual_machine_data_disk_attachment 挂载数据磁盘,但找不到任何方法来控制 LUN 排序。

最佳答案

我设法使用磁盘 UniqueId 而不是磁盘编号使其正常工作。以下是更新后的代码

 foreach( $disk in $disks )
{
$lun = [int]$disk.Lun
$DiskInfo = Get-Disk | Where Location -Like "*LUN $LUN"
$DiskId = $DiskInfo.UniqueId
$partitionStyle = $DiskInfo.PartitionStyle

if ( $partitionStyle -ieq "RAW" )
{
WaitForDisk "LUN_$lun"
{
DiskId = $DiskId
DiskIdType = 'UniqueId'
RetryIntervalSec = 20
RetryCount = 7
}
Disk "LUN_$lun"
{
DriveLetter = $disk.DriveLetter
DiskId = $DiskId
DiskIdType = 'UniqueId'
FSLabel = $disk.Label
AllocationUnitSize = [float]$disk.AllocationUnitSize
DependsOn = "[WaitForDisk]LUN_$lun"
}
} else { Write-Output "Disk is already mounted" }
}

关于Azure DSC 扩展在 Windows VM 上错误地装载数据磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72382235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com