Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Desktop
  • Начало работы
    • Все инструкции
      • Создать образ на основе рабочего стола
      • Создать образ Linux на основе ВМ Compute Cloud
      • Создать образ Windows
      • Удалить пользовательский образ
    • Посмотреть логи
    • Посмотреть операции с ресурсами сервиса
  • Управление доступом
  • Правила тарификации
  • Аудитные логи Cloud Desktop

В этой статье:

  • Предварительные требования
  • Установка и настройка образа Windows
  • Настройка образа для работы в Yandex Cloud
  • Установка облачного агента
  • Установка Cloudbase-Init
  • Завершение работы с образом
  • Добавление образа в Compute Cloud
  • Добавление образа в Cloud Desktop
  • Изменение размера загрузочного диска без Cloudbase-Init
  1. Пошаговые инструкции
  2. Образы
  3. Создать образ Windows

Создать образ на основе Windows

Статья создана
Yandex Cloud
Обновлена 7 мая 2025 г.
  • Предварительные требования
  • Установка и настройка образа Windows
  • Настройка образа для работы в Yandex Cloud
  • Установка облачного агента
  • Установка Cloudbase-Init
  • Завершение работы с образом
  • Добавление образа в Compute Cloud
  • Добавление образа в Cloud Desktop
  • Изменение размера загрузочного диска без Cloudbase-Init

В Cloud Desktop вы можете создавать рабочие столы из предустановленных системных образов или собственных пользовательских образов. Пользовательские образы могут быть с ОС Linux или Windows.

Образ Windows создается на базе вашего образа Windows с вашей лицензией. Перед установкой необходимо уточнить в Microsoft, подходит ли ваша лицензия для работы в облачных средах. При этом лицензионные отношения действуют только между вами как клиентом и Microsoft как вендором лицензии. Вы несете полную ответственность за соблюдение условий лицензирования Microsoft.

Примечание

Информация в этой статье не имеет юридической силы и носит ознакомительный характер.

Для создания образа в Cloud Desktop:

  1. Подготовьте оборудование.
  2. Установите и настройте образ Windows для ваших пользователей.
  3. Настройте образ Windows для работы в облаке.
  4. Установите облачный агент.
  5. (Опционально) Установите Cloudbase-Init.
  6. (Опционально) Генерализируйте образ.
  7. Добавьте образ в Compute Cloud.
  8. Создайте образ в Cloud Desktop.

Предварительные требованияПредварительные требования

Для работы в Cloud Desktop надо установить и настроить образ Windows через систему виртуализации QEMU.

Чтобы настроить образ, потребуются:

  • Компьютер с архитектурой процессора x86-64.

  • Операционная система Linux. При использовании других ОС:

    • Для macOS в качестве ускорителя QEMU можно использовать hvf.
    • Для Windows, чтобы работать с QEMU:
      • Включите поддержку виртуализации в BIOS/UEFI.
      • Активируйте поддержку Hyper-V. Для серверных ОС установите компонент Virtual Machine Platform.
      • Используйте ускоритель whpx.
  • Установочный образ Windows в формате ISO.

  • Набор драйверов virt-io для Windows.

