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

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

Но как обычно, беда вылезла, откуда не ждали.

После подкидывания блока питания оказалось, что винчестер девственно чист. Однако попытки загрузиться с флешки, внешнего диска, или даже внешнего флопика, результата не приносили — неумолимо вылезала надпись «Operating System Not Found», да и названия устройств в биосе не появлялись.

Беглый гуглёж показал — ранние серии X40 были очень часто подвержены внезапной смерти мультиконтроллера (ICH6). Буквально подышишь не в ту сторону, втыкая флешку — и вот у тебя уже нету ни USB, ни чего-нибудь ещё.

Добрые люди дали посмотреть на схему, и опасения подтвердились: ICH6 отвечает за связь с аудиокодеком, блютусом и USB. Как впоследствии выяснится, ни звук, ни блютус, ни USB тоже не работают.

Удивило, конечно, что SD-ридер тут висит на шине PCI, и поэтому работает. Впрочем, это я уже забегаю вперёд, ведь загрузиться с него нельзя.

SD-ридер на PCI-шине, рядом с сетевыми адаптерами
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:

Опция 150 для PXE не нужна, у меня она прописана для работы в локалке цисковских телефонов
Опция 150 для PXE не нужна, у меня она прописана для работы в локалке цисковских телефонов

В качестве сервера был поднят 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, впрочем, нашёлся другой способ:

  1. Берём образ Windows Server 2003 SP1 (важно: именно SP1) и вытаскиваем оттуда командой expand из папки I386 файлы

    1. STARTROM.COM

    2. SETUPLDR.EXE — переименовываем в NTLDR (именно из EXE, не из BIN!)

    3. NTDETECT.COM

  2. Кладём это всё в корень нашего TFTP-сервера, а рядом кладём образ самого Windows PE, собранный из того же Server 2003 SP1.

  3. Создаём файл с именем 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-канале 

Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.

Комментарии (14)


  1. key08rus
    12.11.2025 08:44

    Забавное совпадение. Занимался вчера почти тем же самым, но на IBM T22 и под Linux


    1. vladkorotnev Автор
      12.11.2025 08:44

      По ощущениям, линух куда проще такое извращение переживает, и гайд бы сократился раза в два


      1. key08rus
        12.11.2025 08:44

        Как выяснилось, не совсем. На старых (точнее, древних) клиентах есть некоторые ошибки в реализации PXE. Лишние символы в запрашиваемом имени файла.


        1. vladkorotnev Автор
          12.11.2025 08:44

          Хотя бы так. Тут тоже, может быть, дело не в роутере, а в клиенте, который всегда на default gateway ищет сервер.

          И ЕМНИП попадались клиенты, которые вообще вместо TFTP требуют что-то там на нетвари, но тут уже не помню %)


          1. key08rus
            12.11.2025 08:44

            В роутере. Точнее, в DHCP-сервере. Собственно, как раз в опции next-server


  1. nickston
    12.11.2025 08:44

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


    1. vladkorotnev Автор
      12.11.2025 08:44

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


      1. nickston
        12.11.2025 08:44

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


        1. vladkorotnev Автор
          12.11.2025 08:44

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


  1. domix32
    12.11.2025 08:44

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


    1. vladkorotnev Автор
      12.11.2025 08:44

      Сомнительно, ибо серва использует какой-то хитрый механизм из винды для корпоративного деплоя. Но через memdisk может и прокатит.


    1. TemArtem
      12.11.2025 08:44

      Через Serva скорее всего нет, она заточена под механизмы сетевой установки именно Windows (RIS/WDS), а вот через iPXE и memdisk - вполне возможно. Если ISO-образ ReactOS умеет загружаться как "live CD", то memdisk должен его подхватить


  1. TemArtem
    12.11.2025 08:44

    Вся эта возня с PXE - это прекрасно, но не проще ли было просто вытащить винчестер?) Да, он редкий, 1.8" IDE, но адаптеры на алике стоят недорого, заказал бы за 300 рублей переходник IDE 1.8" -> USB, спокойно залил бы образ на любом другом компе и вставил обратно, получилось бы в сто раз быстрее и надежнее. Но конечно не так интересно)


    1. vladkorotnev Автор
      12.11.2025 08:44

      И нафига потом этот одноразовый переходник в хозяйстве нужен будет? %)