Linux: утилита разметки fdisk

Начнем с fdisk: именно им больше всего пугали в старые времена начинающих пользователей Linux, предлагая дружественные альтернативы типа Disk Druid. Однако при ближайшем рассмотрении выясняется, что ничего устрашающего в ней нет.

Происхождение fdisk теряется во мраке веков, уходя во времена первых UNIX для PC-архитектуры -- насколько я понимаю, раньше необходимости в ней не было, а главными инструментами дисковой разметки были утилиты типа disklabel или bsdlabel. Мне не удалось также выяснить, когда эта утилита появилась в Linux. Могу только предполагать, что на самых ранних стадиях создания утилит обрамления для его ядра -- т.н. linux-utils. Ныне fdisk входит в состав пакета linux-utils-ng.

Для начала следует запомнить, что запуск команды fdisk в любом качестве, даже просто для получения информации о диске, возможно только с правами суперпользователя, каковые и надо обеспечить себе любым образом, например, через su или sudo.

Если команду fdisk дать без опций и аргументов, она выведет краткую справку об её использовании:

# fdisk

Usage: fdisk [-l] [-b SSZ] [-u] device
E.g.: fdisk /dev/hda  (for the first IDE disk)
  or: fdisk /dev/sdc  (for the third SCSI disk)
  or: fdisk /dev/eda  (for the first PS/2 ESDI drive)
  or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)

В качестве аргумента команды фигурирует имя файла устройства -- физического диска целиком. Поскольку в современных версиях ядра Linux все диски, вне зависимости от их интерфейсов (PATA, SATA, SCSI, SAS, USB) определяются единой подсистемой ATA-SCSI, на самом деле имена эти будут иметь вид /dev/sda, /dev/sdb и так далее.

Смысл опций команды fdisk следующий:

  • l не предписывает выполнения каких-либо действий, а лишь выводит информацию о диске и его разделах, если таковые имеются;
  • b задаёт размер блока -- единицы измерения дискового пространства; по умолчанию, без указание этой опции, он равен физическому блоку (512 байт), прочие возможные значения кратны его размеру -- 1024, 2048 или 4096 байт;
  • u запускает fdisk, являясь опцией по умолчанию.

Перво-наперво посмотрим на информационную функцию fdisk, для чего запустим её следующим образом:

# fdisk -l /dev/sd?

где в

Ответом будет вывод примерно такого вида:

Диск /dev/sda: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0008e008

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          14      112423+  83  Linux
/dev/sda2              15       15680   125837145    5  Расширенный
/dev/sda5              15        2626    20980858+  83  Linux
/dev/sda6            2627        4585    15735636   83  Linux

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

Для каких-либо манипуляций с дисковыми разделами команду fdisk следует запустить в интерактивном режиме:

# fdisk /dev/sdb

Что можно сделать без всяких опций, но вот указание аргумента тут будет обязательным.

После этого мы получаем в свое распоряжение некий интерфейс, требующий ввода определенной команды, исполнение которой сводится к ответу на несколько вопросов. С полным списком доступных команд можно ознакомиться благодаря прекрасной системе помощи, вызываемой командой m.

Так, команда p выведет текущий список дисковых разделов с указанием их типа и размера. Далее, разделы можно создавать (командой n) или удалять (командой d), однако до команды записи изменений (w) никаких необратимых действий, могущих разрушить ранее существовавшую разметку (и, соответственно, файловые системы и данные, к ней привязанные), не последует: неудачно созданные разделы можно удалить и на их месте создать новые. И в любой момент командой q можно без всяких последствий выйти из программы.

При создании раздела средствами fdisk сначала определяется, будет он первичным (primary) или расширенным (extended). Рассмотрим сначала первый случай. При нем далее просто указывается номер раздела (от 1 до 4). В этих пределах номер может быть любым -- можно сначала создать раздел 2, а потом 1, или даже весь диск отвести под раздел 4. Номер раздела останется на века: именно он будет идентифицировать файл устройства, соответствующий созданному разделу (например, /dev/sda2, или /dev/sdb1).

