Proxmox. Установка Windows

2025-02-22 · 4 мин. для прочтения

Proxmox. Установка Windows.

Содержание

1 Общая информация

2 Подготовка

  • Скачаем драйвера для qemu:
    wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso -O /var/lib/vz/template/iso/virtio-win.iso
    
  • Необходимо подключить также образ Windows.
  • Его можно подключить через nfs, а можно загрузить в /var/lib/vz/template/iso.

3 Установка

  • Создадим виртуальную машину:

    qm create 200 --name pdc2 --memory 16000 --cores 4 --sockets 1 --net0 virtio,bridge=vmbr1,firewall=1,mtu=1,tag=180 --agent enabled=1
    
    • tag задаёт используемый vlan.
  • Установим тип операционной системы.

  • Можно выбрать из списка: wxp, w2k, w2k3, w2k8, wvista, win7, win8, win10, win11.

    qm set 200 --ostype win10
    
  • Подключим QEMU Guest Agent (см. KVM. QEMU Guest Agent):

    qm set 200 --agent enabled=1,fstrim_cloned_disks=1
    
  • Создадим диск (160GB):

    pvesm alloc local-lvm 200 vm-200-disk-0 160G
    
  • Зададим драйвер диска:

    qm set 200 --scsihw virtio-scsi-single
    
  • Подключим диск:

    qm set 200 --virtio0 local-lvm:vm-200-disk-0
    
  • Подключим CDROM:

    qm set 200 --ide2 local:iso/windows-server-2019.iso,media=cdrom
    
  • Подключим диск с драйверами VirtIO:

    qm set 200 --ide3 local:iso/virtio-win.iso,media=cdrom
    
  • Зададим порядок загрузки (CD-ROM, затем диск)

    qm set 200 --boot c --bootdisk virtio0
    qm set 200 --boot order='ide2;ide3;virtio0'
    
  • Зададим тип CPU:

    qm set 200 --cpu cputype=host
    
  • Подключим для мышки:

    qm set 200 --tablet 1
    

4 Скрипт установки

  • Все действия по установке можно собрать в виде скрипта (нужно править):
    #!/bin/bash
    
    # Configuration variables
    NODE="pve"
    VMID="200"                    # Change this to your desired VM ID
    VM_NAME="win11-test"           # Change this to your desired VM name
    VM_MEMORY="4096"              # Memory in MB
    VM_CORES="2"                  # Number of CPU cores
    VM_SOCKET="1"                 # Number of CPU sockets
    STORAGE="local-lvm"           # Storage location
    DISK_SIZE="160G"              # Disk size
    ISO_STORAGE="/mnt/pve/nfs/template/iso"           # Storage location for ISOs
    WIN_ISO="Win11_23H2_x64v2_auto.iso"         # Windows ISO filename
    VIRTIO_ISO="virtio-win.iso"   # VirtIO drivers ISO filename
    OS_TYPE="win10"               # Options: wxp, w2k, w2k3, w2k8, wvista, win7, win8, win10, win11
    
    # Function to check if VM ID already exists
    check_vmid() {
        if qm status $VMID &>/dev/null; then
            echo "Error: VM ID $VMID already exists"
            exit 1
        fi
    }
    
    # Function to check storage availability
    check_storage() {
        if ! pvesm status | grep -q "^$STORAGE"; then
            echo "Error: Storage '$STORAGE' not found"
            exit 1
        fi
    }
    
    # Function to check ISO files
    check_isos() {
        if [ ! -f "/mnt/pve/nfs/template/iso/$WIN_ISO" ]; then
            echo "Warning: Windows ISO not found at /var/lib/vz/template/iso/$WIN_ISO"
        fi
        if [ ! -f "/mnt/pve/nfs/template/iso/$VIRTIO_ISO" ]; then
            echo "Warning: VirtIO ISO not found at /var/lib/vz/template/iso/$VIRTIO_ISO"
        fi
    }
    
    # Run checks
    check_vmid
    check_storage
    check_isos
    
    # Create and add main disk using VirtIO Block
    echo "Creating disk with size $DISK_SIZE..."
    pvesm alloc $STORAGE $VMID vm-$VMID-disk-2 $DISK_SIZE || {
        echo "Error: Failed to create disk"
        qm destroy $VMID
        exit 1
    }
    
    # Create VM
    echo "Creating VM with ID $VMID..."
    qm create $VMID --name $VM_NAME --memory $VM_MEMORY --cores $VM_CORES --sockets $VM_SOCKET --net0 virtio,bridge=vmbr0
    qm set $VMID --ostype "$OS_TYPE"
    
    qm set $VMID --virtio0 $STORAGE:vm-$VMID-disk-2
    
    # Add Windows installation media
    qm set $VMID --ide2 nfs:iso/$WIN_ISO,media=cdrom
    
    # Add VirtIO drivers
    qm set $VMID --ide3 nfs:iso/$VIRTIO_ISO,media=cdrom
    
    # Configure boot order (CD-ROM first, then disk)
    #qm set $VMID --boot c --bootdisk virtio0
    #qm set $VMID --boot order='ide2;ide3;virtio0'
    
    # Enable QEMU Guest Agent
    qm set $VMID --agent enabled=1,fstrim_cloned_disks=1
    
    #create TPM
    pvesm alloc local-lvm 1022 vm-1022-disk-1.raw 4M
    
    #create EFI Disk
    pvesm alloc local-lvm 1022 vm-1022-disk-0.qcow2 4M
    
    # Add TPM support (required for Windows 11)
    echo "Configuring Windows 11 specific settings (TPM, UEFI)..."
    qm set $VMID --tpmstate0 local-lvm:vm-1022-disk-1.raw,size=4M,version=v2.0
    qm set $VMID --machine q35
    qm set $VMID --bios ovmf
    qm set 1022 --efidisk0 local-lvm:vm-1022-disk-0.qcow2,size=528K,efitype=4m,pre-enrolled-keys=1
    
    # Configure boot order (CD-ROM first, then disk)
    qm set $VMID --boot c --bootdisk virtio0
    qm set $VMID --boot order='ide2;ide3;virtio0'
    
    # Configure CPU type for better performance
    qm set 1022 --cpu cputype=host
    
    # Add tablet device for better mouse handling
    qm set 1022 --tablet 1
    
    echo "VM $VMID created successfully. Before starting the VM, ensure:"
    echo "1. Windows ISO ($WIN_ISO) is present in $ISO_STORAGE:iso/"
    echo "2. VirtIO drivers ISO ($VIRTIO_ISO) is present in $ISO_STORAGE:iso/"
    echo ""
    echo "During Windows installation, when prompted for drivers, browse the VirtIO ISO (IDE3) and select:"
    echo "- For storage: /viostor/w10/amd64/"
    echo ""
    echo "To download the latest VirtIO drivers:"
    echo "wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso -O /var/lib/vz/template/iso/virtio-win.iso"
    echo ""
    echo "To start the VM:"
    echo "qm start $VMID"
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.