Опубликован: 24.07.2006 | Уровень: для всех | Доступ: платный
Лекция 3:

Инсталляция ОС Linux на компьютер с Windows

Разделы диска и таблица разбиения диска

Физические диски в Intel-системах принято разбивать на разделы. Повелось это, кажется, из-за того, что первые версии MS-DOS не могли обеспечить доступ к большим дискам (а объемы дисков росли быстрее, чем возможности DOS). Тогда придумали разбиение дисков на разделы. Для этого в нулевой сектор диска (нулевой сектор первой дорожки на нулевом цилиндре) стали записывать так называемую таблицу разбиения диска на разделы ( partition table ). Каждый раздел может трактоваться как отдельный физический диск. В частности, в разные разделы могут быть установлены разные операционные системы.

Таблица разделов содержит 4 записи по 16 байт для 4 разделов, которые называют первичными. Каждая запись имеет следующую структуру:

struct partition {
char active;    /* 0x80: раздел активный (загрузочный), 0: не активный 
char begin[3];  /* CHS первого сектора, 24 бита
char type;      /* тип раздела (например, 83 - LINUX_NATIVE, 82
            	        LINUX_SWAP, 85 - LINUX_EXTENDED)
char end[3];    /* CHS последнего сектора, 24 бита 
int start;      /* номер начального сектора (32-бита, счет начинается с 0)
int length;     /* число секторов в разделе (32 бита)
};

Таблица разделов диска создается обычно с помощью программы fdisk. В ОС Linux имеется как стандартная программа fdisk (которая, впрочем, существенно отличается от программы fdisk в MS-DOS и Windows), так и еще две программы для работы с разделами диска: cfdisk и sfdisk. Программа cfdisk, как и fdisk, предназначена для работы с таблицей разделов диска: она не обращает никакого внимания на информацию, которая уже имеется на диске. Отличается она только несколько более удобным интерфейсом, предоставляющим пользователю не просто подсказку по командам, а систему меню. Программа sfdisk обладает несколько более широкими возможностями, в частности, она позволяет произвести некоторые операции над существующими разделами диска.

DOS использует поля begin и end таблицы разбиения диска и функции прерывания 13 BIOS ( Int 13h ) для доступа к диску, и поэтому не может использовать диски объемом более 8,4 Гбайт, даже с новым BIOS (об этом будет рассказано ниже), а разделы не могут быть более 2,1 Гбайт (но это уже из-за ограничений файловой системы FAT16 ).

Linux использует только поля start и length таблицы разбиения диска и поддерживает разделы, содержащие до 232 секторов, т. е. размер раздела может достигать 2 Тбайт.

Поскольку в таблице разбиения отведено только 4 строки для задания разделов, число первичных разделов на диске с самого начала ограничено: их может быть не более 4. Когда стало ясно, что и 4-х разделов мало, были изобретены логические разделы. Для этого один из первичных разделов объявляется "расширенным" (тип раздела - 5, или F, или 85 в шестнадцатеричной системе), и в нем создаются "логические разделы". Расширенные разделы сами по себе не используются, они могут лишь хранить логические разделы. Первый сектор расширенного раздела хранит таблицу разделов с четырьмя входами: один используется для логического раздела, другой для еще одного расширенного раздела, а два не используются. Каждый расширенный раздел имеет свою таблицу разбиения, в которой, как и в первичном расширенном разделе, используются только две строки, задающие один логический и один расширенный раздел. Таким образом, получается цепочка из таблиц разделов, где первая описывает три основных раздела, а каждая следующая - один логический раздел и положение следующей таблицы.

Программа sfdisk в Linux показывает всю цепочку:

[root]# sfdisk -l -x /dev/hda
Disk /dev/hda: 784 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 189 190- 1526143+ 6 FAT16
/dev/hda2 190 783 594 4771305 5 Extended
/dev/hda3 0  - 0 0 0 Empty
/dev/hda4 0  - 0 0 0 Empty

/dev/hda5 190+ 380 191- 1534176 6 FAT16
 - 381 783 403 3237097+ 5 Extended
 - 190 189 0 0 0 Empty
 - 190 189 0 0 0 Empty

/dev/hda6 381+ 783 403- 3237066 7 HPFS/NTFS
 - 381 380 0 0 0 Empty
 - 381 380 0 0 0 Empty
 - 381 380 0 0 0 Empty

Число логических разделов в принципе не ограничено, потому что каждый логический раздел может содержать таблицу разделов и вложенные логические разделы. Однако реально ограничения все же существуют, например, Linux может работать не более чем с 15 разделами на SCSI-дисках и не более чем с 63-мя разделами на IDE-дисках.

Расширенный раздел как на физическом диске, так и в расширенном разделе вложенного расширенного раздела (предыдущего уровня) может быть только один: ни одна из существующих программ разбиения дисков ( fdisk и ее усовершенствованные аналоги) не умеет создавать более одного расширенного раздела.

В Linux диск в целом (т. е. физический диск) доступен по имени устройства /dev/hda, /dev/hdb, /dev/sda, и т.п. Первичные разделы обозначаются дополнительной цифрой в имени устройства: /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4, а логические разделы в Linux доступны по именам /dev/hda5, /dev/hda6... (начиная с номера 5). Из сказанного выше должно быть ясно, почему могут быть пропущены имена /dev/hda3 и /dev/hda4 (третий и четвертый первичные разделы просто не были созданы) и сразу после /dev/hda2 вы увидите /dev/hda5 (логический раздел в расширенном разделе /dev/hda2 ), а далее нумерация идет последовательно.

В Windows логические разделы получают однобуквенные имена, начиная с последнего задействованного имени первичного раздела. Если, например, имеется один жесткий диск с двумя простыми первичными разделами (C: и D:) и одним расширенным разделом, в котором созданы два логических раздела, то эти логические разделы именуются E: и F:. Впрочем, в Windows NT и 2000 с помощью администратора дисков разделам могут быть присвоены другие буквенные имена.

Владислав Гермак
Владислав Гермак

Приглашения оболочки

Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "\s-\v\$ ".

"\s-\v\$ ". -значиние /v замените /u

Дмитрий Морозов
Дмитрий Морозов
Россия
Эмиль Темербулатов
Эмиль Темербулатов
Россия