Диск восстановления системы

Опубликовано: 16.06.2011
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке
Содержание
Вступление

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

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

Наиболее распространенная операционная система на загрузочных дисках - это Windows PE разных версий. Такое распространение этой операционной системы связано с тем, что она позволяет запускать множество стандартных программ Windows, не требующих расширенных динамических библиотек и ресурсов, что вполне достаточно для восстановления работоспособности компьютера и копирования данных с поврежденной системы.

Создание собственного диска восстановления

Для того, чтобы создать собственный диск восстановления для операционной системы семейства Windows, потребуется пакет WAIK - автоматизированный инсталяционный комплект Windows, драйвера компьютера, на котором и для которого создается диск восстановления, дополнительные программы и скрипты, перезаписываемый DVD и привод для записи дисков.

Процесс создания загрузочного диска разбит на фазы:

  1. Установка WAIK и подготовка скриптов к работе.
  2. Сборка загрузочного диска.
  3. Создание резервной копии системы с помощью загрузочного диска.
  4. Создание диска восстановления.
Установка WAIK и подготовка скриптов к работе

Чтобы собрать загрузочный диск, нужно установить на компьютер пакет WAIK для Windows 7, который можно взять с сайта Microsoft, а также создать каталог со следующей структурой:

DiskBuilder\
	   Sources\                          - папки с исходниками загрузчика
	   |   Drivers                       - папки с драйверами
	   |   DVDDrive\                     - папки, которые будут записаны на DVD
	   |   |   Image                     - папка для файла резервной копии системы
	   |   |   Utils                     - папка с дополнительными программами
	   |   VirtualDrive\                 - папки, которые будут внедрены в загрузчик
	   |       Utils                     - вспомогательные программы
	   |       |   7-Zip                 - архиватор
	   |       |   ImageX                - утилита работы с образами системы
	   |       |   Notepad2              - текстовый редактор
	   |       |   Scripts               - папка со скриптами
	   |       |   |   Capture.bat       - скрипт создания резервной копии
	   |       |   |   DiskPart.bat      - скрипт разметки диска
	   |       |   |   DiskPart00.txt    - вспомогательный файл
	   |       |   |   DiskPart01.txt    - вспомогательный файл
	   |       |   |   label.exe         - утилита для изменения метки диска
	   |       |   |   Label.txt         - вспомогательный файл
	   |       |   |   NetInit.bat       - скрипт подключения сети
	   |       |   |   Restore.bat       - скрипт восстановления системы
	   |       |   |   Robocopy.exe      - утилита копирования файлов
	   |       |   |   Starter.hta       - оболочка загрузочного диска
	   |       |   UnrealCommander       - файловый менеджер
	   |       Windows                   - служебная папка виртуальной ОС
	   |           System32              - служебная папка виртуальной ОС
	   |               winpe.bmp         - обои виртуальной ОС
	   |               winpeshl.ini      - команды автозапуска виртуальной ОС
	   1_MakeStructure.bat               - скрипт подготовки структуры загрузчика
	   2_PrepareBoot.bat                 - скрипт подготовки образа загрузчика
	   3_MakeBoot.bat                    - скрипт создания загрузочного диска
	   4_MakeRestoreDisk.bat             - скрипт создания диска восстановления

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

Итак, папка DiskBuilderсостоит из:

  • Скриптов сборки загрузчика и диска восстановления, которые находятся в корне папки.
  • Драйверов для запуска виртуальной операционной системы, например драйвера SATA-устройств и сетевых карт. Не следует копировать все существующие драйвера от компьютера для внедрения в загрузчик, так как во-первых, в Windows PE уже существует набор стандартных драйверов, а во-вторых наличие некоторых драйверов может привести к конфликту и виртуальная ОС вообще не загрузится. Рекомендуется внедрять только те драйвера, которые действительно нужны для нормальной работы Windows PE. В архиве с исходниками в папке драйверов уже находятся три драйвера сетевых карт, которых нет в стандартной поставке загрузчика.
  • Структуры папок, которые будут скопированы на загрузочный DVD. Сюда можно поместить программы и утилиты, которые могут потребоваться в виртуальной ОС.
  • Структуры папок, которые будут внедрены в загрузчик. Сюда нужно поместить программы, утилиты и скрипты, которые требуются для работы в виртуальной ОС. Слудует учесть тот факт, что размер виртуальной ОС будет увеличен на то количество байт, сколько занимает папка VirtualDrive. То есть чем больше эта папка, тем больше требуется оперативной памяти для запуска Windows PE.

