Библиотека сайта 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. Как устроена и используется таблица разделов диска.