Переустановка Windows почти всегда упирается в одну и ту же стену. Система встала, рабочий стол загрузился, а сеть не работает, потому что нет драйвера сетевой карты. Скачать его неоткуда, ведь интернета как раз и нет. Замкнутый круг, в который попадал почти каждый, кто хоть раз ставил систему с нуля на ноутбук, чья модель давно снята с производства. Производитель убрал страницу поддержки, диск с драйверами потерялся лет десять назад, а нужный файл лежит ровно там, где его уже не достать.
Выход из этой ловушки прост и известен далеко не всем. Все драйверы, которые сейчас работают в системе, можно вытащить заранее и сложить в обычную папку. Потом эту папку переносят на флешку, и она превращается в персональный комплект драйверов под конкретное железо. Никаких поисков по сайтам, никакой угадайки с версиями. Встроенные инструменты Windows делают это бесплатно, без сторонних программ вроде DriverMax или Double Driver, которые любят подсунуть рекламу и лишний софт.
Чем отличается драйвер из хранилища системы от установочного пакета производителя
Прежде чем что-то экспортировать, стоит понять, что именно лежит внутри Windows. Каждый установленный драйвер попадает в особое место, которое называется хранилищем драйверов, Driver Store. Это защищённый каталог внутри системной папки, куда система складывает проверенные пакеты. Когда подключается новое устройство, Windows ищет подходящий драйвер именно здесь, и только потом обращается к интернету.
Важная деталь касается того, какие именно драйверы поддаются экспорту. Родные драйверы Microsoft, которые идут в комплекте с системой, трогать смысла нет, они и так присутствуют в любом дистрибутиве. А вот сторонние пакеты от производителей оборудования, те самые, что добавляют видеокарту, чипсет, звук, сетевую плату, регистрируются в хранилище под безликими именами вида oem0.inf, oem5.inf, oem27.inf. Цифра присваивается по порядку добавления, и угадать по ней назначение драйвера невозможно. Именно эти OEM-пакеты и представляют ценность для резервной копии.
Один экспортированный пакет это не единственный файл. Внутри него лежит INF-файл с описанием, а рядом сами рабочие файлы с расширениями SYS, DLL, CAT, иногда CAB. INF играет роль инструкции, по которой система понимает, к какому устройству и как прикручивать драйвер. Цифровая подпись хранится в CAT-файле и подтверждает, что пакет не подделан. Поэтому копировать нужно всё содержимое папки целиком, выдёргивать только INF бессмысленно.
Создание полной копии через встроенную утилиту pnputil
Самый универсальный способ опирается на утилиту pnputil.exe. Она присутствует даже в старых сборках Windows и не требует ничего скачивать. Работает через командную строку, запущенную обязательно от имени администратора, иначе доступа к хранилищу не будет.
Прежде чем экспортировать, полезно одним взглядом оценить, что вообще накопилось в хранилище. Команда перечисления выводит все сторонние пакеты с их именами, поставщиками и датами:
pnputil /enum-drivers
Этот список становится отправной точкой. По нему понятно, сколько драйверов предстоит сохранить и какие имена oemN.inf соответствуют нужным устройствам. Дальше готовят пустую папку, потому что сама команда экспорта каталог не создаёт и при его отсутствии завершится ошибкой. Затем запускают выгрузку, где звёздочка означает "все пакеты сразу":
mkdir C:\DriversBackup
pnputil /export-driver * C:\DriversBackup
После запуска утилита пробегает по всему хранилищу и раскладывает каждый драйвер в отдельную подпапку внутри указанного каталога. Получается аккуратная структура, где один пакет лежит изолированно от другого. На обычном домашнем компьютере таких пакетов набирается от двух до трёх десятков, на рабочей станции с богатой периферией бывает и полсотни. Объём редко превышает гигабайт, чаще укладывается в несколько сотен мегабайт, так что обычная флешка справится с запасом.
Иногда нужен не весь комплект, а конкретный пакет, например драйвер сетевой карты, чтобы перенести его на близнеца той же модели. Тогда вместо звёздочки подставляют имя INF-файла, подсмотренное в выводе перечисления или в диспетчере устройств:
pnputil /export-driver oem5.inf C:\DriversBackup
В результате в папке окажется только пакет нужного устройства со всеми сопутствующими файлами. Такой точечный экспорт удобен, когда заранее известно, какого именно драйвера не хватит после переустановки.
Альтернативные пути через DISM и командлет PowerShell
Тот же результат достигается ещё двумя штатными инструментами, и выбор обычно диктуется привычкой. Первый это DISM.exe, утилита обслуживания и развёртывания образов. Серьёзный инструмент, которым чинят системные файлы и собирают дистрибутивы, он же одной строкой выгружает все драйверы:
dism /online /export-driver /destination:C:\MyDrivers
Параметр online означает работу с текущей запущенной системой. По мере выполнения DISM выводит прогресс построчно, и зрелище наглядное: в консоли бегут сообщения вида "Экспорт 1 из 27, пакет успешно экспортирован", и так до конца списка. Сразу видно, сколько драйверов нашлось и не споткнулся ли процесс. Разница между DISM и pnputil почти косметическая, оба тянут одни и те же OEM-пакеты из одного хранилища.
Второй путь понравится тем, кто живёт в PowerShell. Командлет Export-WindowsDriver делает то же самое, но даёт приятный бонус. Он возвращает объект с описанием каждого пакета, который легко превратить в человекочитаемый отчёт. Базовый экспорт с сохранением списка в переменную выглядит так:
$drivers = Export-WindowsDriver -Online -Destination D:\DriverBackup
$drivers | Select-Object ProviderName, ClassName, Date, Version |
Export-Csv D:\DriverBackup\drivers_list.csv -NoTypeInformation -Encoding UTF8
Рядом с драйверами появится таблица в формате CSV, которую открывают в редакторе электронных таблиц. Кодировка UTF-8 здесь не прихоть, без неё кириллица в названиях поставщиков превратится в кашу. Открыв такой файл через полгода, сразу видно, чей это драйвер, для какого класса оборудования и какой свежести.
Отдельная сила PowerShell проявляется при работе с офлайн-образом. Если система не запущена, а просто смонтирована в каталог, командлет вытащит драйверы и оттуда. Достаточно вместо ключа Online указать путь к смонтированному образу, и выгрузка пройдёт так же спокойно, как с живой системой. Это выручает при подготовке эталонных сборок и миграции на новое оборудование.
Поиск нужного драйвера среди десятков установленных пакетов
Когда в системе полсотни драйверов, искать нужный по безликим именам oemN.inf утомительно. Здесь выручает фильтрация, и удобнее всего она устроена в PowerShell. Командлет Get-WindowsDriver показывает полный список сторонних драйверов и умеет открывать его в табличном окне с сортировкой и поиском:
Get-WindowsDriver -Online |
Select-Object Driver, ClassName, ProviderName, Date, Version | Out-GridView
Если же нужен драйвер конкретного производителя или класса, выборку сужают условием. Например, чтобы найти именно сетевой драйвер Realtek и узнать его имя перед точечным экспортом, пишут так:
Get-WindowsDriver -Online |
Where-Object { ($_.ProviderName -like "Realtek*") -and ($_.ClassName -like "Net*") }
Из вывода берут имя пакета и выгружают его отдельной командой pnputil, как показано выше. Такой подход экономит время на машинах с богатой периферией, где вручную перебирать весь список означает потерять четверть часа на ровном месте.
Почему драйверы принтеров не всегда попадают в общую копию
С драйверами печати связана отдельная засада, о которую спотыкаются многие. Логика подсказывает, что общая команда экспорта заберёт вообще всё, включая принтеры. На практике это не так, и причина кроется в особенностях устройства самой системы печати.
Большинство драйверов принтеров, особенно для старых моделей, не регистрируются в хранилище как обычные OEM-пакеты. Они живут в подсистеме печати по своим правилам и проходят мимо стандартного экспорта pnputil и DISM. В результате человек делает резервную копию, искренне считает, что сохранил всё, а после переустановки обнаруживает, что принтер снова просит драйвер. И вот его-то найти бывает труднее всего, ведь производитель старого аппарата давно убрал поддержку с сайта.
Здесь спасает то, что часть драйверов печати всё же попадает в хранилище и экспортируется штатно. Если в общей копии нашёлся подходящий oemN.inf для принтера, его восстанавливают как любой другой пакет. Для остального оборудования печати приходится отдельно сохранять оригинальные установщики, пока они ещё доступны. Здравый подход состоит в том, чтобы скачивать и складывать дистрибутивы драйверов принтеров заранее, не дожидаясь момента, когда модель окончательно исчезнет из сети.
Проверка готовой копии и обратная установка после переустановки
Распространённая ошибка в том, что копию делают и тут же забывают, а её работоспособность выясняется только в стрессовый момент переустановки. Куда спокойнее потратить пять минут сразу. Проверка начинается с взгляда на структуру папки: внутри должны лежать подпапки, по одной на каждый пакет, а не пара одиноких файлов. Если подпапок подозрительно мало на машине с богатой периферией, экспорт прошёл не до конца или запускался без прав администратора. Затем выборочно заглядывают внутрь нескольких подпапок, где обязан присутствовать INF-файл и рядом рабочие файлы драйвера. Папка с одним лишь INF без сопровождения нерабочая, такой драйвер не восстановится.
Особое внимание уделяют драйверам критичного оборудования, прежде всего сетевой карты и чипсета, потому что без сети после переустановки докачать остальное будет неоткуда. Имя сетевого драйвера подсматривают в диспетчере устройств заранее и проверяют, что соответствующий пакет лёг в копию.
Ради восстановления всё и затевается, поэтому обратную команду стоит держать в голове. После переустановки весь набор заливают в систему одной строкой. Ключ subdirs заставляет утилиту пройти по всем вложенным папкам, а install сразу ставит драйверы на подходящие устройства:
pnputil /add-driver C:\DriversBackup\*.inf /subdirs /install
Команда пробегает по каждому INF в копии, добавляет пакет в хранилище и тут же привязывает к оборудованию, которое его ждёт. Сетевая карта оживает, и дальше остальное при необходимости докачивается уже из сети. Этот единственный момент истины и оправдывает все приготовления, поэтому хорошо бы проверить связку экспорт и установка хотя бы раз на спокойную голову, а не впервые на разобранной системе.
Как хранить копию, чтобы она пригодилась в нужный момент
Сделать копию это половина дела. Вторая половина в том, чтобы она нашлась в нужный момент и оказалась рабочей. Папку с драйверами держат не на системном диске, который форматируется при переустановке, а на отдельном разделе, внешнем диске или флешке. Звучит очевидно, но именно потеря копии вместе с системным разделом обнуляет все старания.
Полезно подписывать копию датой и моделью компьютера прямо в имени папки, особенно когда машин несколько. Драйвер от одного ноутбука на другом не просто бесполезен, он может встать криво и устроить конфликт оборудования, ведь пакет пишется под конкретный идентификатор устройства. Перенос имеет смысл только между машинами с идентичным или очень близким железом, например внутри одной партии корпоративных ноутбуков. Текстовый отчёт или CSV, который генерирует PowerShell, тут работает как опись, по нему всегда ясно, под какое железо собран комплект.
Свежесть копии тоже имеет значение. Драйверы обновляются, и копия годовой давности может содержать версию, в которой уже залатали ошибки. Разумная привычка обновлять резервную копию после крупных апдейтов системы или замены комплектующих превращает разовую затею в надёжную страховку. Пара минут на команду экспорта экономит потом часы блужданий по поиску забытого драйвера для забытого устройства, и в этом весь смысл затеи.