Утилита gpart служит для управления GEOM классом PART. На самом деле это хардлинк на утилиту geom(8), которая является универсальной утилитой управления для многих GEOM классов. Как я уже упоминал в предыдущей заметке, класс PART служит для работы с таблицами партиций и предоставляет доступ к провайдерам этих партиций. С появлением этой утилиты можно уже забыть такие утилиты как fdisk и bsdlabel, они морально устарели. Большинство их действий можно выполнять при помощи утилиты gpart. Нужно только понять и запомнить основные понятия - схема и партиция. Прежде чем создавать партиции, необходимо выбрать тип таблицы - схему. Например, для привычной разметки с использованием MBR необходимо выполнить команду 'gpart create' с указанием имени схемы в опции "-s mbr ":
# gpart create -f x -s mbr md0
md0 created
# gpart show md0
=> 17 1023978 md0 MBR (500M)
17 1023978 - free - (500M)
# gpart commit md0
Опция "-f x " указывает классу не вносить изменения на провайдер носителя сразу. Т.е. если вы не уверены в своих действиях, вы можете с каждой командой указывать эту опцию и после того как будете уверены, выполнить команду `gpart commit` , либо отменить изменения командой `gpart undo` . Не имеет значения, какой флаг вы укажете после опции "-f", т. к. класс отслеживает только наличие опции и её отличие от значения, принятого по-умолчанию. Если не указывать опцию "-f", то её значение по-умолчанию будет установлено в "-f C" , что приведёт к автоматическому выполнению команды `gpart commit` . Таблица MBR может содержать максимум 4 записи, т.е. не более 4 партиций. После того как схема создана можно создавать партиции при помощи команды `gpart add` . Каждая партиция обладает несколькими обязательными свойствами - смещение начала, смещение конца, индекс в таблице и тип партиции. А так же одно дополнительное свойство, которым обладают партиции некоторых схем - символьная метка. Все эти параметры видны пользователю, за исключением смещения конца. Смещение заменяется на вычисляемый из него размер. К тому же, для создания партиции при помощи утилиты gpart нужен только один обязательный параметр - это тип партиции, остальные параметры могут быть вычеслены автоматически. Тип партиции может быть задан символным именем либо специальным номером, в зависимости от используемой схемы. Поддерживаемые символьные имена можно увидеть в мануале gpart(8). При необходимости задать какой-то специфический для схемы тип партиции, он указывается после знака восклицания. Например, для схемы MBR тип партиции FreeBSD представлен номером 165, который можно указать как "-t !165" (не забываем экранировать знак восклицания, если выполняем команду из shell -"\!165" ), либо символьным именем "-t freebsd" . Размер и смещение начала партиции по-умолчанию задаются в блоках, размер которых обычно соответствует размеру физического сектора, т.е. 512 байт. Для того чтобы не вычислять количество блоков, эти параметры можно указывать с суффиксом размера: b, k, m, g, t, p, e - т.е. от байт до экзабайт. Но есть одна особенность реализации - парсер при разборе этих параметров ещё не знает какой размер сектора имеет носитель, поэтому если он отличается от 512 байт , то лучше указывать размер в секторах, иначе размер будет вычислен неправильно. Размер партиции указывается после опции "-s" , а смещение начала - после "-b" . При опускании любого из этих параметров они выбираются автоматически: смещение начала - на первый доступный блок, размер - на максимально возможный из доступного свободного пространства. Вычисление индекса партиции обычно можно оставить утилите gpart. Только если вам не нужна какая-нибудь особенная конфигурация, например, чтобы система устанавливалась на ad0s3 нужно указать параметр "-i 3" . Итак, схема создана, создадим партицию:
# gpart add -s 400m -t freebsd md0
md0s1 added
# gpart show md0
=> 17 1023978 md0 MBR (500M)
17 819196 1 freebsd (400M)
819213 204782 - free - (100M)
Как видно, партиция была создана с типом "freebsd" и размером в 400 Мбайт, индекс и смещение начала были выбраны автоматически. Теперь на созданной партиции можно сделать дополнительную разметку для BSD схемы:
# gpart create -s bsd md0s1
md0s1 created
# gpart show md0
=> 17 1023978 md0 MBR (500M)
17 819196 1 freebsd (400M)
819213 204782 - free - (100M)
# gpart show md0s1
=> 0 819196 md0s1 BSD (400M)
0 819196 - free - (400M)
Теперь добавим партиции, только вместо bsdlabel используем тот же gpart:
# gpart add -s 100m -t freebsd-ufs md0s1
md0s1a added
# gpart add -s 100m -t freebsd-swap md0s1
md0s1b added
# gpart add -t freebsd-ufs md0s1
md0s1d added
# gpart show md0s1
=> 0 819196 md0s1 BSD (400M)
0 204800 1 freebsd-ufs (100M)
204800 204800 2 freebsd-swap (100M)
409600 409596 4 freebsd-ufs (200M)
Всё достаточно легко и просто.