Недавно в моём районе открылась новая комиссионка, и конечно же, я наведался туда в первый же день. Особо заинтересовавшего улова было немного, но среди прочего попался красивый, хоть и побитый жизнью, ноутбук — ThinkPad X40.

За каких-то 500 йен (260 рублей) такое чудо забрать было просто обязательно. Ну, подумаешь, софттач уже разложился — к счастью, он миновал стадию превращения назад в нефть, и сразу перешёл в состояние наждачки.

Но как обычно, беда вылезла, откуда не ждали.
После подкидывания блока питания оказалось, что винчестер девственно чист. Однако попытки загрузиться с флешки, внешнего диска, или даже внешнего флопика, результата не приносили — неумолимо вылезала надпись «Operating System Not Found», да и названия устройств в биосе не появлялись.
Беглый гуглёж показал — ранние серии X40 были очень часто подвержены внезапной смерти мультиконтроллера (ICH6). Буквально подышишь не в ту сторону, втыкая флешку — и вот у тебя уже нету ни USB, ни чего-нибудь ещё.
Добрые люди дали посмотреть на схему, и опасения подтвердились: ICH6 отвечает за связь с аудиокодеком, блютусом и USB. Как впоследствии выяснится, ни звук, ни блютус, ни USB тоже не работают.

Удивило, конечно, что SD-ридер тут висит на шине PCI, и поэтому работает. Впрочем, это я уже забегаю вперёд, ведь загрузиться с него нельзя.
В случае обычного ноутбука, можно было бы просто кинуть винчестер в USB-переходник и залить образ с другого компьютера, но и тут подстава — винчестер в нём 1.8 дюйма, и на шину IDE с напряжением до 3.3 вольта, поди найди такой адаптер. Вкладываться в покупку переходника, SSD и ещё адаптера с USB на mSata тоже не хотелось, ибо уже жаба задушит :-)
Однако, в нём всё ещё есть опция загрузки по сети через PXE, может, это и спасло бы?
❯ Сначала было слово, и слово это — DHCP
Первым делом я попробовал самое очевидное решение — iVentoy. Вебморда и все дела, конечно — стильно, модно, молодёжно, но ноутбук при этом успешно загружал PXE-бинарник и вешался. Видимо, с i386 проект уже не совместим. Придётся делать всё вручную.
Для того, чтобы загрузиться через PXE, DHCP-сервер должен отдать грузящемуся клиенту в ответе как минимум два параметра:
№ 66 — адрес/имя TFTP-сервера, с которого грузимся, в моём случае 192.168.1.228
№ 67 — имя файла на TFTP-сервере, которое будем загружать
В OpenWRT их можно указать в параметрах интерфейса локальной сети на вкладке DHCP Server:

В качестве сервера был поднят TFTPD64, а загрузчиком для пробы был закинут iPXE в сборке от проекта netboot.xyz (файл netboot.kpxe).
Пробуем грузиться и... почем��-то ноутбук всё равно усердно пытается найти TFTP-сервер на роутере.
Тут я перепробовал кучу разных настроек, но, видимо, моя версия OpenWRT забагована и никакие попытки прописать DHCP Next-Server другими способами не прокатили.
К счастью, сам файл iPXE весьма небольшой, поэтому я просто установил на роутер atftpd и положил его в /srv/tftp/netboot.kpxe.

После этого ноутбук загрузился в iPXE, показал меню выбора образа, из которых грузились на 512 метрах оперативки далеко не все, и я даже зачем-то установил на него OpenBSD, но быстро его поломал.
❯ Попробуем туда за-PE-реться
Дальше были многочисленные попытки загрузить хоть какой-то ISO-образ через memdisk. В общем случае это делается следующей последовательностью команд в iPXE Shell:
kernel memdisk
initrd http://192.168.1.228:3939/bartPE.iso
boot
Однако, все имеющиеся у меня установочники падали даже не доходя до загрузки, собственно, ОС из образа, и я толком не разобрался, что делал не так. Для загрузки конкретно же Windows PE, впрочем, нашёлся другой способ:
-
Берём образ Windows Server 2003 SP1 (важно: именно SP1) и вытаскиваем оттуда командой
expandиз папкиI386файлыSTARTROM.COMSETUPLDR.EXE— переименовываем вNTLDR(именно из EXE, не из BIN!)NTDETECT.COM
Кладём это всё в корень нашего TFTP-сервера, а рядом кладём образ самого Windows PE, собранный из того же Server 2003 SP1.
-
Создаём файл с именем
WINNT.SIF, в который пишем[SetupData] BootDevice = "ramdisk(0)" BootPath = "\i386\System32\" OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=WINPE16.ISO"где WINPE16.ISO — название образа Windows PE.
Если вам влом этим всем заниматься — можете забрать готовую папку с архиворга :-)
После этого, если конфигурация DHCP у вас работает, можно просто указать STARTROM.COM в опции №67, и система должна загрузиться. Если же у вас всё так же сломано, как и у меня, то грузимся в IPXE Shell и выполняем команды:
dhcp net0
set net0/next-server 192.168.1.228
chain tftp://192.168.1.228/STARTROM.COM
После чего, в теории, наш компьютер будет медленно и печально вытягивать ISO-файл по UDP.



