Как я уже упоминал в предыдущей заметке, класс 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]
По поводу особенности реализации и 512-байтного сектора, то в свежих версиях я это исправил и теперь размер вычисляется правильно.
ОтветитьУдалитьВместе с SSD и HDD от WD пришла новая проблема - сектора размером 4K. Хорошо бы автоматически (либо по специальной опции)выравнивать начало партициий по границе сектора. При наличии опции с параметром, я бы всегда задавал выравнивание по границе 1М (удобно и для SSD и для RAID).
ОтветитьУдалитьСкажите пожалуйста, а как метку раздела снести?
ОтветитьУдалить# gpart modify -i 2 -l "" ad10
ad10p2 modified
# gpart show -l ad10
=> 34 234441581 ad10 GPT (112G)
34 256 1 boot (128K)
290 8388608 2 sysswap (4.0G)
8388898 4194304 3 sysroot (2.0G)
12583202 62914560 4 sysvar (30G)
75497762 158943853 5 sysusr (76G)
Таким образом чото не получается.
у меня работает. Какая версия системы? Что выводит команда:
ОтветитьУдалить# ident /sys/geom/part/g_part_gpt.c
# uname -mrs
ОтветитьУдалитьFreeBSD 8.2-RELEASE-p2 amd64
# ident /sys/geom/part/g_part_gpt.c
/sys/geom/part/g_part_gpt.c:
$FreeBSD: src/sys/geom/part/g_part_gpt.c,v 1.16.2.13.2.1 2010/12/21 17:09:25 kensmith Exp $
Добрый день!
ОтветитьУдалитьА можно по подробнее рассказать про bootcode?
Я немного ни понимаю различай между -p и -b опциями, и что применять для моего случая со sparc64 =(
Лично у меня не было возможности поработать с FreeBSD на спарках,
ОтветитьУдалитьпоэтому ничего конкретного тут посоветовать не могу. Видимо, тут всё зависит от того,
какая таблица разделов у вас используется. Некоторое время назад я добавил главу
"BOOTSTRAPPING" в мануал gpart(8). Там есть объяснение с примерами, какой загрузочный код
где должен находиться: gpart(8)
Разница между -p и -b в том, что первый - partcode, располагается на специально выделенном
для него разделе, а второй - bootcode, находится в области метаданных таблицы разделов.