Разбивка диска с помощью GPT (GUIDPartitionTable) - стандарт размещения разделов, на жестком диске.
GUID Partition Table (GPT) - является частью стандарта EFI (UEFI), который был предложен компанией Intel, в качестве замены BIOS. EFI использует GPT, так же как BIOS, использует Master Boot Record (MBR).
Используемая, в настоящее время схема PC BIOS, использует master boot record (MBR), в начале процесса инициализации диска. MBR начинается с части называемой Master Boot Code, исполняемый двоичный код, служащий для идентификации и загрузки, активного раздела. EFI вместо того, что бы реализовывать аналогичную функциональность, и для обратной совместимости содержит в первом секторе MBR, а уже после него идет Primary Partition Table Header (заголовок GPT), который и является началом GPT.
GPT использует современную схему адресации logical block addressing (LBA), вместо устаревшей cylinder-head-sector (CHS), используемой MBR (современные реализации MBR тоже используют и LBA). Устаревшая MBR содержится в LBA 0, GPT заголовок начинается с LBA 1 и за ним следует таблица разделов (рис. 1).
Рис. 1.
GPT обеспечивает следующие возможности:
- максимальная ёмкость 18 экзабайт;
- до 128 разделов на диске;
- есть главная и резервная таблицы разделов;
- чётко определённый и самораспознающийся формат раздела;
- каждый раздел имеет уникальный ID во избежание одинаковых идентификаторов;
- GPT заголовок и таблица разделовGPT защищены контрольной суммой.
1.) Смотрим что у нас на жестком диске и удаляем все разделы.
1.1 Информация о разделах: Fixit$ gpart show ipsd0
=> 63 312581745 ipsd0 MBR (149G)
63 11293632 1 !12 [active] (5.4G)
11293695 301288113 - free - (144G)
1.2 Удаляем разделы: Fixit$ gpart delete -i 1 ipsd0
ipsd0s1 deleted
1.3 Уничтожаем существующую таблицу разделов (в данном случае - MBR): Fixit$ gpart destroy ipsd0
ipsd0 destroyed
1.4 Создаём таблицу GPT: Fixit$ gpart create -s GPT ipsd0
ad4 created
Fixit$ gpart show ipsd0
=> 34 312581741 ipsd0 GPT (149G)
34 312581741 - free — (149G)
2.) Создаём разделы.
2.1. Раздел для загрузчика.
Размер раздела для загрузчика не должен быть больше 545 кБ, иначе при загрузке появится сообщение "Boot loader too large" и загрузка остановится.
По умолчанию началом первого раздела за GPT является 34 блок, но если в качестве целевого жёсткого диска будет использоваться жёсткий диск с 4кБ секторами, то в качестве первого блока для раздела freebsd-boot необходимо использовать не 34, а 40 блок (т.е. сделать необходимое выравнивание).
Загрузочный раздел начинается по смещению 34 блока от начала диска - сразу после таблицы GPT. Его размер задаём в 256 блоков, это составляет 128 кБайт.
Тип раздела "freebsd-boot" означает, что этот раздел выделен специально под загрузчик FreeBSD: Fixit$ gpart add -b 34 -s 256 -t freebsd-boot ipsd0
ipsd0p1 added
Параметр -b указывает смещение начального блока создаваемого раздела, а -s - его размер (дополнения к цифрам k, m, g означают, что размер задан не в блоках, а в кило-, мега-, гигабайтах).
2.2. Создаём раздел для swap-а.
Можно создать swap и на ZFS, но тогда не будет возможности записи дампа ядра при kernel panic. Размер раздела будет 4 ГБ, в блоках это = 1024*1024*2*4 (в 1кБ два блока).
Тип раздела — freebsd-swap:Fixit$ gpart add -b 290 -s 8388608 -t freebsd-swap -l swap0 ipsd0
ipsd0p2 added
2.3. Создаём раздел для ZFS пула, отведя ему остатки.
Тип раздела — freebsd-zfs. Начало и конец раздела можно не указывать, если под него выделяется всё оставшееся место на жёстких дисках, как в моём случае.
Fixit$ gpart add -t freebsd-zfs -l disk0 ipsd0
ipsd0p3 added
Итоговая таблица GPT будет такой: Fixit$ gpart show ipsd0
=> 34 312581741 ipsd0 GPT (68G)
34 256 1 freebsd-boot (128K)
290 8388608 2 freebsd-swap (4.0G)
8388608 134983357 3 freebsd-zfs (64G)
Можно вывести и по указанным идентификаторам: Fixit$ gpart show -l ipsd0
=> 34 312581741 ipsd0 GPT (68G)
34 256 1 boot0 (128K)
290 8388608 2 swap0 (4.0G)
8388608 134983357 3 disk0 (64G)
Устанавливаем защитный Protected MBR (pmbr) от программ, не знающих GPT, и GPART загрузчик gptzfsboot: Fixit$ gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ipsd0
Недавно в утилиту gpart была добавлена новая функциональность: возможность резервного копирования и восстановления таблицы разделов: gpart backup/restore.