Это может быть полезно, например, чтобы вытащить какие-то важные файлы с машины эпохи XP, которая не грузится, но ещё как-то шевелится. Однако, для установки, как оказалось, есть способ ещё проще, быстрее и надёжнее.
❯ Serva — всему голова
Оказывается, есть современный, более надёжный инструмент «всё в одном» специально для Windows: Serva.
Он позволяет развернуть установку Windows XP по сети с куда меньшим геморроем.
Сначала скачиваем дистрибутив, распаковываем и запускаем. Окно по дефолту будет пустым и загадочным — нужно нажать на иконку в строке заголовка, а затем Settings:

На вкладке TFTP включаем сервер и создаём для него новую папку (без всего хлама из прошлых шагов)

На вкладке DHCP можно сделать по-разному:
Если соединяем комп с сервером витухой напрямую, то включаем DHCP Server
Если, как у меня, всё идёт в общую локалку, то включаем proxyDHCP
Также не забываем включить и BINL — через него будут, собственно, загружаться системные файлы.

Нажимаем OK и затем закрываем Serva полностью.
Далее тысячу раз проверяем файрвол, что у нас не торчит голой задницей порт SMB в интернет, а затем идём в PowerShell и выполняем:
Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -All -NoRestart
Либо мышкой
Control Panel -> Turn Windows features on or off -> SMB 1.0/CIFS File Sharing Support: включить SMB 1.0/CIFS Server

Важно: протокол SMBv1 дырявый, и лучше это дело после установки откатить сразу назад, либо проворачивать это всё на виртуалке.
Затем идём в Панель управления → Network and Sharing Center → Advanced Sharing Settings и выключаем Password protected Sharing

После чего перезагружаем компьютер.
Возвращаемся к папке, которую создали для TFTP-сервера в Serva, и открываем её свойства. На вкладке Sharing жмём на Advanced Sharing и делаем её доступной с названием, дословно, WIA_RIS_SHARE.

После чего на той же вкладке жмём на просто Share... и даём доступ на чтение для Guest и Everyone:

Важно: сделать то же самое через Advanced Sharing — не прокатит.
Затем в папке создаём подпапку WIA_RIS, в которой — любую другую, но без пробелов и спецсимволов. Я, например, создал папку WXPJpn. В неё перетаскиваем содержимое всего нашего установочного диска с Windows XP.

Загрузиться в теории это сможет уже сейчас, но установиться не сможет — сети-то нету. Поэтому создаём подпапку $OEM$\$1\Drivers\NIC и вбрасываем туда драйвера от сетевой карты нашего Thinkpad'а.

Запускаем Serva ещё раз. Должны побежать логи, но все без ошибок:

Теперь, опять же, если вы используете DHCP-сервер внутри Serva, или в вашей сети опции 66/67 работают корректно — можно прописать в опцию 66 адрес сервера, на котором Serva запущена, а в 67 — строку \BM\PXESERVA\BIOS\pxeserva.0, и грузиться.
В моём же поломанном случае нужно было зайти снова в папку TFTP-сервера и скопировать всё из BM\PXESERVA\BIOS\*.* в её корень. В итоге получилась такая структура:

И как в прошлый раз — загружаюсь в iPXE, раздаваемый роутером, а затем выполняю команды:
dhcp net0
set net0/next-server 192.168.1.228
chain tftp://192.168.1.228/PXESERVA.0

Наблюдаю на экране меню с заветным пунктом, значит всё настроено успешно!


Если все драйвера на месте, то дальше будет всё то же, что и при обычной загрузке с установочного компакт-диска. Ну а как дальше переустановить шиндошс — думаю, уж не на хабре рассказывать! Зато, может быть, я ещё расскажу о каких-нибудь таких находках и экспериментах в своём лунном телеграме :-)
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud - в нашем Telegram-канале ↩
Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.
Комментарии (11)

nickston
12.11.2025 08:44У меня на древнем ноуте была примерно такая же ситуация. Были юсб порты но ноут с них не умел грузиться. Так же сделал загрузку по сети, но одним из пунктов сделал загрузку не с хдд а с флешки, и все. Ноут нормально запустил установку с флешки.

vladkorotnev Автор
12.11.2025 08:44А через что это делается? Я пытался подсунуть plop boot в надежде запуститься с карты памяти, но увы.

nickston
12.11.2025 08:44TFTPD там и dhcp и tftp. галка совместимость pxe и папку корня. В корень pxelinux.0 и тд. там свое меню и все

vladkorotnev Автор
12.11.2025 08:44Вот кстати говоря эта самая галка у меня и ломала загрузку винды по второму описанному способу из статьи — загрузчик просто не мог найти ntldr, не знаю почему именно.

domix32
12.11.2025 08:44Интересно можно ли таким макаром накатить какую-нибудь ReactOS

vladkorotnev Автор
12.11.2025 08:44Сомнительно, ибо серва использует какой-то хитрый механизм из винды для корпоративного деплоя. Но через memdisk может и прокатит.
key08rus
Забавное совпадение. Занимался вчера почти тем же самым, но на IBM T22 и под Linux
vladkorotnev Автор
По ощущениям, линух куда проще такое извращение переживает, и гайд бы сократился раза в два
key08rus
Как выяснилось, не совсем. На старых (точнее, древних) клиентах есть некоторые ошибки в реализации PXE. Лишние символы в запрашиваемом имени файла.
vladkorotnev Автор
Хотя бы так. Тут тоже, может быть, дело не в роутере, а в клиенте, который всегда на default gateway ищет сервер.
И ЕМНИП попадались клиенты, которые вообще вместо TFTP требуют что-то там на нетвари, но тут уже не помню %)
key08rus
В роутере. Точнее, в DHCP-сервере. Собственно, как раз в опции next-server