Disclaimer: все дальнейшие рассуждения и действия могут нарушать лицензионные соглашения правообладателей. Любое использование нижеследующих рекомендаций должно подтверждаться наличием у вас прав на лицензии. Все действия выполняются на свой страх и риск.
Время от времени серверы устаревают, а на замену им приходит новое оборудование с новыми процессорами.
Для абстрагирования vCPU от физического процессора от оборудования в VMware vSphere много лет развивается технология маскирования флагов процессора:
Обычно, технологии защиты ключей лицензий, разрешенные к использованию в виртуальных средах, используют привязки к:
- BIOS/UEFI;
- операционной системе;
- имени сервера/ПК;
- идентификаторам либо серийным номерам жестких дисков;
- MAC-адресам сетевых карт;
- CPUID, описывающему имя, семейство и модель процессора, доступные SIMD-инструкции.
В соответствии с этим мы можем использовать фиксацию части параметров.
Для фиксации UUID BIOS можно отредактировать VMX-файл:
Также возможны и более хардкорные модификации BIOS/UEFI. Получить данные можно получить через команду wmic bios.
Для привязки по MAC-адресу мы фиксируем адрес с физического сервера лицензий, либо генерируем его сами до получения лицензий. Адрес можно указать в настройках сетевого адаптера либо прописать в VMX-файле:
Parameter |
Value |
ethernetX.addressType |
static |
ethernetX.address |
MAC_address_of_the_virtual_NIC |
В большинстве случаев получается привязать MAC к выключенному адаптеру либо подключенному в пустую виртуальную сеть.
Для сохранения CPUID необходимо собрать следующую информацию:
- EVC/поколение ЦПУ виртуальной машины в vSphere.
- Поколение(CPU-Z), название, id и модель процессора в операционной системе (wmic cpu get caption, name, processorid; в Linux /proc/cpuinfo).
После этого в конфигурации выключенной виртуальной машины (vHW>=14) устанавливается нужный уровень Per-VM EVC, при необходимости прописываются в VMX-файл прочие параметры маскинга CPUID (*в примере левые параметры):
|
featMask.vm.cpuid.Intel = “Val:1” featMask.vm.cpuid.FAMILY = “Val:6” featMask.vm.cpuid.MODEL = “Val:0x4f” featMask.vm.cpuid.STEPPING = “Val:0” featMask.vm.cpuid.NUMLEVELS = “Val:0xd” cpuid.brandstring = "Intel(R) Xeon(R) CPU E5-2643 v4 @ 3.40GHz" |
Примечание. При изменении vHW и/или обновлении ESXi версии BIOS/UEFI могут меняться. Изменение BIOS/UEFI, CPUID происходит по время выключения/включения (powercycle) виртуальной машины.
Всегда делайте копию виртуальной машины и VMX-файла перед правками!!!