Описание и текст скриптов, необходимых для работы в виртуальной операционной системе.

Сценарий создания образа (резервной копии) операционной системы (файл "Capture.bat"):

@echo off
	echo.
	echo.
	echo "The image capture"
	"%~DP0..\ImageX\imagex.exe" /capture C:\ C:\Image.wim DiskC
	echo.
	echo.
	echo "Please remove DVD from the DVD-drive and reboot the computer"
	echo.
	echo.
	pause

Этот сценарий упаковывает содердимое диска C: в архив с именем Image.wim.

Примечание. Следует учесть, что размер стандартного DVD 4.7 Гб, поэтому образ системы не должен превышать 4.5 Гб, чтобы была возможность записи этого образа на компакт-диск. Иными словами, перед созданием резервной копии системы следует удалить с системного диска все ненужные программы и документы.

Сценарий восстановления образа операционной системы - восстановление системы (файл "Restore.bat"):

@echo off
	echo.
	echo.
	echo "Formating the disk"
	type "%~DP0Label.txt" | "%~DP0Label.exe" C:
	echo Y | format C: /Q /FS:NTFS /V:System /X>nul
	echo.
	echo.
	echo "The image deployment"
	"%~DP0..\ImageX\imagex.exe" /apply "%1\Image\Image.wim" 1 C:\
	echo.
	echo.
	echo "Please remove DVD from the DVD-drive and reboot the computer"
	echo.
	echo.
	pause

Этот сценарий форматирует диск C:, распаковывает образ операционной системы из архив с именем Image.wim на диск C:.

Сценарий подключения сети (файл "NetInit.bat"):

@echo off
	echo.
	echo.
	echo "Initializing the network adapter"
	wpeutil InitializeNetwork>nul
	ping -n 20 127.0.0.1>nul
	wpeutil DisableFirewall>nul
	echo.
	echo.
	ipconfig /renew
	echo.
	echo.
	echo "The network initialization is complete. Please review the log in this window."
	pause

Сценарий разметки диска (файл "DiskPart.bat" и вспомогательные файлы "DiskPart00.txt" и "DiskPart01.txt"):

@echo off
	echo.
	echo.
	echo "Creating the new disk structure"
	diskpart.exe /S "%~DP0DiskPart00.txt">nul
	echo.
	echo.
	echo "Formating the disk"
	echo Y | format C: /Q /FS:NTFS /V:>nul
	diskpart.exe /S "%~DP0DiskPart01.txt"
	echo.
	echo.
	echo "The disk partitioning is completed. Please review the log in this window."
	pause
select disk 0
	clean
	create partition primary
	select partition 1
	active
	assign letter=C
select disk 0
	select partition 1
	detail partition

Этот сценарий удаляет все разделы диска и создает один единственный раздел на весь диск.

Оболочка для виртуальной ОС (файл "Starter.hta"):

