В начале лекции говорилось о том, что младший номер устройства, соответствующего жёсткому диску, обычно указывает на определённый раздел этого диска. Поначалу Мефодию казалось, что смысла «пилить» диск на несколько разделов нет никакого: известно, что один большой раздел файловой системы Linux3 вмещает чуть больше данных, чем несколько маленьких того же объёма. Кроме того, разбивая диск на разделы, можно не предугадать подходящие размеры этих разделов, и тогда размещение на них файловой системы Linux окажется делом нелёгким, если вообще возможным, так как структура дерева каталогов Linux строго определена стандартом FHS (см. лекцию Структура файловой системы).
Для некоторых других файловых систем, например, для vfat
, это неверно.
- раздел диска
- Часть жёсткого диска, используемая под определённые задачи: файловую систему того или иного типа, область подкачки и т. п. Изменение содержимого и типа одного раздела никак не сказывается на других.
Впрочем, в том же FHS весьма наглядно обоснована необходимость разнесения всего дерева каталогов по разным разделам, каждый из которых будет иметь собственную файловую систему. Каталоги сильно различаются по тому, как часто приходится в них записывать, насколько надёжность хранения данных в них важнее быстродействия и насколько ситуация переполнения файловой системы опасна и может помешать работе. Поэтому стоит каталог /tmp
, требущий очень частой записи, но не требующий надёжного хранения данных после перезагрузки, держать не на том же разделе, что и корневую файловую систему, запись в которую происходит редко (в каталог /etc
), но требует повышенной надёжности. В отдельный раздел можно поместить весь каталог /usr
, так как он вообще не требует операций записи. Наконец, такие каталоги, как /var
или /home
, суммарный объём файлов в которых с трудом поддаётся контролю со стороны системы, тоже не следует размещать на том же разделе, что и корневую файловую систему, переполнение которой может быть болезненно воспринято Linux.
К тому же на компьютере может быть установлено несколько операционных систем, и каждой из них понадобится для корневой файловой системы отдельный раздел. В этой и предыдущей лекции Мефодий работает именно за такой машиной: помимо Linux, на ней установлен FreeDOS
для запуска одной-единственной программы.
Разметка диска IBM-совместимого компьютера
- таблица разделов
- Небольшая часть жёсткого диска, описывающая геометрию и тип его разделов. Стандартная таблица разделов диска IBM-совместимого компьютера может содержать не более четырёх разделов.
Разбиение диска на разделы — дело (теоретически) несложное: какая-то часть диска должна быть отведена под таблицу разделов, в которой и будет написано, как разбит диск. Стандартная таблица разделов для диска IBM-совместимого компьютера — HDPT (hard disk partition table) — располагается в конце самого первого сектора диска, после предзагрузчика (master boot record, MBR) и состоит из четырёх записей вида «тип начало конец
», описывающих очередной раздел диска (если раздела нет, поле тип
устанавливается в 0
). Разделы, упомянутые в HDPT диска, принято называть основными (primary partition). Устройство Linux, соответствующее первому диску компьютера, обычно называется /dev/hda
(hard disk «a»). Второй диск получает имя hdb
, третий — hdc
и так далее. На типичном IBM-совместимом компьютере такое же имя получит и лазерный накопитель. Часто бывает, что жёсткий диск — первый в системе (hda
), а лазерный накопитель — третий (hdc
), второго же вовсе нет. Устройства, соответствующие основным разделам диска, называются /dev/hdбукваномер
, для первого диска — от hda1
до hda4
. Просмотреть список разделов можно с помощью команды fdisk -l
.
Совмещение нескольких схем разметки
На той самой — двухсистемной — машине fdisk
обнаружила пятый, шестой и седьмой разделы, однако не показала ни третий, ни четвёртый:
[root@localhost root]# fdisk -l Disk /dev/hda: 2147 MB, 2147483648 bytes 128 heads, 63 sectors/track, 520 cylinders Units = cylinders of 8064 * 512 = 4128768 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 25 100768+ 6 FAT16 /dev/hda2 26 520 1995840 5 Extended /dev/hda5 26 282 1036192+ 83 Linux /dev/hda6 283 334 209632+ 82 Linux swap /dev/hda7 335 520 749920+ 83 Linux
Пример 6. Просмотр таблицы разделов жёсткого диска
Дело в том, что четырёх разделов редко когда бывает достаточно. Куда же помещать дополнительные поля таблицы разбиения? Создатели IBM PC предложили универсальный способ: один из четырёх основных разделов объявляется расширенным (extended partition); он, как правило, занимает всё оставшееся пространство диска. Расширенный раздел разбивается на подразделы по тем же правилам, что и весь диск: в самом его начале заводится HDPT с четырьмя записями (соответствующие им разделы называются дополнительными, secondary partition), которые снова можно использовать, причём один из подразделов может быть, опять-таки, расширенным, со своими подразделами и т. д.
Осторожнее с программой fdisk
! Она предназначена для создания, изменения и удаления разделов диска.
Чтобы не усложнять эту схему, при разметке диска соблюдают два правила: во-первых, расширенных разделов в таблице разбиения диска может быть не более одного, а во-вторых, таблица разбиения расширенного раздела может содержать либо одну запись — описание дополнительного раздела, либо две — описание дополнительного раздела и описание вложенного расширенного раздела. Соблюдение этого правила позволяет в Linux нумеровать разделы линейно: после четырёх основных, номер 5
получает дополнительный раздел в первом расширенном, 6 — раздел во втором расширенном, вложенным в первый, и т. п. Сами вложенные расширенные разделы при этом не нумеруются и никакому устройству в /dev/
не соответствуют. В действительности разбиение диска двухсистемной машины Мефодия выглядит так:
И разделы, и таблицы разбиения принято размещать с начала цилиндра (термин, имеющий отношение к внутреннему устройству жёсткого диска), так что при заведении каждого расширенного раздела на этом компьютере тратилось впустую по четыре мегабайта (таков, по словам fdisk
, размер цилиндра).
Той же тактикой — разбиением не диска, а раздела — пользуются, когда таблица разбиения нестандартна для IBM PC. Например, UNIX-подобные системы семейства BSD используют собственный универсальный формат разбиения (он старше, чем сама идея об IBM PC!), для чего подобной системе выделяется один раздел, и она творит с ним всё, что заблагорассудится.
Область подкачки
Итак, Linux на компьютере из примера использует три раздела: hda5
, hda6
и hda7
. Тип раздела hda6
, «Linux sawp», отличается от двух других, по словам Гуревича, «это вообще не файловая система». Это — т. н. область подкачки (swap space), пространство на диске, используемое системой для организации виртуальной памяти. Оказывается, областям оперативной памяти, которые процессы запрашивают у ядра, не всегда соответствуют части физической оперативной памяти. Если процесс долгое время не испольует заказанную оперативную память, её содержимое записывается на диск, в область подкачки — тем самым освобождается место в физической памяти для других процессов. Когда же он «вспомнит» об этой области памяти, ядро подкачает её с диска, разместит в оперативной памяти (возможно, откачав другие области), и только тогда позволит процессу продолжить работу.
Вполне может сложиться ситуация, когда несколько процессов заказали оперативной памяти больше, чем её есть в действительности, и преспокойно работают, потому что не используют всё заказанное пространство сразу, позволяя системе откачивать неиспользуемые области. К тому же многие процессы (особенно демоны) не работают постоянно, а ждут наступления определённого события, и чем дольше они ждут, тем дольше не используют оперативную память, и тем выше вероятность, что ядро откачает её.
Стоит отдавать себе отчёт, что если эти самые процессы вдруг захотят работать одновременно и со всеми областями памяти, ядру придётся туго. Большую часть времени система будет проводить откачивая и подкачивая, потому что дисковые операции чтения и записи работают в тысячи раз медленнее, чем запись и чтение из оперативной памяти.
Такая ситуация называется «дребезг» (trashing) и свидетельствует о том, что для текущих задач компьютеру требуется больше физической памяти.
Чтобы хоть как-то облегчить ему жизнь, область подкачки размещают на отдельном разделе, обмен данными с которым работает бытрее, чем чтение и запись в файл, обслуживаемые файловой системой.