Далее задается начальный цилиндр создаваемого раздела (по умолчанию - первый свободный, для пустого диска -- просто первый). Однако никто не мешает указать любой другой цилиндр в качестве стартового (на неразбитом пространстве, разумеется). А потом -- конечный цилиндр (по умолчанию -- последний физический на неразбитом дисковом пространстве), или просто размер раздела в каких-либо общепринятых единицах измерения информации, например, +300M; и +, и M (или что-либо аналогичное) -- обязательны, иначе объем диска окажется равных ровно трёхстам цилиндрам.

В современных версиях  fdisk возможно указание объема в двух системах единиц (не считая цилиндров). Во-первых, он может задаваться в том, что мы испокон веков привыкли называть мегабайтами и гигабайтами, то есть степенях двойки. Однако ныне авторитетные товарищи утверждают, что такие единицы измерения должны величаться мебибайтами, гибибайтами и так далее. Их следует указывать так: +1000MB, +10GB и так далее.

А можно определять объём раздела и в "настоящих", с точки зрения пуристов от метрологии, мегабайтах и гигабайтах, представляющих собой  собой степени десятки -- тех, в которых производители жестких дисков издревле указывают размеры своей продукции. И тогда он определяется таким образом: +1000M, +10G etc.

При задании размера в единицах, отличных от цилиндров, он всегда будет округляться (по обычным правилам округления) до ближайшего числа, кратного целому количеству последних. Так что не следует удивляться, если вместо искомого раздела в 20 Мбайт возникнет 16-мегабайтный, а вместо 22-мегабайтного -- раздел в 24 Мбайт.

При создании расширенного раздела сначала все происходит точно также -- задание номера (очевидно, что в том же диапазоне 1--4), указание начального цилиндра и конечного (или -- объема в мегабайтах). Однако это еще полдела, нужно поделить расширенный раздел на разделы логические. И потому при следующей команде на создание раздела нам будет предложен уже выбор между первичным (если число последних еще не исчерпано) и логическим (ведь второй extended-раздел средствами fdisk создать нельзя):

Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

Дальше же логический раздел создается аналогично первичному.

Для каждого вновь создаваемого средствами fdisk раздела (первичного или логического) по умолчанию устанавливается идентификатор типа файловой системы Linux native (83 в шестнадцатеричном исчислении). Расширенный же раздел также автоматически получает правильный идентификатор своего типа -- 5. Однако типы эти не есть нечто неизменное. Более того, по крайней мере в одном случае, при создании раздела подкачки, изменение типа раздела -- необходимость. Это потребуется также и для использования таких технологий, как Software RAID или LVM, о которых будет говориться позднее.

Делается это командой t, после чего запрашивается номер раздела, тип которого должен быть изменен, а затем -- идентификатор желаемого типа. Полный список поддерживаемых типов файловых систем (и их идентификаторов) можно вывести командой l. Напомню, что идентификатор типа файловой системы раздела -- отнюдь не файловая система, которая на нем размещается. И на разделе Linux native, как это подчеркивает название, можно создать любую файловую систему из числа тех, которые поддерживаются Linux в качестве родных (ext2/ext3, ext4, XFS, ReiserFS, JFS, btrfs, NILFS2).

Теоретически fdisk позволяет присвоить созданному разделу идентификатор типа почти любой из мыслимых файловых систем -- от FAT12 до Free-, Open- и NetBSD. Однако сами по себе файловые системы средствами fdisk не создаются, и потому для разделов чуждого типа в дальнейшем потребуется их форматирование (в терминах DOS): либо в родной среде (например, DOS-командой FORMAT для FAT-раздела), либо специальными командами типа mkfs, о которых будет говориться в соответствующей рубрике.

Сказанного, надеюсь, достаточно, чтобы осознать великое достоинство fdisk -- исключительную гибкость: можно определить раздел строго определенного размера и точно позиционировать его на диске. Или зарезервировать в любом месте накопителя неразбитое пространство, с двух сторон окруженное созданными разделами.

Сложность же применения fdisk -- кажущаяся: благодаря системе подсказки дисковые разделы создаются легко и непринуждённо. Тем не менее, если таки она удручает своей недостаточной наглядностью, можно воспользоваться утилитой cfdisk с меню-ориентированным интерфейсом.


Теги: , ,