<html>
	   <head>
	       <title>Starter</title>
	       <hta:application
	           id="oStarter"
	           border="none"
	           caption="no"
	           contexmenu="no"
	           icon="Starter_files\starter.ico"
	           innerborder="no"
	           maximizebutton = "no"
	           minimizebutton = "no"
	           scroll="no"
	       />
	       <!-- сценарий обработки действий пользователя, динамическая часть приложения -->
	       <script type="text/vbscript" language="VBScript.Encode">
	           
	           ' модель компьютера, для которого сделан диск восстановления
	           Const gComputerType = "Восстановление компьютера"
	       
	           ' изменение размеров окна приложения при запуске
	           sub windowOnLoad
	               iWidth = 640
	               iHeight = 480
	               iHorizontal = 800
	               iVertical = 600
	               iLeft = (iHorizontal - iWidth) / 2
	               iTop = (iVertical - iHeight) / 2
	               Self.Focus()
	               Self.resizeTo iWidth, iHeight
	               Self.moveTo iLeft, iTop - 15
	               HeaderZone.innerHTML = gComputerType
	           end sub
	
	           ' определение буквы DVD-привода
	           function DetectDVD
	               sTempValue = ""
	               sComputer = "."
	               set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
	                 sComputer & "\root\cimv2")
	               set colDisks = oWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
	               for Each oDisk in colDisks
	                   if UCase(oDisk.VolumeName) = UCase("BootDisk") then sTempValue = _
	                     oDisk.Name
	               Next
	               DetectDVD = sTempValue
	           end function
	
	           ' прорисовка служебной зоны приложения
	           sub DrawExtendedZone(sCommand)
	               select case sCommand
	                   case "Restoration"
	                       sContent = sContent & "<div class=""header4"">Восстановление</div>"
	                       sContent = sContent & "<div class=""NormalText""><br />" & _
	                         "</div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Эта опция разворачивает на компьютере сохраненный образ.</div>"
	                       sContent = sContent & "<div class=""NormalText""><br /></div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Вы уверены, что хотите развернуть этот образ?</div>"
	                       sContent = sContent & "<div class=""NormalLink"" id=""Restore"" " & _
	                         "onclick=RunApplication(me.id) onmouseover=me.className=" & _
	                         "'NormalLinkMouseOver' onmouseout=me.className='NormalLink'>" & _
	                         "- Да, восстановить образ.</div>"
	                       sContent = sContent & "<div class=""NormalLink"" onclick=" & _
	                         "DrawExtendedZone(AGCLogo) onmouseover=me.className=" & _
	                         "'NormalLinkMouseOver' onmouseout=me.className=" & _
	                         "'NormalLink'>- Нет, отменить действие.</div>"
	                   case "DiskPartitioning"
	                       sContent = sContent & "<div class=""header4"">Разметка</div>"
	                       sContent = sContent & "<div class=""NormalText""><br />" & _
	                         "</div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Эта опция создает один раздел на весь диск компьютера.</div>"
	                       sContent = sContent & "<div class=""NormalText""><br /></div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Вы уверены, что хотите уничтожить все данные и сделать новую " & _
	                         "разметку диска компьютера?</div>"
	                       sContent = sContent & "<div class=""NormalLink"" " & _
	                         "id=""ApplyDiskStructure"" " & _
	                         "onclick=RunApplication(me.id) onmouseover=me.className=" & _
	                         "'NormalLinkMouseOver' onmouseout=me.className='NormalLink'>" & _
	                         "- Да, применить новую разметку диска.</div>"
	                       sContent = sContent & "<div class=""NormalLink"" onclick=" & _
	                         "DrawExtendedZone(AGCLogo) onmouseover=me.className=" & _
	                         "'NormalLinkMouseOver' onmouseout=me.className=" & _
	                         "'NormalLink'>- Нет, отменить действие.</div>"
	                   case else
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Этот загрузочный диск предназначен для восстановления " & _
	                         "компьютера, указанного в названии этого окна.</div>"
	                       sContent = sContent & "<div class=""NormalText""" & _
	                         "><br /></div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Процедура восстановления сотрет все данные на компьютере и " & _
	                         "вернет систему к моменту создания образа восстановления.</div>"
	                       sContent = sContent & "<div class=""NormalText""><br /></div>"
	                       sContent = sContent & "<div class=""NormalText"">" & _
	                         "Чтобы восстановить систему нажмите кнопку ""Восстановить"".</div>"
	                       sContent = sContent & "<div class=""NormalText""><br /></div>"
	                       sContent = sContent & "<div class=""SmallText"">" & _
	                         "Для запуска командной строки можно воспользоваться сочетанием " & _
	                         "клавиш CTRL+Enter.</div>"
	                       sContent = sContent & "<div class=""SmallText"">" & _
	                         "Для запуска диспетчера файлов воспользоваться сочетанием " & _
	                         "клавиш CTRL+BackSpace.</div>"
	               end select
	               ExtendedZone.innerHTML = sContent
	           end sub
	
	           ' запуск выбранной программы
	           sub RunApplication(sApplication)
	               sCommandLine =""
	               sContent = ""
	               sDVDLetter = DetectDVD
	               set oShell = CreateObject("Wscript.Shell")
	               SystemDrive = oShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%")
	               ' пути к запускаемым программам и сценариям
	               select case sApplication
	                   case "Restore"
	                       if CheckFile(SystemDrive & "\Utils\Scripts\Restore.bat") = true _
	                         then sCommandLine = "%COMSPEC% /C " & _
	                         SystemDrive & "\Utils\Scripts\Restore.bat " & sDVDLetter
	                   case "ApplyDiskStructure"
	                       if CheckFile(SystemDrive & "\Utils\Scripts\DiskPart.bat") = true _
	                         then sCommandLine = "%COMSPEC% /C " & _
	                         SystemDrive & "\Utils\Scripts\DiskPart.bat"
	                   case "CommandPrompt"
	                       sCommandLine = "%ComSpec%"
	                   case "FileManager"
	                       if CheckFile(SystemDrive & "\Utils\UnrealCommander\Uncom.exe") = _
	                         true then sCommandLine = SystemDrive & _
	                         "\Utils\UnrealCommander\Uncom.exe"
	                   case "NetworkInitialization"
	                       if CheckFile(SystemDrive & "\Utils\Scripts\NetInit.bat") = true _
	                         then sCommandLine = "%COMSPEC% /C " & _
	                         SystemDrive & "\Utils\Scripts\NetInit.bat"
	                   case "CaptureC"
	                       if CheckFile(SystemDrive & "\Utils\Scripts\Capture.bat") = true _
	                         then sCommandLine = "%COMSPEC% /C " & _
	                         SystemDrive & "\Utils\Scripts\Capture.bat"                    
	                   case else
	                       sCommandLine =""
	               end select
	               ' запуск программы или сценария и перерисовка служебной зоны приложения
	               if Len(sCommandLine) > 0 then
	                   oShell.Run sCommandLine,1,0
	                   sContent = sContent & "<div class=""NormalText"">" & _
	                     "Этот загрузочный диск предназначен для восстановления компьютера, " & _
	                     "указанного в названии этого окна.</div>"
	                   sContent = sContent & "<div class=""NormalText""" & _
	                     "><br /></div>"
	                   sContent = sContent & "<div class=""NormalText"">" & _
	                     "Процедура восстановления сотрет все данные на компьютере и вернет " & _
	                     "систему к моменту создания образа восстановления.</div>"
	                   sContent = sContent & "<div class=""NormalText""><br /></div>"
	                   sContent = sContent & "<div class=""NormalText"">" & _
	                     "Чтобы восстановить систему нажмите кнопку ""Восстановить"".</div>"
	               else
	                   sContent = sContent & "<div class=""header4"">Внимание</div>"
	                   sContent = sContent & "<div class=""NormalLink"">Извините, но " & _
	                     "этот диск не поддерживает выбранную опцию. За более подробной " & _
	                     "информацией обращайтесь к поставщику диска.</div>"
	               end if
	               ExtendedZone.innerHTML = sContent
	           end sub
	
	           ' пауза в работе сценария
	           sub ccSleep(seconds)
	               set oShell = CreateObject("Wscript.Shell")
	               cmd = "%COMSPEC% /c ping -n " & 1 + seconds & " 127.0.0.1>nul"
	               oShell.Run cmd,0,1
	           end Sub
	
	           ' проверка наличия файла
	           function CheckFile(sFilePath)
	               set oFSO = CreateObject("Scripting.FileSystemObject")
	               if oFSO.FileExists(sFilePath) then
	                   CheckFile = true
	               else
	                   CheckFile = false
	               end if
	           end function
	
	           function CtrlEnter(mEvent)
	               If (mEvent.keyCode=27) Then
	                   call DrawExtendedZone("")                
	               ElseIf (mEvent.keyCode=127) Then
	                   call RunApplication("FileManager")
	               ElseIf (mEvent.ctrlKey And mEvent.keyCode=10) Then
	                   call RunApplication("CommandPrompt")
	               End If
	           End function
	       </script>
	       
	       <!-- стили отображения элементов приложения -->
	       <style>
	           body
	           {
	               font-family: Tahoma;
	               background-color: #f6f8ff;
	               margin: 0px 0px 0px 0px;
	               padding: 5px 5px 5px 5px;
	           }
	           .button
	           {
	               border: 0px;
	               padding: 2px 3px 2px 3px;
	               margin: 0px 3px 0px 3px;
	               font-size: 90%;
	               text-align: center;
	               color: #f6f8ff;
	               background-color: #004c99;
	           }
	           .header1
	           {
	               font-size: 24pt;
	               font-weight: bold;
	               color: #3f52b8;
	               height: 48px
	           }
	           .header2
	           {
	               font-size: 20pt;
	               color: #3f52b8;
	               height: 32px;
	           }
	           .header3
	           {
	               font-size: 14pt;
	               color: #ff6633;
	           }
	           .header4
	           {
	               font-size: 14pt;
	               color: #3f52b8;
	           }
	           .NormalLink
	           {
	               font-size: 10pt;
	               color: black;
	               cursor: default;
	               text-align: left;
	               padding-right: 20px
	           }
	           .NormalLinkMouseOver
	           {
	               font-size: 10pt;
	               color: darkblue;
	               text-decoration: underline;
	               cursor: hand;
	               text-align: left;
	               padding-right: 20px
	           }
	           .ExitLink
	           {
	               font-size: 10pt;
	               color: #FF3300;
	               cursor: default;
	               text-align: right;
	               padding-right: 20px
	           }
	           .ExitLinkMouseOver
	           {
	               font-size: 10pt;
	               color: darkblue;
	               text-decoration: underline;
	               cursor: hand;
	               text-align: right;
	               padding-right: 20px
	           }
	           .NormalText
	           {
	               font-size: 10pt;
	               text-align: left;
	           }
	           .SmallText
	           {
	               font-size: 7pt;
	               text-align: left;
	           }
	           .NormalButton
	           {
	               height: 50px;
	               padding: 2px 3px 2px 3px;
	               margin: 0px 0px 0px 0px;
	               font-size: 12pt;
	               text-align: center;
	               color: darkblue;
	               font-weight: bold;
	           }
	       </style>
	</head>
	
	<!-- статическая часть приложения приложения -->
	<body onload=windowOnLoad() onkeypress=CtrlEnter(window.event)>
	   <div class="header1" id="HeaderZone">Restoration disk</div>
	   <table style="width: 100%;">
	       <tr>
	           
	           <!-- прорисовка кнопок и ссылок -->
	           <td style="width: 170px; text-align: right; vertical-align:top; height: 390px;">
	               <table>
	                   <tr>
	                       <td><input class="NormalButton" id="Restoration" type="button"
	                         value="Восстановить" onclick=DrawExtendedZone(me.id) /></td>
	                   </tr>
	                   <tr>
	                       <td>
	                           <div class="header3">Дополнительно</div>
	                           <table>
	                               <tr>
	                                   <td><div class="NormalLink" id="NetworkInitialization"
	                                     onclick=RunApplication(me.id)
	                                     onmouseover=me.className='NormalLinkMouseOver'
	                                     onmouseout=me.className='NormalLink'>Подключить сеть
	                                   </div></td>
	                               </tr>
	                               <tr>
	                                   <td><div class="NormalLink" id="CaptureC"
	                                     onclick=RunApplication(me.id)
	                                     onmouseover=me.className='NormalLinkMouseOver'
	                                     onmouseout=me.className='NormalLink'>
	                                       Снять образ с диска C:
	                                   </div></td>
	                               </tr>
	                               <tr>
	                                   <td><div class="NormalLink" id="DiskPartitioning"
	                                     onclick=DrawExtendedZone(me.id)
	                                     onmouseover=me.className='NormalLinkMouseOver'
	                                     onmouseout=me.className='NormalLink'>Разметить диск
	                                   </div></td>
	                               </tr>
	                               <tr>
	                                   <td><div class="NormalLink" id="CommandPrompt"
	                                     onclick=RunApplication(me.id)
	                                     onmouseover=me.className='NormalLinkMouseOver'
	                                     onmouseout=me.className='NormalLink'>Командная строка
	                                   </div></td>
	                               </tr>
	                               <tr>
	                                   <td><div class="NormalLink" id="FileManager"
	                                     onclick=RunApplication(me.id)
	                                     onmouseover=me.className='NormalLinkMouseOver'
	                                     onmouseout=me.className='NormalLink'>Диспетчер файлов
	                                   </div></td>
	                               </tr>
	                           </table>
	                       </td>
	                   </tr>
	               </table>
	           </td>
	           
	           <!-- прорисовка основы служебной зоны приложения -->
	           <td style="text-align: center; vertical-align:top;">
	               <div id="ExtendedZone">
	                   <div class="NormalText">Этот загрузочный диск предназначен для
	                     восстановления компьютера, указанного в названии этого окна.</div>
	                   <div class="NormalText"><br /></div>
	                   <div class="NormalText">Процедура восстановления сотрет все данные
	                     на компьютере и вернет систему к моменту создания образа
	                     восстановления.</div>
	                   <div class="NormalText"><br /></div>
	                   <div class="NormalText">Чтобы восстановить систему нажмите кнопку
	                     "Восстановить".</div>
	                   <div class="NormalText"><br /></div>
	                   <div class="SmallText">Для запуска командной строки можно воспользоваться
	                     сочетанием клавиш CTRL+Enter.</div>
	                   <div class="SmallText">Для запуска диспетчера файлов воспользоваться
	                     сочетанием клавиш CTRL+BackSpace.</div>
	               </div>
	           </td>
	       </tr>
	       <tr>
	           <td>
	               <div class="NormalText">версия 2.1</div>
	           </td>
	           <td>
	               <div class="ExitLink" id="LinkExit" onclick=self.close()
	                 onmouseover=me.className='ExitLinkMouseOver'
	                 onmouseout=me.className='ExitLink'>Перезагрузить</div>
	           </td>
	       </tr>
	   </table>
	</body>
	</html>
