Утилита 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)
Всё достаточно легко и просто. Для записи загрузочного кода можно использовать всю ту же утилиту. Для этого предназначена команда `
gpart bootcode`. Например, аналогом команды `
bsdlabel -B` будет:
# gpart bootcode -b /boot/boot md0s1
md0s1 has bootcode
Аналогично можно записать загрузочный код для схемы MBR:
# gpart bootcode -b /boot/mbr md0
md0 has bootcode
Если же необходимо установить менеджер загрузки, то нужно всего лишь выбрать другой образ загрузочного кода - /boot/boot0. Так же, не стоит забывать, что у схемы MBR есть аттрибут активного раздела, чтобы его установить нужно использовать команду `
gpart set`:
# gpart set -a active -i 1 md0
md0s1 has active set
# gpart show md0
=> 17 1023978 md0 MBR (500M)
17 819196 1 freebsd [active] (400M)
819213 204782 - free - (100M)
В принципе, этого набора команд достаточно для работы. Если иметь понятие, что и для чего нужно сделать - то сложностей в использовании вообще не вижу. Даже если такая необходимость возникает нечасто, все команды утилиты gpart имеют описание:
# gpart
usage: gpart add [-b start] [-s size] -t type [-i index] [-l label] [-f flags] geom
gpart bootcode [-b bootcode] [-p partcode] [-i index] [-f flags] geom
gpart commit geom
gpart create -s scheme [-n entries] [-f flags] provider
gpart delete -i index [-f flags] geom
gpart destroy [-f flags] geom
gpart modify -i index [-l label] [-t type] [-f flags] geom
gpart set -a attrib -i index [-f flags] geom
gpart show [-lr] [geom ...]
gpart undo geom
gpart unset -a attrib -i index [-f flags] geom
gpart help
gpart list [name ...]
gpart status [-s] [name ...]
gpart load [-v]
gpart unload [-v]