# 105 - id машины, --dumdir - назначение, --mode - остановить машину (лучше всего)
vzdump 105 --dumpdir /root --mode stop
# сжать современным быстрым и эффективным алгоритмом Zstandard
vzdump 105 --dumpdir /root --mode stop --compress zstd
# копируем на другой хост
scp /root/vzdump-qemu-105-2021_12_10-16_47_51.vma root@192.168.99.8:/root
# с ключом и портом
scp -P 10022 -i /root/.ssh/symfio_SSH_wop_OpenSSH.ppk /root/vzdump-qemu-103-2025_11_28-11_33_25.vma.zst root@195.201.108.88:/root
Смотрим на новом хосте первый доступный идентификатор и где располагается хранилище 
# Рекавери для полноценной виртуальной машины VM
qmrestore /root/vzdump-qemu-105-2021_12_10-16_47_51.vma 105 -storage local-lvm
# --unique 1 (то же, что --unique true) заставляет восстановление генерировать новые MAC-адреса сетевых карт, UUID и т.п., чтобы избежать конфликтов, если исходная ВМ ещё существует
# --storage указывает, что виртуальный диск нужно разворачивать именно в LVM-Thin. Смотрим имя pvesm status
qmrestore /root/vzdump-qemu-105-2023_11_20-00_00_00.vma.zst 101 --storage sy-lvmthin --unique 1
# Рекавери для контейнера LXC (контейнер с полноценной ОС в отличии от Docker)
pct restore 107 /root/vzdump-lxc-103-2021_12_10-16_49_32.vma -storage local-lvm
Остановить VM qm shutdown 9000 qm stop 9000 Просмотр storage pvesm status Конфиг с id дисков в частности qm config 101 Расширить диск qm resize 9000 sata1 +20G где 9000 — VMID, scsi0 (или virtio0, sata0 и т.д.) — id диска из qm config 9000, а +20G — сколько добавить. Можно указать итоговый размер (200G).
# Поднимаем http-сервер на Proxmox-хосте
python3 -m http.server 8000
# Внутри VM
# Либо
wget http://proxmox-ip:8000/file
#Либо через браузер скачиваем файл
Добавляем storage box от Hetzner Пароли - отдельная боль. Нужно, чтобы без запятых в начале и в конце и без странных знаков (типа немецких или нестандартных) - Hetzner при генерации пароля это любит.
pvesm add cifs sbox-backup --server u518783-sub1.your-storagebox.de --share u518783-sub1 --username u518783-sub1 --password 'YZdc6bSeXPQE%!2' --content backup --smbversion 3.0
# Смотрим все диски
pvesm status
# Конфиг-файл со всеми storage
nano /etc/pve/storage.cfg
После переименование хоста hostnamectl hostname NAME появляются два кластера. При этом новый имеет знак вопроса и там ничего нет. Старый - види VM, но когда заходишь туда - долго крутится индикатор и выдает в итоге: Ошибка Ошибка соединения - Timeout. При этом графики VM CPU, память и т.д. показываются Решение: Проверяем какие папки есть (hostname) и где лежат VM ls -la /etc/pve/nodes/pve/ ls /etc/pve/nodes/pve/qemu-server/ && echo '---' && ls /etc/pve/nodes/ivs-proxmox/qemu-server/") 100.conf 101.conf 102.conf 103.conf
# Остановить все VM/CT
qm list | awk '{print $1}' | grep -v VMID | xargs -I {} qm stop {}
pct list | awk '{print $1}' | grep -v VMID | xargs -I {} pct stop {}
# Остановить кластерные сервисы
systemctl stop pve-cluster
systemctl stop corosync
# Переместить конфигураци. Скопировать все VM конфиги
cp -a /etc/pve/nodes/pve/qemu-server/* /etc/pve/nodes/ivs-proxmox/qemu-server/
cp -a /etc/pve/nodes/pve/lxc/* /etc/pve/nodes/ivs-proxmox/lxc/ 2>/dev/null
# Удалить старую директорию
rm -rf /etc/pve/nodes/pve
# Перезапустить сервисы
systemctl restart pve-cluster
systemctl restart pvedaemon
systemctl restart pveproxy
systemctl restart pvestatd
# Обновить хост в /etc/hosts
nano /etc/hosts
# Должно быть:
# 37.27.238.215 ivs-proxmox.ivstech.org ivs-proxmox
Перенос Windows Server VM с Proxmox (local-zfs) на Hetzner Cloud Server с поднятием RDP. Проверено на Windows Server 2019, ZFS-storage.
vioscsi), не VirtIO Block (viostor). В Linux виден как /dev/sda. Это причина INACCESSIBLE_BOOT_DEVICE после первого boot, если в Windows нет правильно зарегистрированного драйвера.drvload не сделан, diskpart не увидит системный диск.qemu-img convert -O raw ... - в пайп ssh ломается с Cannot grow device files. ZFS zvol — это уже raw блочное устройство, лить через dd напрямую.Поставить VirtIO драйверы (свежий ISO): https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
Прицепить как CD, в Windows запустить virtio-win-guest-tools.exe.
Добавить dummy-устройства, чтобы Windows зарегистрировала сервисы драйверов:
# Dummy VirtIO Block (для viostor — на Hetzner не нужен, но пусть будет)
qm set <vmid> -virtio1 local-zfs:1
# VirtIO SCSI controller + dummy disk (для vioscsi — критично для Hetzner)
# Меняет тип SCSI-контроллера для ВСЕХ SCSI-дисков VM.
# Если bootdisk на SCSI — НЕ трогать -scsihw, иначе сама VM словит INACCESSIBLE_BOOT_DEVICE
qm set <vmid> -scsihw virtio-scsi-single
qm set <vmid> -scsi1 local-zfs:1
Boot Windows → Device Manager сам подхватит драйверы из DriverStore → сервисы появятся.
Проверить (в Windows, cmd от админа):
reg query HKLM\SYSTEM\CurrentControlSet\services\vioscsi /v Start
reg query HKLM\SYSTEM\CurrentControlSet\services\viostor /v Start
reg query HKLM\SYSTEM\CurrentControlSet\services\netkvm /v Start
Сменить NIC на VirtIO (заодно):
# MAC оставить тот же, чтоб не плодить сетевых профилей в Windows
qm set <vmid> -net0 virtio,bridge=vmbrX,firewall=1,macaddr=<тот же MAC>
После boot — настройки нового адаптера VirtIO на DHCP (Hetzner раздаёт по DHCP).
Включить RDP и Firewall (PowerShell от админа):
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name 'fDenyTSConnections' -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set-Service -Name TermService -StartupType Automatic
Штатный shutdown (НЕ qm stop):
qm shutdown <vmid> --timeout 300
qm status <vmid>
lsblk -o NAME,SIZE,MODEL
blockdev --getsize64 /dev/sda
blockdev --getsize64 /dev/sdb # если Volume
qemu-img не нужен и ломается в пайп — zvol уже raw.
# Системный диск. chacha20-poly1305 — быстрый шифр без AES-NI
dd if=/dev/zvol/rpool/data/vm-<vmid>-disk-0 bs=4M status=progress | \
ssh -c chacha20-poly1305@openssh.com -o Compression=no root@<HETZNER_RESCUE_IP> \
"dd of=/dev/sda bs=4M conv=fsync"
# Второй диск (если есть)
dd if=/dev/zvol/rpool/data/vm-<vmid>-disk-1 bs=4M status=progress | \
ssh -c chacha20-poly1305@openssh.com -o Compression=no root@<HETZNER_RESCUE_IP> \
"dd of=/dev/sdb bs=4M conv=fsync"
На стороне rescue после dd:
sync
В Hetzner Console: Disable rescue → Power off → Power on.
Даже при хорошо подготовленной VM. vioscsi сервис есть, но Start не равен 0, или нет правильного маппинга в CriticalDeviceDatabase. Чинится из WinRE без перелива.
Загрузка в Windows Recovery:
После 2-3 неудачных boot Windows сама свалится в Automatic Repair → меню → Дополнительные параметры → Поиск и устранение неисправностей → Дополнительные параметры → Командная строка.
Если не сваливается — в Hetzner Console смонтировать virtio-win.iso (или Windows install ISO) и грузиться с него → Repair → cmd.
Подгрузить vioscsi в WinPE:
WinPE не видит системный диск пока:
drvload E:\vioscsi\2k19\amd64\vioscsi.inf
diskpart
list vol
exit
(Версия Windows подставляется: 2k19, 2k22, 2k25, w10, w11. Буква virtio ISO у тебя может быть другая, обычно E:.)
Теперь должен появиться NTFS-том на размер системного диска. Запомни его букву (часто C: или D:).
Проверь, что это Windows:
dir <буква>:\Windows\System32\config\SYSTEM
Постоянная инсталляция драйверов в offline-образ:
dism /image:<буква>:\ /add-driver /driver:E:\vioscsi\2k19\amd64 /forceunsigned
dism /image:<буква>:\ /add-driver /driver:E:\NetKVM\2k19\amd64 /forceunsigned
dism /add-driver сам пропишет .sys в System32\drivers, создаст сервис и добавит CriticalDeviceDatabase. Это полноценная инсталляция, не временная.
Страховка — явно проставить Start=0 для vioscsi через offline-реестр:
reg load HKLM\OFFSYS <буква>:\Windows\System32\config\SYSTEM
reg query HKLM\OFFSYS\Select
# смотри значение Current — обычно 0x1 = ControlSet001
reg add "HKLM\OFFSYS\ControlSet001\Services\vioscsi" /v Start /t REG_DWORD /d 0 /f
reg unload HKLM\OFFSYS
В Hetzner Console: Detach ISO (иначе при следующем boot опять загрузишься с virtio-win), потом:
wpeutil reboot
Если WinPE капризничает — чинить можно из Linux:
# Hetzner Console: Rescue → enable → reboot, ssh в rescue
apt update && apt install -y ntfs-3g chntpw
mkdir -p /mnt/win
mount -t ntfs-3g -o rw,big_writes /dev/sda2 /mnt/win # подставь свой раздел
# Скопировать vioscsi.sys в System32\drivers (если ещё не там)
DRVSTORE=$(find /mnt/win/Windows/System32/DriverStore/FileRepository -maxdepth 1 -iname 'vioscsi.inf_amd64_*' | head -1)
cp -v "$DRVSTORE/vioscsi.sys" /mnt/win/Windows/System32/drivers/
# Править SYSTEM hive
cd /mnt/win/Windows/System32/config
chntpw -e SYSTEM
Внутри chntpw:
cd ControlSet001\Services\vioscsi
ed Start
# ввести 0
cd \ControlSet001\Control\CriticalDeviceDatabase
nk pci#ven_1af4&dev_1004
cd pci#ven_1af4&dev_1004
nv 1 Service
ed Service # vioscsi
nv 1 ClassGUID
ed ClassGUID # {4D36E97B-E325-11CE-BFC1-08002BE10318}
cd ..
nk pci#ven_1af4&dev_1048
cd pci#ven_1af4&dev_1048
nv 1 Service
ed Service # vioscsi
nv 1 ClassGUID
ed ClassGUID # {4D36E97B-E325-11CE-BFC1-08002BE10318}
q
# y — сохранить
PCI ID для VirtIO SCSI: 1af4:1004 (legacy) и 1af4:1048 (modern). Для VirtIO Block — 1001/1042. Hetzner — 1004/1048.
umount /mnt/win
# Hetzner Console: Disable rescue → Reset
Если RDP заранее не включался — Hetzner Console (только клава): Ctrl+Alt+Del → Task Manager → Alt+Ф → Запустить новую задачу → powershell + галка «с правами администратора».
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name 'fDenyTSConnections' -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set-Service -Name TermService -StartupType Automatic
Start-Service TermService
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name 'UserAuthentication' -Value 1
# Сеть на DHCP, если не была
Set-NetIPInterface -InterfaceAlias "Ethernet" -Dhcp Enabled
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses
ipconfig /renew
# Проверка
Get-NetTCPConnection -LocalPort 3389 -State Listen
Get-NetIPConfiguration | Select InterfaceAlias,IPv4Address,IPv4DefaultGateway
⚠️ Hetzner Cloud Firewall (если прицеплен) — разрешить TCP 3389 только с известных IP, не 0.0.0.0/0. Боты задолбают за час.