starter_hta.png

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

Сборка загрузочного диска
Примечание. Если на компьютере не установлен "The Windows® Automated Installation Kit (AIK) for Windows® 7", то можно воспользоваться готовым ISO-образом загрузочного, диска. Ссылка на архив с готовым образом загрузочного диска опубликована в конце статьи.

Чтобы создать загрузочный диск, необходимо выполнить скрипт "1_MakeStructure.bat" из подготовленного на предыдущем этапе каталога.

@echo ON
	set Destination=C:\BootDisk\
	rd "%Destination%" /S /Q
	md "%Destination%"
	md "%Destination%WinPE_Prepare"
	md "%Destination%WinPE_Prepare\DVDDrive"
	md "%Destination%WinPE_Prepare\VirtualDrive"
	md "%Destination%WinPE_Prepare\Drivers"
	xcopy "%~DP0Sources\Drivers" "%Destination%WinPE_Prepare\Drivers\" /S /E
	xcopy "%~DP0Sources\DVDDrive" "%Destination%WinPE_Prepare\DVDDrive\" /S /E
	xcopy "%~DP0Sources\VirtualDrive" "%Destination%WinPE_Prepare\VirtualDrive\" /S /E
	pause

Этот скрипт создает в папке C:\BootDisk копию подготовленного на предудущем этапе каталога.

