Ниже можно видеть структуру MBR (сектор 0): код загрузчика, затем 4 входа таблицы разделов по 16 байт каждый, затем специальная "подпись" AA55. Элементы таблицы разделов с типом 5 или F или 85 (в шестнадцатиричной системе) имеют специальное значение: они описывают extended (расширенные) разделы : куски диска, которые разбиты на несколько логических разделов.Т.е. расширенные разделы сами по себе не используются они могут лишь хранить логические разделы. Важно только положение первого сектора расширенного раздела. Этот первый сектор хранит таблицу разделов с четырьмя входами: один используется для логического раздела, другой для еще одного расширенного раздела,а два не используются. Таким образом можно получить цепочку из таблиц разделов, где первая описывает три основных раздела,а каждая следующая один логический раздел и положение следующей таблицы.
Очень важно понимать это: Когда люди делают что то глупое во время разбиения диска, их волнует вопрос - сохранились ли их данные ? Обычно данные остаются на своем месте, исключения составляют сектора, которые перекрываются расширенными таблицами разделов - они теряются на всегда.
Программа sfdisk показывает всю цепочку:
# sfdisk -l -x /dev/hda
Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 0+ 101 102- 51376+ 83 Linux
/dev/hda2 102 2133 2032 1024128 83 Linux
/dev/hda3 2134 33482 31349 15799896 5 Extended
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 2134+ 6197 4064- 2048224+ 83 Linux
- 6198 10261 4064 2048256 5 Extended
- 2134 2133 0 0 0 Empty
- 2134 2133 0 0 0 Empty
/dev/hda6 6198+ 10261 4064- 2048224+ 83 Linux
- 10262 16357 6096 3072384 5 Extended
- 6198 6197 0 0 0 Empty
- 6198 6197 0 0 0 Empty
...
/dev/hda10 30581+ 33482 2902- 1462576+ 83 Linux
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
#
Во время разбиения диска могут быть созданы плохие таблицы разделов. Многие ядра зацикливаются если какой либо расширенный раздел указывает сам на себя,или на более ранний раздел в цепочке. Также возможно иметь ссылки на два расширенных раздела в одной таблице, т.е. она раздваивается.. (Это например случается когда fdisk не распознает каждую из 5, F, 85 как расширенный раздел, и создает 5 следом за F.) Не одна из стандартных fdisk програм не может справиться с такой ситуацией,вам потребуется очень много времени и сил чтобы пофиксить эту проблему. Ядро Линукс воспринимает такое раздвоение нормально. То есть вы можете иметь две цепи логических разделов. Иногда это полезно - например можно использовать тип 5 (виден DOS) и тип 85(невиден DOS),так что DOS fdisk не "упадет" из за логических разделов за пределами 1024 цилиндра