Установка и настройка образа WindowsУстановка и настройка образа Windows

  1. На вашем компьютере создайте загрузочный диск с помощью команды:

    qemu-img create -f qcow2 image.qcow2 20480M
    

    Где:

    • image.qcow2 — имя загрузочного диска.

    • 20480M — размер загрузочного диска ОС в образе в мегабайтах.

      Примечание

      Рекомендуется указывать размер не менее 16384M. Иначе при установке или последующей настройке ОС на загрузочном диске может быть недостаточно места.

  2. Запустите виртуальную машину для установки и настройки Windows:

    qemu-kvm -cpu "qemu64,hv-relaxed,hv-vapic,hv-spinlocks=0x1fff,hv-time" -name win-image -device "virtio-net,netdev=user.0" -netdev user,id=user.0 -drive "file=image.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2" -drive "file=windows.iso,media=cdrom" -drive "file=virtio-win.iso,media=cdrom" -parallel none -smp "cpus=2" -boot "once=d" -machine "type=q35,accel=kvm" -vnc "0.0.0.0:85" -m "4096M" -nic "none" -device qemu-xhci -device usb-tablet
    

    Примечание

    Если вы настраиваете образ на macOS, замените type=q35,accel=kvm на type=q35,accel=hvf, для Windows — type=q35,accel=whpx.

    Если потребуется указать полный путь к файлу запуска QEMU, учитывайте, что название файла может отличаться для разных ОС и вариантов сборки QEMU. Наиболее распространенные имена файлов: qemu-x86_64, qemu-system-x86_64, qemu-system-x86_64w, qemu-gtk, qemu.

    Если ваша сборка QEMU не поддерживает графический режим управления виртуальной машиной, вы можете подключиться к ВМ по VNC на локальный порт tcp/5985 (localhost:5985). Для подключения используйте любой VNC-клиент, например RealVNC, Remmina или ultraVNC. В macOS можно использовать предустановленный VNC-клиент Общий экран.

  3. Установите Windows из образа ISO.

    При установке Windows в меню выбора диска для размещения ОС выберите Load driver для загрузки драйвера virtio-storage (viostor).

  4. После установки войдите в систему и установите virtio-драйверы из файла virtio-win-guest-tools.exe, расположенного на диске с драйверами virt-io.

  5. Проверьте, что в системе установлен сервис Подключение к удаленному рабочему столу (RDP).

  6. Настройте Windows для потребностей ваших пользователей.

Настройка образа для работы в Yandex CloudНастройка образа для работы в Yandex Cloud

  1. Запустите командную строку cmd от имени администратора.

  2. Активируйте serial console для загрузчика ОС:

    bcdedit /ems "{current}" on
    bcdedit /emssettings EMSPORT:2 EMSBAUDRATE:115200
    
  3. Отключите функции энергосбережения:

    powercfg -setactive "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
    powercfg -change -monitor-timeout-ac 0
    powercfg -change -standby-timeout-ac 0
    powercfg -change -hibernate-timeout-ac 0
    
  4. Запустите командную строку PowerShell от имени администратора.

  5. Для виртуализованных аппаратных часов установите формат времени UTC:

    #ps1
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" -Name "RealTimeIsUniversal" -Value 1 -Type DWord -Force
    
  6. Отключите автоназначение локальных адресов IPv4 для сетевых интерфейсов, которым не удалось назначить IP-адрес (APIPA):

    #ps1
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "IPAutoconfigurationEnabled" -Value 0 -Type DWord -Force
    
  7. Разрешите выключение ОС без активных пользовательских сессий:

    #ps1
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "ShutdownWithoutLogon" -Value 1
    
  8. Установите минимальное время показа сообщения о выключении ОС при наличии активных пользовательских процессов:

    #ps1
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name "ShutdownWarningDialogTimeout" -Value 1
    
  9. Отключите автоматическую оптимизацию дисков (дефрагментация/TRIM):

    #ps1
    Get-ScheduledTask -TaskName "ScheduledDefrag" | Disable-ScheduledTask
    
  10. Разрешите трафик ICMPv4 (если Windows Firewall не отключен):

    #ps1
    Get-NetFirewallRule -Name "vm-monitoring-icmpv4" | Enable-NetFirewallRule
    
  11. Разрешите подключение по RDP с обязательной аутентификацией пользователей при подключении:

    #ps1
    Get-CimInstance -ClassName Win32_TSGeneralSetting -Namespace root\cimv2\terminalservices | Invoke-CimMethod -MethodName SetUserAuthenticationRequired -Arguments @{ UserAuthenticationRequired = 1 }
    Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
    Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
    