Примечание. Временное отключение антивируса уменьшает время работы скриптов в несколько раз.

Далее необходимо скопировать необходимые драйвера дискового контроллера и сетевого адаптера в папку C:\BootDisk\WinPE_Prepare\Drivers, если драйвера не были добавлены на предыдущем этапе.

Теперь нужно отредактировать файл C:\BootDisk\WinPE_Prepare\VirtualDrive\Utils\Scripts\Starter.hta под свои нужды, например ввести название компьютера, для которой делается образ.

...            
	' модель компьютера, для которого сделан диск восстановления
	Const gComputerType = "Fujitsu-Siemens Amilo Pa2548"
	...

В папки C:\BootDisk\WinPE_Prepare\DVDDrive и C:\BootDisk\WinPE_Prepare\VirtualDrive можно добавить свои программы и скрипты, но следует учесть, что добавление файлов в папку VirtualDrive увеличивает размер загрузочного образа, то есть размер требуемой оперативной памяти для загрузки с диска восстановления.

После того, как все подготовительные операции сделаны, можно приступать к сборке загрузчика. Для этого необходимо запустить скрипт сборки файла boot.wim - скрипт "2_PrepareBoot.bat".

@echo on
	set Destination=C:\BootDisk\
	set PETools=%PROGRAMFILES%\Windows AIK\Tools\PETools\
	
	if /i %PROCESSOR_ARCHITECTURE% EQU X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	%PETools%..\%PROCESSOR_ARCHITECTURE%\Servicing;%PATH%;
	
	if /i %PROCESSOR_ARCHITECTURE% NEQ X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	%PETools%..\x86;%PETools%..\%PROCESSOR_ARCHITECTURE%\Servicing;^
	%PETools%..\x86\Servicing;%PATH%;
	
	cd /d %PETools%
	rd "%Destination%WinPE" /Q /S
	%COMSPEC% /C copype.cmd x86 "%Destination%WinPE"
	
	dism /Mount-Wim /WimFile:"%Destination%WinPE\winpe.wim" /index:1 ^
	/MountDir:"%Destination%WinPE\mount"
	
	dism /image:"%Destination%WinPE\mount" /Add-Package ^
	/PackagePath:"%PROGRAMFILES%\Windows AIK\Tools\PETools\x86\WinPE_FPs\winpe-scripting.cab"
	
	dism /image:"%Destination%WinPE\mount" /Add-Package ^
	/PackagePath:"%PROGRAMFILES%\Windows AIK\Tools\PETools\x86\WinPE_FPs\winpe-wmi.cab"
	
	dism /image:"%Destination%WinPE\mount" /Add-Package ^
	/PackagePath:"%PROGRAMFILES%\Windows AIK\Tools\PETools\x86\WinPE_FPs\winpe-hta.cab"
	
	dism /image:"%Destination%WinPE\mount" /Add-Driver ^
	/Driver:"%Destination%WinPE_Prepare\Drivers" /Recurse
	
	xcopy "%Destination%WinPE_Prepare\VirtualDrive" "%Destination%WinPE\mount\" /Y /S /E
	dism /Unmount-Wim /MountDir:"%Destination%WinPE\mount" /Commit
	imagex /export "%Destination%WinPE\winpe.wim" 1 "%Destination%WinPE\boot.wim"
	pause

