On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

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

                 Master Boot Record (MBR) и Boot Record.

   Этот текст представляет собой обобщение моего опыта по восстановлению
разрушенных системных блоков при  использовании драйвера Disk Manager  и
ДОС 3.30. Предполагается, что пользователь уже имеет навык работы с про-
граммамиNorton Utilites 4.5 или Disk Editor 5.0.

   Прежде, чем браться за восстановление винчестера нужно узнать его ос-
новные характеристики  (Drive Info,  Physical Characeristic),  такие как
Sides(Число  сторон  винчестера),  Tracks(Число  дорожек),  Sector   per
track(Секторов на дорожку).

   Для тех, кто не знаком с  форматами MBR и Boot Record ниже  приведены
соответствующие таблицы.

           Master Boot Record (MBR)      Таблица разделов диска
Самый первый сектор твердого диска (0/0/1 - Track/Side/Sector)  содержит
Главную корневую запись, которая загружается в память и выполняется. По-
следняя часть этого сектора содержит  таблицу разделов -- таблицу с  16-
байтовыми элементами. Этой таблицей манипулирует программа Disk Manager.
            Структура элемента раздела
                        
  +0     1   Boot         Флаг загрузки: 0=не активен, 80H = активен
                           Обычно равен 80h для раздела C:
         
  +1     1   Hd           Начало раздела: номер головки
            
  +2     2   Sec Cyl      Начало раздела: сектор/цилиндр корневого сектора
            
  +4     1   Sys          Код системы: 0=неизвестна, 1=DOS 12-бит FAT, 4=16-бит
                                       51h- Disk Manager
            
  +5     1   Hd           Конец раздела: номер головки
           
  +6     2   Sec Cyl      Конец раздела: сектор/цилиндр последнего сектора
           
  +8     4    младш   старш   Относительный номер начального сектора
            
 +0cH    4    младш   старш   Размер (число секторов)
            
 +10H       начало следующего элемента раздела (или 0aa55H для
 последн.элемент
Значение "относительного сектора" по смещению  08H в каждом разделе
эквивалентно головке, сектору и цилиндру начального адреса раздела.
Относительный     сектор 0 совпадает с цилиндром 0, головкой 0, сектором
1. Относительный но    мер сектора прирастает сначала по каждому сектору
на головке, затем по каж    дой головке и наконец по каждому цилиндру.
Применима формула:

отн_сек = (#Цил * сек_на_цил * головок) + (#Гол * сек_на_цил) + (#Сек -1)

              Структура корневого сектора (Boot Record)
Корневой сектор диска или раздела диска должен иметь следующий формат.

Смещ.  Длина Содержимое
            
 +0      3   JMP  xx xx                       Переход на код загрузки
            
 +3      8   'I' 'B' 'M'     '3' '.' '2'  OEM-имя компании и версия систем
            
+0bH     2   SectSiz   байт на сектор
            
+0dH     1   ClustSiz  секторов на единицу распределения (кластер)
            
+0eH     2   ResSecs   резервных секторов (секторов перед первой FAT)
            
+10H     1   FatCnt    число таблиц FAT
            
+11H     2   RootSiz макс.число 32-байтовых элементов корневого оглавления
            
+13H     2   TotSecs   общее число секторов на носителе (раздел DOS)
            
+15H     1   Media     дескриптор носителя (то же, что 1-й байт FAT)
            
+16H     2   FatSize   число секторов в одной FAT
            
+18H     2   TrkSecs   секторов на дорожку (цилиндр)
            
+1aH     2   HeadCnt   число головок чтения/записи (поверхностей)
            
+1bH     2   HidnSec   спрятанных секторов (исп. в схемах разделения)
            
 1eH        размер форматированной порции корневого сектора
            начало кода и данных загрузки

                             Ситуация N 1.

   1. В один  прекрасный момент один  или несколько разделов  винчестера
перестали  читаться  и  тестовые  программы  утверждают, что это не Hard
Disk, а Drive. При этом с этим диском ДОС не может работать.

  Наиболее вероятной  причиной этого  может быть  разрушение Boot Record
этого диска.

  Адрес  Boot  Record  можно  найти  в физическом секторе с координатами
0/0/1 (Track/Head/Sector) в  соответствующем разделу элементе  Partition
Table. Далее надо  перейти к этому  сектору и просмотреть  его в формате
Boot Record (клавиша F7 в программе Disk Editor). Если в полях корневого
сектора находится "мусор", то надо в ручную восстановить этот сектор.

  Надо забить нулями остальную  часть загрузочного сектора или  скопиро-
вать на это место загрузочный сектор системной дискетты если раздел дис-
ка активен (C:)
  Затем надо вручную заполнить управляющие поля этого сектора:

  Поле Boot Record                        Корректное значение
                      OEM ID:          Можете записать сюда свое имя
            Bytes per sector:          512
         Sectors per cluster:          ??? (См. дальше)
		 Reserved sectors at beginning:          1
                 FAT Copies:          2
      Root directory entries:          512
	      Total sectors on disk: Это значение берется из Partition Table
                                    (поле +0Ch в соответствующем элементе)
           Media descriptor byte:          F8 Hex
                 Sectors per FAT:          ??? (См. дальше)
               Sectors per track:          Значение берется из Drive Info
                           Sides:          Значение берется из Drive Info
          Special hidden sectors:          Это значение равно значению Relative Sectors
                                           (Относительный номер начального сектора)
                                           (поле +08h в соответствующем элементе Part. Table)
                                            Если диск не загрузочный, то к этому значению
                                            прибавляется число 8388608 (800000h)
   В этой таблице остались незаполненными поля Sectors per FAT  (Секторов
на FAT) и Sectors per  Claster (Секторов на кластер). Их  надо вычислять
дополнительно:

Sectors per FAT : Просматриваем сектора диска, следующие за Boot Record,
пока не найдем начало коренного каталога. Запоминаем координаты сектора
каталога. Затем вычисляем относительный номер этого сектора относительно
Boot Record из расчета, что известны Число Сторон на диске, Число Секторов
на Дорожку  и Относительный адрес Boot Record = 1. Затем находить искомое
поле S/F: S/F := (<Относ. сектор каталога> -1) div 2.  Sectors per Claster
:  Это значение надо подобрать из расчета, что оно может принимать
значения 8 sect/clast или 4 sect/clast.
    2. В случае разрушения Partition Table Восстановить утраченные  зна-
чения гораздо сложней. Здесь самое сложное - это восстановить координаты
начала и конца разделов диска. Это возможно только путем просмотра соде-
ржимого винчестера  и контекстного  поиска строк,  характерных для  Boot
Record каждого размера винчестера. В качестве примера таких строк  можно
предложить:
 "NOSYSTEM", "MSDOS3.3", "Disk Boot failure" и т.д.
    Если вам удастся выполнить эту кропотливую работу, остальное не пре-
дставляет проблем.

    Поля элементов Partition Table заполняются следующим образом:

     Флаг загрузки:    =0 или =80H для диска C:

Начало раздела: номер головки                    \____ Найденное значения
Начало раздела: сектор/цилиндр корневого сектора / координат начала
раздела.
 Код системы:    =1 для диска C: или =51h для остальных разделов
Конец раздела: номер головки                      \____ Найденное значения
Конец раздела: сектор/цилиндр последнего сектора  /     координат конца
раздела.

Относительный номер начального сектора : Вычисляется по формуле,
приведенной ранее, в описании формата Part. Table  
Размер (число секторов): = Относит. сектор начала следующего раздела минус
Относит. сектор начала этого раздела
     3. В случае разрушения и MBR и Boot Record задача значительно усло-
жняется. Могу только порекомендовать  восстановить сначала MBR, а  затем
все остальное.


Литература по накопителям