Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

“И узнаешь ты много такого, о чем совсем не хотел знать”
Автор неизвестен

Заметки пользователя Linux

(C) В.А.Костромин, 2004.

Восстанавливаем таблицу разбиения диска

Назад: 1.1 Предисловие и 1.2. Первые попытки.

1.3. Зачем нужны разделы?

Современные жесткие диски имеют объемы в десятки и сотни гигабайт и их принято разбивать на “логическе диски” или разделы (по-английски - partition). Раздел - это множество последовательно раположенных блоков на диске, который воспринимается операционной системой как отдельный независимый диск. Таблица разбиения диска - это набор индексов или ссылок (адресов), определяющих размещение таких разделов на диске. Есть несколько причин для разбиения диска на разделы.

  • DOS, например, не поддерживает файловые системы объемом более 2 ГБайт, так что разбиение на разделы необходимо для преодоления этого “2-гигабайтного барьера”.
  • Разделы диска могут служить для создания на одном диске файловых систем различных типов (FAT, HPFS, NTFS, ext2, ...), которые могут использоваться различными операционными системам.
  • Иногда разделы малого объема используются для специальных целей: например, загрузчик Boot Manager в OS/2 создает для себя небольшой раздел, на лэптопах иногда создаются специальные разделы для сохранения состояния системы, когда она переходит в режим “сна”.
  • В некоторых “особо надежных” системах выделяется специальный раздел для хранения резервных копий файлов.
  • В ОС Линукс считается “хорошим тоном” хранить на отдельном разделе (обычно /home) все личные файлы пользователей, а также выделять отдельный раздел (/usr/local) для программного обеспечения, устанавливаемого из пакетов, не входящих в дистрибутив. В таком случае при переустановке системы или переходу к другому дистрибутиву вы не теряете ни ваши личные файлы, ни дополнительно установленное ПО.
  • Использование разделов уменьшает риск и возможные потери вследствие сбоев в системе, а также время, необходимое для процедур резервного копирования данных и восстановления данных после сбоев. Поскольку сбой в файловой системе приводит к потере данных только в одном разделе, вы в случае такого сбоя теряете только часть своих данных (и времени на их восстановление требуется значительно меньше).
  • Разбиение на разделы может служить и для повышения безопасности. В хорошо сконструированных системах часто все системное программное обеспечение устанавливается в отдельный раздел, к которому разрешен доступ только по чтению. Например, в Unix-системах можно смонтировать все файловые системы, кроме корневой, с опциями “nosuid,nodev”, и разместить каталоги /tmp, /home, /var вне корневой файловой системы, минимизируя тем самым риск того, что какая-то программа с установленным битом suid сможет изменить важные системные файлы путем создания жесткой ссылки на них.
  • Разбиение диска на разделы повышает эффективность использования дискового пространства на дисках большого объема. Каждый раздел можно отформатировать с индивидуальным значением размера блока, в зависимости от того, какие данные будут храниться на этом разделе. Если у вас предполагается наличие большого количества маленьких файлов, то размер блока целесообразно задать примерно равным среднему размеру ваших файлов. А иначе 10 файлов по 1 байту могут занять 40 килобайт (при размере блока в 4 КБ) и больше.
  • С помощью разделов можно контролировать использование дискового пространства и установить пределы для некоторых процессов или пользователй.
  • Наконец, все еще существует старая проблема с BIOS, которая делает невозможной загрузку системы, которая размещается в цилиндрах, номера которых превышают 1024. Поэтому для обеспечения возможности загрузки ОС возникает необходимость создания разделов, расположенных “ниже” 1024-ого цилиндра, в которых размещаются данные, необходимые для обеспечения процесса загрузки.

1.3. Как устроен главный загрузочный сектор (MBR)

Очевидно, что информация о том, каким образом диск разбит на разделы, должна быть записана где-то на том же диске. Для этой информации выделяется по 64 байта в самом первом секторе диска (первый сектор нулевой дорожки на нулевом цилиндре) и в первом секторе каждого "расширенного" раздела (что такое "расширенный" раздел, будет объяснено дальше). В этой структуре и содержится информация о разбиении диска на разделы.

Начало этой структуры (или вход в нее) находиится в первом секторе жесткого диска, который называется главным загрузочным сектором (или MBR – Master Boot Record). Его структура представлена в табл. 1

Таблица 1. Структура главного загрузочного сектора.

Смещение

Содержание

0x000

Код первичного загрузчика

0x1BE

Таблица разбиения диска

0x1FE

"Магическое число" (0x55AA)

Последние два байта MBR ("Магическое число") называются сигнатурой. Значение этих байтов должно быть 55h AAh. В случае, если это не так, запись считается некорректной.

Код первичного загрузчика различен в загрузчиках, используемых разными операционными системами. Да и для одной и той же операционной системы могут использоваться разные загрузчики (например, в Линукс - это могут быть LILO, GRUB, ASPLoader или еще какой-то другой загрузчик, вплоть до NTLoader от Windows).

Кроме собственно программы первичного загрузчика некоторые операционные системы умудряются записывать в эту область какие-то дополнительные данные. Например, DRDOS сохраняет пароль в байтах, расположенных по смещению 0x1b6. Windows NT сохраняет 4-байтовую метку диска ("disk signature" или "volume ID") начиная со смещения 0x1b8. Эта метка используется для того, чтобы ассоциировать диск с буквой диска: в строке HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices регистра буква диска связывается с этой меткой диска. Она используется также в строке HKEY_LOCAL_MACHINE\SYSTEM\DISK как метка диска для получения информации о диске.

Grub записывает 4-байтовый начальный адрес вторичного загрузчика stage2 по смещению 0x1b8 и 2-байтовый номер версии по смещению 0x1bc. Последние версии GRUB резервируют байты 0x1b8 - 0x1bd. LILO версии 20 и больше тоже резервирует эту область.

Как видите, собственно для программы первичного загрузчика остается даже меньше 446 байт. Поэтому единственная задача, которая под силу этой программе – найти на диске вторичный загрузчик, загрузить его в оперативную память и передать ему управление дальнейшей работой компьютера. А в поиске вторичного загрузчика на диске уже существенно используется таблица разбиения диска.

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

В некоторых руководствах рекомендуется использовать недокументированную команду DOS FDISK /MBR для решения проблем с MBR. Однако надо понимать, что эта команда тоже только устанавливает первичный загрузчик DOS, то есть переписывает не весь главный загрузочный сектор, а только его первые 446 байт. Поэтому эта команда не может помочь в том случае, когда проблема связана с таблицей разбиения диска. Так что команду FDISK /MBR можно использовать только для того, чтобы деинсталлировать LILO (если вы не знаете, что LILO имеет для этих целей специальную опцию -u).

Полностью затереть (обнулить) MBR под Linux очень легко: достаточно дать команду "dd if=/dev/zero of=/dev/hda count=1 bs=512". Если нужно обнулить только область, в которой располагается первичный загрузчик, не трогая таблицу разбиения диска, то эту команду нужно скорректировать следующим образом: "dd if=/dev/zero of=/dev/hda count=1 bs=446". Но будьте очень осторожны с использованием этих команд, поскольку вряд ли вы получите в результате какой-то положительный эффект. Скорее всего вы просто пожалеете о том, что давали такую команду.

Но это были просто попутные замечания. А я к этому моменту пришел к выводу, что:
- с загрузчиком у меня все в порядке;
- для работы с таблицей разбиения диска надо искать другие инструменты.

Но, прежде чем говорить об инструментах, давайте еще подробнее изучим структуру этой самой таблицы в MBR.

Продолжение: 1.5. Как устроена и используется таблица разделов диска.