Этот скрипт создает в папке C:\BootDisk рабочую директорию WinPE, в которую копирует стандартный загрузчик из WAIK, добавляет в него необходимые модули, внедряет драйвера, скрипты и программы. Результатом работы этого скрипта будет файл-загрузчик boot.wim.

После сборки загрузчика можно приступать к созданию загрузочного диска. Для этого нужно выполнить скрипт "3_MakeBoot.bat"

@echo ON
	set Destination=C:\BootDisk\
	set PETools=%PROGRAMFILES%\Windows AIK\Tools\PETools\
	
	if /i %PROCESSOR_ARCHITECTURE% EQU X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	%PETools%..\%PROCESSOR_ARCHITECTURE%\Servicing;%PATH%;
	
	if /i %PROCESSOR_ARCHITECTURE% NEQ X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	%PETools%..\x86;%PETools%..\%PROCESSOR_ARCHITECTURE%\Servicing;^
	%PETools%..\x86\Servicing;%PATH%;
	
	cd /d %PETools%
	xcopy %Destination%WinPE\boot.wim %Destination%WinPE\ISO\sources\ /Y
	xcopy %Destination%WinPE_Prepare\DVDDrive %Destination%WinPE\iso\ /Y /S
	
	oscdimg -m -n -h -lBootDisk -b%Destination%WinPE\etfsboot.com ^
	%Destination%WinPE\ISO %Destination%BootDisk.iso
	
	pause

