2009-01-15

Пара способов быстро и просто "оживить" Windows 2000/XP

Общеизвестным фактом является то, что великая и могучая операционная система Windows имеет обыкновение временами падать. Делает она это по-разному, с разной частотой и сокрушительной силой. Мне, как работнику весьма крупной компании, занимавшемуся несколько лет поддержкой работоспособности пользовательских машин, известно много-много-много самых различных случаев, когда "вчера все работало, а сегодня...". А сегодня не запускается autocad, в телефонном справочнике кракозябры, не загружается профиль пользователя, система непонятно тормозит, Word не хочет открывать документ, система падает в синий экран смерти. Перечислять так или иначе возникающие глюки можно долго. Иногда они связаны с криворуким пользователем, который смог пролезть куда не надо и сделать что не положено, иногда - причина кроется в аппаратной части компьютера. Хотя аппаратные глюки бывают очень впечатляющими и интересными, заставляющими несколько часов кряду корпеть над поиском причины неадекватного поведения машины, мне бы хотелось очень-очень кратко написать о том, что можно сделать при подозрении, что виновата в глюках таки сама система.

Я не великий гуру ОС Windows, и мне не хотелось бы разбирать сложные системы наподобие бэкапов сохраняемых на серверах, тонких клиентов и прочего-прочего, что труднореализуемо и с чем я не имел опыта. Мой опыт - это сетка на 1000++ компьютеров, доменная аутентификация, юзеры под Power Users, частые перестановки людей и компов, вагон разнообразного софта кочующего промеж компов и яростно замусоривающего реестр и системный раздел диска. Машинки самые разношерстные по ттх, с 2000 или XP на борту. В этих условиях машинки часто падают, и хочется иметь возможность быстро откачать очередную. Особенно если владелец стоит с ножом у горла со словами "Почему не работает? Вы срываете нам сроки!". Но хватит лирики.

Исходя из своего опыта могу сказать: не всегда, но довольно часто заглючившую винду можно легко и просто привести в нормальное состояние, иногда получив вполне рабочую систему, иногда - систему которая может проработать необходимый минимум до сдачи горящего проекта. В конце концов что по сути может сломаться в винде? Системные файлы и реестр. Вот их восстановлением и стоит озаботиться.

Файлы.
Самый прямой и брутальный способ спасти системные файлы - делать полный бэкап системы, причем желательно не встроенным архиватором, к которому есть существенные претензии, а сторонним софтом. Задача прямо скажем трудная, если речь идет не о конторе с 10ю компьютерами. Поэтому копнем что предлагает винда для сохранения своего добра.
А предлагает она консольную утилиту sfc, которая может сверить часть системных файлов с файлами дистрибутива. Есть подводный камень - дистрибутив должен содержать интегрированный сервиспак именно той версии (и, разумеется, языка), которая установлена на компьютере. Второй камень - дистрибутив должен быть воткнут в привод имеющий букву, соответствующую букве привода, с которого система ставилась. То есть если система ставилась на диск C: с DVD-ROM'а D:, а потом дивидюк сняли и заменили на второй хард, который получил ту же букву, то ничего не выйдет. Проще всего скопировать файлы с компакт-диска в локальную папку, например C:\windistr (таким образом чтобы внутри папки C:\windistr\ оказалась папка i386) и поправить пути в реестре. Последнее можно сделать приготовленным .reg-файлом, примерно таким:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup]
"SourcePath"="c:\\windistr\\"
"ServicePackSourcePath"="c:\\windistr\\"


(Стоит обратить внимание на то, что в файле реестра слеши (\) экранируются и потому удваиваются. Если менять реестр вручную, ничего удваивать не нужно.)

Когда файлы приготовлены, в реестр внесены правки пути и совершена перезагрузка (без этого не заработает!), можно открыть консоль и набрать

sfc /scannow
или
sfc /scanboot

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

Если применение утилиты sfc по каким-либо причинам невозможно, можно попробовать переустановить текущий сервиспак и Internet Explorer - в ряде случаев это помогает вернуть к жизни неработающие службы системы, поправить сбойные ветки реестра.

Если файлы системы можно попробовать вернуть с помощью утилиты sfc или путем переустановки сервиспака и IE, и, в ряде случаев довольно легко и просто вернуть работоспособность системы не проводя никаких предварительных операций (за исключением поиска дистрибутива Windows, инсталлятора сервиспака и IE), то восстановление реестра требует наличие бэкапа этого самого реестра. А ведь Windows 2000 вообще не имеет штатной службы, производящей целенаправленный бэкап. А если речь идет об XP, то ее встроенная служба восстановления, хоть и сохраняет точки восстановления, содержащие в себе в том числе слепки реестра, но во-первых, делает их не регулярно, во-вторых, сами точки получаются избыточными по размеру, при том что восстановить состояние из этих точек получается далеко не всегда. Так или иначе я долго самыми теплыми словами вспоминал линейку Windows 9x, в которой реестр бэкапился при загрузке и хранил 5, если не ошибаюсь, последних слепков. Для Win 2000/XP бэкап реестра фактически сводится к сохранению файлов из %windir%\system32\config:
default
SAM
SECURITY
software
system

Эти файлы хранят все ветки реестра за исключением веток профилей пользователей. Последние, впрочем, лично я не вижу особого смысла бэкапить, так как если страшный глюк распространяется лишь на 1 профиль в системе, то, пожалуй, проще его удалить и пересоздать, чем заниматься восстановлением. Тем более что для этого придется озаботиться не только сохранением реестра профиля, но и всех системных файлов заключенным в нем.

Итак, в ходе недолгого поиска удалось обнаружить консольную утилиту, умеющую делать именно то, что нужно - создавать бэкап файлов реестра, копируя их в указанный каталог. Утилита называется erunt и она как нельзя лучше подошла для решения задачи, так как во-первых, как я уже сказал, она консольная, что позволяет запускать ее скриптом, а во-вторых, она позволяет сохранять не более N копий реестра, при этом избегая создания нескольких копий за один день. В моем случае эта утилита запускается путем скрипта на VBS, стартуемого групповой политикой домена, примерно такого:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "\\srv\Script\script_run\registry_backup_test\autoback.exe C:\ERDNT\#Date# /noprogresswindow /days:5"

Этот скрипт, выполняемый при включении компьютера, сохраняет 5 последних копий реестра за разные дни в папку C:\ERDNT\, отводя под каждый бэкап отдельную папку с именем, соответствующим дате бэкапа. В случае потребности восстановить реестр, остается лишь загрузиться с какого-нибудь диска подобного Mini PE, и вернуть файлы на их законное место - %windir%\system32\config.

Используя утилиту sfc, имея под рукой инсталляторы сервиспака и Internet Explorer'а, а также копии реестра сделанные утилитой erunt, можно, не бросаясь в омут переустановки ОС, за 10-20 минут попробовать восстановить работоспособность Windows 2000/XP.

Комментариев нет:

Отправить комментарий