Текст:
По вопросу как привязать диск в конфигурации виртуальной машины к букве диска в ОС Windows написано много и запутано. Имеется два класса решений: красивые но работающие только на ВМ с одним SCSI контроллером и универсальные - многострочные скрипты, которым нужны права и сетевые доступы и к гостевой ОС и к vcenter.
Попробуем прояснить ситуацию и создадим тестовую ВМ scsitest, с четырьмя SCSI контроллерами на борту. Посмотрим как это выглядит в powercli:
$vms=get-vm scsitest $ctrl=$vms|Get-ScsiController $ctrl|%{ $_.name+';'+$_.type+';'+$_.extensiondata.slotinfo.PciSlotNumber+';'+$_.key }
вывод получим такой:
SCSI controller 0;VirtualLsiLogicSAS;160;1000 SCSI controller 1;ParaVirtual;224;1001 SCSI controller 2;ParaVirtual;256;1002 SCSI controller 3;ParaVirtual;1184;1003
PCI slot number 160,224,256,1184 - мы попытаемся привязать к Storage Controller в гостевой ОС, а Key 1000,1001,1002,1003 - пригодится нам для привязки дисков к контроллеру в конфигурации ВМ.
$disk=$vms|Get-HardDisk$disk|%{ $_.name+';'+$_.capacitygb+';'+$_.extensiondata.controllerkey }
вывод:
Hard disk 1;40;1000 Hard disk 2;10;1001 Hard disk 3;11;1001 Hard disk 4;20;1002 Hard disk 5;21;1002 Hard disk 6;30;1003 Hard disk 7;31;1003
! Размеры дисков 10,11,20,21,30,31 ГБ для контроля сделаны по SCSI bus:target, то есть 10 ГБ - SCSI 1:0, 11 ГБ - SCSI 1:1 и т.д.
Со стороны VMWare получается следующая картина (склеено вручную, чтобы не портить наглядность сложным скриптом):
SCSI controller 0;VirtualLsiLogicSAS;160;1000
Hard disk 1;40;1000
SCSI controller 1;ParaVirtual;224;1001
Hard disk 2;10;1001
Hard disk 3;11;1001
SCSI controller 2;ParaVirtual;256;1002
Hard disk 4;20;1002
Hard disk 5;21;1002
SCSI controller 3;ParaVirtual;1184;1003
Hard disk 6;30;1003
Hard disk 7;31;1003
Посмотрим как это выглядит в Windows, единственный удобный способ через Disk Management (можно конечно данные вытянуть с реестра, но опять таки наглядность сильно пострадает)
в поле Location указаны как раз те самые PCI slot number полученные в VMWare, пройдемся вручную по всем дискам:
Disk 0 Location 160 TargetID 0 - 40GB - C:
Disk 1 Location 161 TargetID 0 - 30GB - E:
Disk 2 Location 161 TargetID 1 - 31GB - F:
Disk 3 Location 224 TargetID 0 - 10GB - G:
Disk 4 Location 224 TargetID 1 - 11GB - H:
Disk 5 Location 256 TargetID 0 - 20GB - I:
Disk 6 Location 256 TargetID 1 - 21GB - J:
Все красиво кроме Location 161 которое в VMWare выглядит как PCI slot number 1184 (1184-161=1023) - похоже VMWare и MS не договорились как интерпретировать DWORD данные, запомним этот ньюанс, идентифицировать диски он не помешает. Внутри Location мы можем полагаться на Target ID - в конфигурации ВМ и гостевой ОС они совпадают.
Сведем все воедино:
SCSI controller 0;VirtualLsiLogicSAS;160;1000
Hard disk 1;40;1000 - Disk 0 Location 160 TargetID 0 - 40GB - C:
SCSI controller 1;ParaVirtual;224;1001
Hard disk 2;10;1001 - Disk 3 Location 224 TargetID 0 - 10GB - G:
Hard disk 3;11;1001 - Disk 4 Location 224 TargetID 1 - 11GB - H:
SCSI controller 2;ParaVirtual;256;1002
Hard disk 4;20;1002 - Disk 5 Location 256 TargetID 0 - 20GB - I:
Hard disk 5;21;1002 - Disk 6 Location 256 TargetID 1 - 21GB - J:
SCSI controller 3;ParaVirtual;1184;1003
Hard disk 6;30;1003 - Disk 1 Location 161 TargetID 0 - 30GB - E:
Hard disk 7;31;1003 - Disk 2 Location 161 TargetID 1 - 31GB - F:
Как видим по размерам дисков - все совпало.
Имея такую картинку перед глазами нет сложности понять какой физический диск ВМ соответствует букве диска в гостевой ОС.
Вот тут наиболее удачная, на мой взгляд, попытка написать скрипт автоматизирующий вышеприведенные операции, как написал автор "I searched long time to solve this problem, but I couldn’t find an easy solution for this."
Добавить комментарий.