Этот скрипт создает в папке C:\BootDisk рабочую директорию ISO, в которую копирует исправленный загрузчик boot.wim и структуру папок DVDDrive, послe чего создает ISO-образ загрузочного компакт-диска, который можно записать на DVD. Готовый ISO-образ будет находится по адресу C:\BootDisk\BootDisk.iso.

Создание резервной копии системы с помощью загрузочного диска

Когда загрузочный диск готов, а система очищена от лишний программ, документов, музыки, фильмов и файлов, можно приступить к созданию резервной копии системы.

Для создания образа системы необходимо загрузиться с готового загрузочного диска и выбрать "Снять образ диска С:". Скрипт снятия образа создаст архив с резервной копией системы в файле c:\image.wim.

capture.png

После успешного создания файла с образом операционной системы image.wim можно перезагрузить компьютер и приступить к созданию загрузочного диска восстановления.

Создание диска восстановления

Как только получен файл image.wim, его можно внедрить в загрузочный диск, сделав тем самым диск восстановления системы. Для этого необходимо скопировать файл image.wim в папку C:\BootDisk\DVDDrive\Image и запустить скрипт "4_MakeRestoreDisk.bat"

@echo on
	set Destination=C:\BootDisk\
	set PETools=%PROGRAMFILES%\Windows AIK\Tools\PETools\
	
	if /i %PROCESSOR_ARCHITECTURE% EQU X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	%PETools%..\%PROCESSOR_ARCHITECTURE%\Servicing;%PATH%;
	
	if /i %PROCESSOR_ARCHITECTURE% NEQ X86 ^
	set PATH=%PETools%;%PETools%..\%PROCESSOR_ARCHITECTURE%;^
	cd /d %PETools%
	
	oscdimg -m -n -h -lBootDisk -b%Destination%WinPE\etfsboot.com ^
	%Destination%WinPE\ISO %Destination%BootDisk.iso
	
	pause

