Это старая версия документа!
OVH — установка любого Windows через bin456789/reinstall
Универсальный способ переустановить выделенный сервер OVH (UEFI) на любую версию Windows с помощью скрипта bin456789/reinstall. Алгоритм проверен на сервере OVH (платформа ASRockRack, AMI UEFI, 2×NVMe, Ryzen). Ниже — пошаговый рецепт «на будущее».
Плейсхолдеры: <SERVER_IP> — адрес сервера; <SSH_USER> / <SSH_PASSWORD> — доступ к установленной Linux/rescue (в Debian это НЕ root, а обычный пользователь с sudo); <WIN_USER> (обычно administrator), <WIN_PASSWORD>, <RDP_PORT> (обычно 3389).
Главная проблема OVH: RAID1 по всем дискам
Инсталлятор OVH ставит Linux на программный RAID1 (mdadm) сразу поверх всех NVMe:
- md1 → p1 = /boot/efi (ESP)
- md2 → p2 = /boot
- md3 → p3 = /
Тогда reinstall.sh в EFI-ветке определяет целевой диск по ESP (/boot/efi → /dev/md1 → lsblk --inverse) и получает два диска — из-за этого efibootmgr собирается криво и падает с ошибкой Could not add efi entry.. Главный диск (/ → /dev/md3) тоже даёт два диска, и скрипт уходит в интерактивный выбор. Лечится разбором RAID на всех дисках, кроме целевого.
Шаг 0 — диагностика
Подключаемся к установленной Linux (например, Debian из rescue/инсталлятора OVH) и собираем данные:
ssh <SSH_USER>@<SERVER_IP> sudo -i lsblk -o NAME,SIZE,TYPE,PARTUUID,FSTYPE,MOUNTPOINT cat /proc/mdstat findmnt -T /boot/efi -no SOURCE # например /dev/md1 findmnt -no SOURCE / # например /dev/md3 lsblk -rn --inverse /dev/md1 | grep -w disk # два диска = проблема efibootmgr mokutil --sb-state # должно быть SecureBoot disabled apt-get install -y mdadm gdisk util-linux efibootmgr
Шаг 1 — разбираем RAID на лишнем диске
Оставляем один целевой диск (например, /dev/nvme0n1), второй (<UNWANTED_DISK>, например /dev/nvme1n1) освобождаем и чистим:
swapoff <UNWANTED_DISK>p4 2>/dev/null mdadm /dev/md1 --fail <UNWANTED_DISK>p1 && mdadm /dev/md1 --remove <UNWANTED_DISK>p1 mdadm /dev/md2 --fail <UNWANTED_DISK>p2 && mdadm /dev/md2 --remove <UNWANTED_DISK>p2 mdadm /dev/md3 --fail <UNWANTED_DISK>p3 && mdadm /dev/md3 --remove <UNWANTED_DISK>p3 mdadm --zero-superblock <UNWANTED_DISK>p1 <UNWANTED_DISK>p2 <UNWANTED_DISK>p3 sgdisk --zap-all <UNWANTED_DISK> wipefs -a <UNWANTED_DISK> efibootmgr -b <BOOT_NUM> -B # убрать битую запись от стёртого диска
Проверяем, что оба массива теперь указывают только на целевой диск:
lsblk -rn --inverse /dev/md1 | grep -w disk lsblk -rn --inverse /dev/md3 | grep -w disk
Шаг 2 — (по желанию) восстанавливаем Linux-запись
Если после затирания лишнего диска запись в NVRAM осталась битой, пересоздаём её на целевом диске:
efibootmgr -c -d <TARGET_DISK> -p 1 -L linux -l '\EFI\<distro>\grubx64.efi'
Шаг 3 — запускаем reinstall.sh
cd "$HOME" curl -fsSL -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh bash reinstall.sh windows \ --image-name "Windows Server 2022 ServerStandard" \ --lang en \ --username <WIN_USER> \ --password "<WIN_PASSWORD>" \ --rdp-port <RDP_PORT> \ --allow-ping \ --force-boot-mode efi
Аргумент --image-name берётся из списка в README проекта. Для Windows Server 2022: ServerStandard = Desktop Experience (GUI); ServerStandardCore = Core. Для других ОС указывается свой --image-name или свой --iso (ссылка на образ).
Скрипт сам: находит ISO, определяет MAIN DISK, скачивает grub и netboot, собирает initrd, создаёт EFI-запись и выставляет BootNext.
Шаг 4 — ручная перезагрузка
Скрипт сам не перезагружает — перезагружаем вручную:
efibootmgr | head -3 # BootNext должен указывать на новую запись reinstall sync && reboot
После ребута grub грузит Alpine netboot, он скачивает ISO, распаковывает образ напрямую на диск (wimlib), прописывает BCD и перезагружается уже в Windows.
Шаг 5 — проверка результата
nc -z -G3 <SERVER_IP> <RDP_PORT> # OPEN = Windows/RDP поднялся
Подключение по RDP с рабочей машины:
xfreerdp /v:<SERVER_IP> /u:<WIN_USER> /p:'<WIN_PASSWORD>' /cert:ignore
Важные нюансы
ServerStandard= Desktop Experience (GUI);...ServerStandardCore= Core. Для RDP нужен вариант с GUI.- reinstall.sh — неинтерактивная установка: экрана установщика Windows нет, наблюдать можно только через KVM/BMC. Во время установки live-окружение доступно по SSH под тем же
--username(не root!), веб-лог открывается наhttp://<SERVER_IP>/<web_path>(путь печатает скрипт). - После установки в панели OVH выставить Boot → Hard disk, иначе ребут может снова уйти в PXE/netboot.
- Secure Boot должен быть выключен (иначе скрипт откажется устанавливать).
- Функция
get_part_num_by_part /dev/mdNберёт последние цифры имени (md1 → «1»); на OVH md1 = ESP (p1), поэтому номер совпадает и efibootmgr собирается корректно после разбора RAID. - Установка поддерживает Windows Vista — 11 и Windows Server 2008 — 2025, в том числе серверные редакции. Полный список
--image-nameи--lang— в README проекта.