|
Логическая организация жесткого дискаАвтор: Макс Курмаз Вы знаете, что такое MBR? Что такое основной и расширенный раздел диска? Что такое кластеры, как они могут быть "потеряны"? Как работает бут-вирус? Для чего нужен fdisk? Если нет, то вам будет полезно прочитать эту статью. Немного о физической организацииЖесткий диск состоит из нескольких металлических пластин, головок чтения-записи и механизма их позиционирования, помещенных в герметичную коробку (банку). К нему прикреплена печатная плата с контроллером и буферной памятью (кэшем), которая посредством шлейфа (40 или 80 жил) соединяется с материнской платой или отдельным контроллером. Так вот, металлические пластины условно разбиты на концентрические дорожки, а дорожки разделены на сектора. Дорожки на равном расстоянии от центра на всех поверхностях пластин объединяются в цилиндры. Таким образом, для чтения определенного сектора данных (его емкость принята равной 512 байт) нужно 1) отвести головки на нужное расстояние от центра, то есть позиционировать на нужный цилиндр, 2) начать просмотр дорожки на нужной пластине, активировав нужную головку и 3) производить чтение всей информации до появления заголовка сектора, номер которого (содержится в этом заголовке) совпадает с нужным нам для операции чтения или записи. В соответствии с такой схемой метод нахождения нужной информации на жестком диске называется CHS-адресацией (Cylinder-Head-Sector). BIOS (базовая система ввода-вывода) является набором системных подпрограмм (функций), среди которых есть и программа чтения-записи данных на жестком диске. Для получения содержимого одного сектора требуется указать его CHS-адрес. Число секторов, цилиндров и головок BIOS'у должно быть известно, для этого и существует автодетект в Setup. Впрочем, информация о геометрии, используемая для работы функций доступа к диску, даже близко не соответствует реальной геометрии современного жесткого диска. У него 1-3 пластины, одна из которых может использоваться только с одной стороны, и 1-6 головок. Поэтому контроллер жесткого диска производит трансляцию поступающих адресов, такую же трансляцию производит и BIOS, работая по механизму LBA (Logical Block Addressing). Но это уже другая история. В соответствии с идеологией MS-DOS жесткий диск может состоять из так называемых "разделов" - независимых областей диска, которые могут быть построены по схеме любой операционной системы, то есть использовать любую файловую систему. Таких разделов должно быть два - основной (Primary), с которого обычно осуществляется загрузка, и расширенный (Extended), который может быть разделен на несколько частей-подразделов (логических дисков). Таким образом, первый раздел диска самостоятелен, остальные объединяются в группу. Каждый раздел имеет принадлежность к той или иной файловой системе. В рамках DOS (и основанных на этой же операционной системе Windows3.x/95/98/ME) существуют три файловых системы - FAT12, FAT16 и FAT32. Об их отличиях я упомяну ниже. Системные сектораСамый первый сектор любого жесткого диска имеет название Master Boot Record, MBR. Он состоит из двух частей - программы начального загрузчика и таблицы разделов (Disk Partition Table, DPT). DPT состоит из четырех записей, обозначающих адрес начала раздела, его размер в секторах, адрес конца и тип файловой системы. Конечно, используется только две записи - для основного и расширенного раздела, потому что каждый подраздел (логический диск) имеет такую же DPT с указанием адреса следующего подраздела. Задача загрузчика в MBR - дать возможность загрузки с нужного раздела (т.е. использовать несколько операционных систем). Стандартный загрузчик DOS предоставляет весьма ограниченный механизм выбора - загрузка возможна с того раздела, у которого установлен флаг активности таблице DPT. Самый первый сектор раздела называется Boot Sector. В его составе также есть загрузочная программа и таблица BIOS Parameter Block, BPB. В этой таблице есть информация о местонахождении и размере другой важной области - таблицы размещения файлов, FAT. По своей сути FAT - это большой массив элементов, каждый элемент соответствует каждому кластеру. Кластер - блок секторов (от 8 до 128), элемент распределения всего дискового пространства раздела. Каждому файлу при его создании выделяется нужное число кластеров. Номер первого кластера заносится в каталог (директорий, папку), а соответствующий этому кластеру элемент FAT содержит номер второго кластера. Элемент FAT, соответствующий второму кластеру, содержит номер третьего кластера и т.д. Весь FAT состоит из таких цепочек (Chains). Если элемент FAT не связан ни в одну цепочку, и при этом не равен 0, он называется "потерянным" (Lost Cluster). "Потеря" кластеров происходит при перезагрузке в момент записи цепочки в FAT, например, при создании/изменении файла, когда операция записи прерывается. Конечно, это не самые страшные последствия неожиданной перезагрузки, но все же терять место на диске не очень хочется. Программисты из Microsoft хорошо знали о "стабильности" своей Windows, поэтому и запускается Scandisk автоматически. Если файл впоследствии увеличивается в размерах, ему назначаются новые кластеры из числа свободных, причем чаще всего они находятся в другом месте диска. Цепочка "перепрыгивает" другие цепочки - вот вам и фрагментация, которую устраняют программы-дефрагментаторы, переносящие файлы так, чтобы их кластеры шли друг за другом по порядку. Хотя система цепочек и является достаточно эффективной и простой, у нее есть недостатки. Во-первых, низкая надежность - при исчезновении одного элемента весь файл будет нечитаемым, а порча FAT означает потерю большого количества (если не всех) файлов. Для устранения этого недостатка существует две одинаковых копии FAT. Второе - если размер файла не кратен размеру кластера, образуется слек (Slack) - часть кластера, не занятая полезной информацией. Чем больше размер кластера, тем большая часть диска занята слеком. Для файла длиной 1 байт вы теряете весь кластер, а если он имеет большой размер (32 Кбайта, например), то потери на слек могут составлять 30-50% от общей емкости диска (кстати, проверить их можно программой Sandra - модуль Drive Information). Размер элемента FAT дает название самой файловой системе. FAT12 имеет 12-битные элементы, которые позволяют организовать на диске около 4-х тысяч кластеров. FAT16 имеет 16-битные элементы, число кластеров - 65530. FAT32 - 32-битные элементы, около 4 млрд. кластеров. Чем больше на диске будет кластеров, тем меньше можно сделать размер самого кластера и тем самым меньше потерять места. По этому FAT12 используется только для гибких дисков, FAT16 - для дисков емкостью до 500 Мб (в принципе можно и до 2 Гб). Начальная загрузкаЗагрузка операционной системы происходит следующим образом:
Все эти операции происходят без участия программы кэширования дисковых операций (SMARTDRV.EXE - стандартная программа кэширования), поэтому происходит постоянное обращение к FAT за информацией о кластерах каждого файла. Значит, при проведении дефрагментации загрузочного раздела жесткого диска следует предусмотреть расположение перечисленных файлов как можно ближе к началу диска. Первым на диске должен быть файл подкачки WIN386.SWP, потом - директории (или каталоги, папки - кто как привык их называть), после них нужно располагать файлы, участвующие в загрузке. Конечно, стандартный Defrag этого не может, но есть много других хороших программ дефрагментации. Если вы еще не пользуетесь ими, подумайте, может быть, есть смысл установить Norton Utilities 2000, в составе которых имеется дефрагментатор Speed Disk. Boot virusТак называется разновидность вирусов, внедряющихся на одном из этапов начальной загрузки, обычно на самом первом. Boot-вирус записывает в MBR свой загрузчик вместо исходного. Тем самым вместо операционной системы первым загружается вирус. Он размещает в памяти свое тело, которое хранит в неиспользованных секторах, идущих после MBR, но до первого загрузочного сектора раздела. Перехватив обращения к дискам, вирус продолжает загрузку операционной системы. В случае обращения к дискете вирус изменит ее boot-сектор, заменив в нем программу-загрузчик. Если пользователь загрузится с такой дискеты, вирус получит управление и сразу же заразит MBR жесткого диска. Если boot-вирус не умеет заражать файлы, обходясь только системными секторами, он не представляет большой опасности. Во-первых, заразиться можно только при загрузке с дискеты (или второго жесткого диска), во-вторых, можно просто включить "Virus Warning" в Setup - вы получите предупреждение о попытке вторжения в загрузочный сектор (вопреки распространенному мнению, эта опция должна выключаться только при инсталляции Windows), в-третьих, вылечить жесткий диск можно всего одной командой - "fdisk /mbr", которая записывает в MBR оригинальную программу-загрузчик. Проблемы при загрузкеНарушение процесса загрузки может произойти на любом из этапов. Чтобы определить причину и "виновника", нужно обратить внимание на появляющиеся сообщения:
Что делать в случаях, когда загрузка не происходит? Рассмотрим это по пунктам:
NDD, Scandisk, fdisk… СоветыПрежде всего, при возникновении серьезных проблем с системными секторами никогда не пользуйтесь программами диагностики NDD или Scandisk. Назначение таких программ - отыскание "потерянных" кластеров и "отвязанных" длинных имен, все остальное им не под силу. Для "ручной" работы с диском обычно используется Diskedit из комплекта Norton Utilities - не потому что он самый продвинутый и удобный, а в силу привычки, так как Нортоновские утилиты существуют с незапамятных времен. Если вы не владеете глубокими знаниями о структуре и механизмах работы системных секторов и загрузчиков, вам лучше не пытаться экспериментировать с этой программой. Хотя иметь ее, безусловно, необходимо. Для чего - смотрите ниже. А вот уметь пользоваться fdisk должен каждый. Как размечать ей диски - не тема этой статьи. Могу только дать одну подсказку. Если вы хотите выделить первый раздел диска исключительно под Windows, лучше задать ему размер 1-2 Гб и поставить туда FAT16 - быстрее будет грузиться, легче будет, в случае чего, восстанавливать. Известно, что fdisk по умолчанию устанавливает FAT32 на раздел больше 500 Мб. Чтобы "переубедить" его, выберите "N" в "начальной заставке" fdisk (там, где что-то говорится о поддержке больших разделов). Размечайте первый раздел (больше 2 Гб не получится), запускайте fdisk снова, выбрав уже "Y". Еще один совет. После разметки и форматирования нового диска не поленитесь создать загрузочную дискету, на которую с помощью diskedit запишите MBR (Alt-A, Alt-W, выбрать имя файла), загрузочный сектор первого раздела (Alt-B, Alt-W, имя файла), diskedit, unerase, fdisk, sys, format, himem.sys, какой-нибудь русификатор (если DOS русифицирована). В случае сбоя такая дискета позволит сэкономить массу времени и нервов. Теперь совет по восстановлению. Если вы умеете пользоваться diskedit'ом, вы можете восстановить "полетевший" жесткий диск и без автоматических программ-восстановителей типа Tiramisu. Как найти начало раздела - понятно, по сигнатуре 55АА, причем в последних версиях diskedit можно искать по определенному смещению (в данном случае это "510"). Бут-сектор (если не стандарта FAT32, который занимает три сектора) можно взять у дискеты и вручную подобрать параметры. Восстановить FAT тоже возможно. Для этого нужно найти корневой каталог (искать нужно строку "MSDOS " или "COMMAND COM"), каждому файлу изменить первую букву названия на русскую "х" (код E5), после чего запустить unerase. Чем меньше фрагментация, тем выше шансы вернуть файлы к жизни, поэтому проводить дефрагментацию важных данных нужно как можно чаще. По материалам сайта hw.by Powered by X-ray.Издательство"Самопал"©2004 |