Этот скрипт похож на скрипт "3_MakeBoot.bat". Результатом его работы будет готовый ISO-образ диска восстановления компьютера, который заменит предыдущий образ загрузочного диска C:\BootDisk\BootDisk.iso.

Далее необходимо записать сформированный ISO-образ на DVD - диск восстановления готов. Теперь, если что-то случиться с системой, можно вставить диск и восстановить сисему на момент создания резервной копии, но следует помнить, что все документы и прочие файлы будут стерты.

restore_01.png restore_02.png

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

Использование USB устройств в качестве загрузочного диска

Подготовленную структуру сборки диска восстановления можно использовать для создания загрузочного USB-диска или флэшки. Для создания такой флэшки потребуется всего лишь пометить главный раздел диска флэшки как активный и отформатирвать его в формате FAT32.

Порядок создания загрузочной флэшки:

  1. Скопировать все необходимые файлы с флэшки на диск компьютера (в процессе создания загрузочного раздела все данные с флэшки будут удалены).
  2. Запустить командную строку.
  3. Войти в утилиту разметки диска - выполнить команду DiskPart:
    C:\>DiskPart
    	
    	Microsoft DiskPart версии 6.1.7600
    	(С) Корпорация Майкрософт, 1999-2008.
    	На компьютере: TESTCOMPUTER
    
  4. Вывести на экран список дисков - выполнить команду List Disk:
    DISKPART> List Disk
    	
    	 Диск ###  Состояние      Размер   Свободно Дин  GPT
    	 --------  -------------  -------  -------  ---  ---
    	 Диск 0    В сети           74 Gбайт      0 байт
    	 Диск 1    В сети           14 Gбайт      0 байт
    
  5. Пометить флэшку как диск активный для работы - выполнить команду Select Disk (в примере флэшка имеет индекс 1, который определен исходя из размера флэшки):
    DISKPART> Select Disk 1
    	
    	Выбран диск 1.
    
  6. Очистить разметку диска - выполнить команду Clean:
    DISKPART> Clean
    	
    	DiskPart: очистка диска выполнена успешно.
    
  7. Создать главный раздел диска - выполнить команду Create Partition Primary:
    DISKPART> Create Partition Primary
    	
    	DiskPart: указанный раздел успешно создан.
    
  8. Пометить созданный раздел диска как активный - выполнить команду Active
    DISKPART> Active
    	
    	DiskPart: раздел помечен как активный.
    
  9. Выйти из утилиты разметки диска - выполнить команду Exit:
    DISKPART> Exit
    	
    	Завершение работы DiskPart...
    
  10. Отформатировать флэшку в формате FAT32 и дать ей метку BootDisk - выполнить команду Format (в примере флэшка названа буквой E:):
    C:\>Format E: /FS:FAT32 /Q
    	Вставьте новый диск в дисковод E:
    	и нажмите клавишу ENTER...
    	Тип файловой системы: RAW.
    	Новая файловая система: FAT32.
    	Быстрое форматирование: 15271 МБ
    	Инициализируется File Allocation Table (FAT)...
    	Метка тома (11 символов, ENTER - метка не нужна): BootDisk
    	Форматирование окончено.
    	     14,9 ГБ всего на диске.
    	Доступно:       14,9 ГБ.
    	
    	       8 192 байт в каждом кластере.
    	   1 952 639 кластеров на диске.
    	
    	          32 бит в каждой записи FAT.
    	
    	Серийный номер тома: 4A91-1BC8
    
  11. Скопировать содержимое папки C:\BootDisk\WinPE\ISO на флэшку, например командой XCopy:
    C:\>XCopy C:\BootDisk\WinPE\ISO\* E:\ /S /E /I /Y /Q
    	Скопировано файлов: 897.
    
  12. Загрузочный USB-диск готов к использованию.
Виталий Бочкарев
Внешние ссылки

Секция внешних ссылок, то есть ссылок на другие сайты, к которым данный ресурс не имеет никакого отношения. Данные ссылки размещены для удобства пользователей и не означают, что владелец сайта SysEngineering.ru одобряет содержание сайтов, приведенных ниже. Кроме этого, владелец сайта SysEngineering.ru не несет никакой ответственности за доступность этих ресурсов и за их контент.

sfx.png Средства для создания диска восстановления и загрузочный iso-образ
iso.png The Windows® Automated Installation Kit (AIK) for Windows® 7