Установка облачного агентаУстановка облачного агента

  1. Запустите командную строку PowerShell от имени администратора.

  2. Установите облачный агент:

    Invoke-WebRequest 'https://storage.yandexcloud.net/vdi-agent-internal/install.ps1' -OutFile "$($Env:temp)\install.ps1"
    cd $($Env:temp)
    Powershell.exe -ExecutionPolicy Bypass -File .\install.ps1
    mkdir "C:\Program Files\Yandex.Cloud\Cloud Desktop\"
    cp .\desktopagentInstall\desktopagent.exe 'C:\Program Files\Yandex.Cloud\Cloud Desktop\'
    
    # Create Desktop Agent service
    $ServiceName = "cloud-desktop-agent"
    $ServicePort = 5050
    $ServicePath = "C:\Program Files\Yandex.Cloud\Cloud Desktop\desktopagent.exe"
    
    $p = @{
        Name = $ServiceName
        DisplayName = "Yandex Desktop Agent"
        BinaryPathName = "$ServicePath start --address :$ServicePort"
        Description = "Yandex Desktop Agent, automates actions from Yandex Desktop control plane service."
        StartupType = "Automatic"
    }
    New-Service @p
    
    & sc.exe config $ServiceName start= delayed-auto
    & sc.exe failure $ServiceName reset= 86400 actions= restart/1000/restart/1000/restart/1000
    
    ### The agent startup is commented because starting the agent outside the Cloud Desktop will fail. Do not start the agent during the image preparation stage.
    # Start-Service $ServiceName
    
    # Create firewall rule for Desktop Agent
    if ($Rule = Get-NetFirewallRule -Name "DESKTOP-AGENT-HTTPS-In-TCP" -ErrorAction SilentlyContinue) {
        $Rule | Remove-NetFirewallRule
    }
    
    New-NetFirewallRule `
        -Group "Yandex Desktop Agent" `
        -DisplayName "Yandex Desktop Agent (HTTPS-In)" `
        -Name "DESKTOP-AGENT-HTTPS-In-TCP" `
        -LocalPort $ServicePort `
        -Action "Allow" `
        -Protocol "TCP" `
        -Program "$ServicePath"
    
  3. Создайте задачу для корректной работы ВМ после первого запуска в сервисе:

    & mkdir "C:\Scripts"
    & schtasks /Create /TN "SetNetSettings" /RU System /SC ONSTART /RL HIGHEST /TR "Powershell -NoProfile -ExecutionPolicy Bypass -File \`"C:\Scripts\StartupSettings.ps1`"" | Out-Null
    
  4. В папке C:\Scripts создайте файл StartupSettings.ps1 с содержимым:

    # Getting IPv6 Net Adapter
    $IPv6Adapter = Get-NetAdapter | where {$_.Linklayeraddress -like "D0-1D*"}
    
    if($IPv6Adapter) {
        if((Get-NetAdapterBinding -Name $IPv6Adapter.Name -ComponentID ms_tcpip).Enabled -eq "True") {
            $outNull = Set-NetAdapterBinding -Name $IPv6Adapter.Name -ComponentID ms_tcpip -Enabled $false -Confirm:$false
            Start-Sleep 5
        }
    }
    
    if(!$(Get-Service -DisplayName "Yandex Desktop Agent") -or !$(Get-Item -Path "C:\Program Files\Yandex.Cloud\Cloud Desktop\desktopagent.exe" -ErrorAction SilentlyContinue)) {
        Invoke-WebRequest 'https://storage.yandexcloud.net/vdi-agent-internal/install.ps1' -OutFile "$($Env:temp)\install.ps1"
        cd $($Env:temp)
        Powershell.exe -ExecutionPolicy Bypass -File .\install.ps1
        mkdir "C:\Program Files\Yandex.Cloud\Cloud Desktop\"
        cp .\desktopagentInstall\desktopagent.exe 'C:\Program Files\Yandex.Cloud\Cloud Desktop\'
    
        # Create Desktop Agent service
        $ServiceName = "cloud-desktop-agent"
        $ServicePort = 5050
        $ServicePath = "C:\Program Files\Yandex.Cloud\Cloud Desktop\desktopagent.exe"
    
        $p = @{
            Name = $ServiceName
            DisplayName = "Yandex Desktop Agent"
            BinaryPathName = "$ServicePath start --address :$ServicePort"
            Description = "Yandex Desktop Agent, automates actions from Yandex Desktop control plane service."
            StartupType = "Automatic"
        }
        New-Service @p
    
        & sc.exe config $ServiceName start= delayed-auto
        & sc.exe failure $ServiceName reset= 86400 actions= restart/1000/restart/1000/restart/1000
    
        Start-Service $ServiceName
    
        # Create firewall rule for Desktop Agent
        if ($Rule = Get-NetFirewallRule -Name "DESKTOP-AGENT-HTTPS-In-TCP" -ErrorAction SilentlyContinue) {
            $Rule | Remove-NetFirewallRule
        }
    
        New-NetFirewallRule `
            -Group "Yandex Desktop Agent" `
            -DisplayName "Yandex Desktop Agent (HTTPS-In)" `
            -Name "DESKTOP-AGENT-HTTPS-In-TCP" `
            -LocalPort $ServicePort `
            -Action "Allow" `
            -Protocol "TCP" `
            -Program "$ServicePath"
    }
    
    # Stores Windows RE (WinRE) configuration info $nfo string
    [string]$nfo = reagentc /info
    
    # Checks if Windows RE (WinRE) is enabled and extracts its disk/partition info
    # If enabled, disables WinRE via reagentc and deletes its partition using DiskPart
    if($nfo -match ".*Windows RE status:.*Enabled.*"){
        # Locate the disk number it is on
        $nfo -match ".*Windows RE location.*harddisk(\d+)" | Out-Null
        $disk = $Matches[1]
        # Locate the partition it is on
        $nfo -match ".*Windows RE location.*partition(\d+)" | Out-Null
        $partition = $Matches[1]
    
        $WinREInfo = New-Object -TypeName psobject -Property $([ordered]@{Enabled='True';Disk=$disk;Partition=$partition;Resizable=(((Get-Disk -Number $disk | Get-Partition).PartitionNumber | Measure-Object -Maximum).Maximum -eq $partition);CurrentSize=([string]((Get-Disk -Number $disk | Get-Partition | Where-Object PartitionNumber -eq $partition).Size / 1MB) +'MB');A1_Key=[System.GUID]::NewGuid()})
    } else {
        $WinREInfo = New-Object -TypeName psobject -Property $([ordered]@{Enabled='False';Disk='N/A';Partition='N/A';Resizable='N/A';CurrentSize='N/A';A1_Key=[System.GUID]::NewGuid()})
    }
    
    if($WinREInfo.Enabled -eq "True" -and $WinREInfo.Partition -ne "N/A") {
        & reagentc /disable
        $outScript = "select disk $($WinREInfo.Disk)
    select partition $($WinREInfo.Partition)
    delete partition override
    exit
    "
        $outScript | Out-File C:\Scripts\winre.txt -Encoding ascii
        & diskpart /s C:\Scripts\winre.txt
        $outNull = Remove-Item "C:\Scripts\winre.txt" -Force -Confirm:$false
    }
    
    # Force extend partition
    $DiskSpace = Get-PartitionSupportedSize -DriveLetter "C"
    if((Get-Partition -DriveLetter "C").Size -lt $DiskSpace.SizeMax) {
        $outNull = Resize-Partition -DriveLetter "C" -Size $DiskSpace.SizeMax
    }
    
    # Format RAW disks
    $RAWDisks = Get-Disk | where {$_.PartitionStyle -eq "RAW"} 
    if($RAWDisks) { 
        foreach($RAWDisk in $RAWDisks) { 
            $outNull = Initialize-Disk -Number $RAWDisk.Number -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "UserData" -Confirm:$false
        } 
    }  
    

Установка Cloudbase-InitУстановка Cloudbase-Init

В подготовленный образ можно установить Cloudbase-Init. При использовании образа в Cloud Desktop эта программа автоматически расширяет файловую систему и загрузочный раздел ОС до фактического размера загрузочного диска.

Чтобы установить Cloudbase-Init, выполните команды PowerShell:

# Install Cloudbase-Init
$WorkDirectory = "C:\Scripts"
$outNull = Start-BITSTransfer -Source "https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi" -Destination $WorkDirectory
$outNull = Start-Process -FilePath 'msiexec.exe' -ArgumentList "/i $WorkDirectory\CloudbaseInitSetup_Stable_x64.msi /qn" -Wait
Start-Sleep 60

$outScript = "[DEFAULT]
username=Admin
groups=Administrators
inject_user_password=true
config_drive_raw_hhd=true
config_drive_cdrom=true
config_drive_vfat=true
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
verbose=true
debug=true
logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
logfile=cloudbase-init-unattend.log
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
logging_serial_port_settings=COM1,115200,N,8
mtu_use_dhcp_config=true
ntp_use_dhcp_config=true
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
metadata_services=cloudbaseinit.metadata.services.ec2service.EC2Service
plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
allow_reboot=false
stop_service_on_exit=false
check_latest_version=false"
$outScript | Out-File -FilePath "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf" -Confirm:$false -Force
$outScript | Out-File -FilePath "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf" -Confirm:$false -Force

Завершение работы с образомЗавершение работы с образом

После настройки рекомендуем выполнить генерализацию образа при помощи утилиты Sysrep. Это подготовит Windows для клонирования и последующего использования на других компьютерах.

Чтобы генерализировать образ, запустите PowerShell от имени администратора и выполните команды:

# Global vars
$WorkDirectory = "C:\sysprep"

# Download the unattend.xml file for Sysprep
New-Item -Path $WorkDirectory -ItemType Directory
Start-BitsTransfer https://storage.yandexcloud.net/cloudbase/sysprepunattend-cloudbase-init.xml -Destination $WorkDirectory\unattend.xml

# Start Sysprep
& $env:SystemRoot\System32\Sysprep\Sysprep.exe /oobe /generalize /quiet /quit /unattend:"$WorkDirectory\unattend.xml"

# Wait for correct system state
do {
    Start-Sleep -s 5
    $SetupState = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State"
    $ImageState = $SetupState | Select-Object -ExpandProperty ImageState
} while ($ImageState -ne 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE')

Remove-Item $WorkDirectory -Recurse -Force
Remove-Item "C:\Windows\Setup\Scripts\*" -Force -ErrorAction SilentlyContinue

# Wait for Sysprep tag
while (-not (Test-Path 'C:\Windows\System32\Sysprep\Sysprep_succeeded.tag') ) {
    Start-Sleep -s 1
}

Stop-Computer -Force

Выключите виртуальную машину. В результате получится файл дискового образа image.qcow2 в формате QCOW2.

Добавление образа в Compute CloudДобавление образа в Compute Cloud

  1. Загрузите образ в Object Storage.

  2. Скопируйте ссылку на загруженный образ.

  3. Импортируйте образ в Compute Cloud.

    Если вы используете YC CLI, вы можете импортировать образ с помощью команды:

    yc compute image create --name <название образа> --description <описание образа> --os-type windows --source-uri <ссылка на образ в Object Storage>
    
  4. Проверьте добавленный образ:

    1. Создайте виртуальную машину на основе образа.

      Первый запуск ВМ из образа в облаке иногда занимает больше времени, чем обычная загрузка ОС. Если ВМ недоступна по сети более 20 минут, перезагрузите ВМ и попробуйте подключиться снова.

    2. Подключитесь к виртуальной машине по RDP.

Добавление образа в Cloud DesktopДобавление образа в Cloud Desktop

Консоль управления
  1. В консоли управления выберите сервис Cloud Desktop.
  2. На панели слева выберите Образы.
  3. Нажмите кнопку Добавить образ.
  4. В поле Источник образа выберите Compute Cloud.
  5. В поле Образ в Compute Cloud выберите образ, добавленный ранее.
  6. Введите имя образа.
  7. Нажмите кнопку Добавить.

После создания образа вы сможете использовать его как образ загрузочного диска для групп рабочих столов.

Изменение размера загрузочного диска без Cloudbase-InitИзменение размера загрузочного диска без Cloudbase-Init

Если вы не используете Cloudbase-Init и хотите изменить размер загрузочного диска в группе рабочих столов:

  1. Расширьте размер файловой системы загрузочного диска на рабочем столе. Например, с помощью утилиты diskmgmt.msc.
  2. Создайте новый образ Cloud Desktop из этого рабочего стола.

Была ли статья полезна?

Предыдущая
Создать образ Linux на основе ВМ Compute Cloud
Следующая
Удалить пользовательский образ
Проект Яндекса
© 2025 ООО «Яндекс.Облако»