Freebsd разметка диска gparted
Примечания
Если будете использовать автомонтирование ZFS, держать корень `/' на ZFS и будут проблемы с монтированием разделов через fstab(5), то можно заменить mountcritlocal на hostid в /etc/rc.d/zfs. Иначе разделы из fstab будут монтироваться раньше, чем произойдет `zfs mount -a'. Или можно просто использовать опцию монтирования late.
[1] пример migrate.rsync:
Стоит не забыть потом создать эти директории в /h с соответствующими правами на них. В частности без /dev система не загрузится.
Использование gpart для разметки диска
Размечаете первый диск командой gpart на несколько разделов, из которых обязательны только freebsd-boot и freebsd-zfs:
- создаем таблицу разделов типа GPT на диске ad0
- добавляем загрузочный код, позволяющий загружаться с GPT разделов
- создаем раздел для кода загрузки loader'а с раздела GPT
- записываем загрузочный код на него
- создаем swap раздел с меткой swap0 для возможности использовать его в качестве dumpdev, т.к. делать kernel dump'ы на zvol'ах невозможно; метка swap0 нам может пригодиться, например, в fstab
- создаем основной раздел для ZFS с меткой v0_h, где v0 (сокр. от vdev) - номер устройства в pool'е и `h' - название pool'а
- смотрим на результат
Подробная инструкция с пояснениями
Выбор имени жесткого диска
Для начала нужно определить имя устройства, которое мы только что добавили. В этом нам поможет следующая команда:
Или же вот такая команда:
В реальной системе эти команды покажут более полезную информацию, а именно: названия устройств и их серийные номера.
До установки нового устройства мы знали, что наша система установлена на ada0, значит по логике вещей наш новый диск ada1. Это вы можете определить по названию нового устройства, его серийному номеру или же объему.
Теперь проверим, имеется ли разметка на нашем новом диске
Диск не имеет никакой разметки.
Удаление существующей разметки
Если диск уже использовался и есть необходимость удалить с него разметку, просто выполните:
Создание разметки GPT
Для начала мы должны создать разметку диска. Крайне рекомендую забыть о MBR и перейти на новую, более удобную и функциональную — GPT.
Создаем разметку GPT на диске, затем проверяем, что вышло:
Теперь у нас диск имеет разметку GPT. Из вывода можно увидеть, что абсолютно весь диск, начиная с LBA 34 и заканчивая LBA 8388541 пуст. LBA 0−33 — зарезервированы системой под таблицу разделов.
Допустим, нам необходимо создать два раздела на этом диске:
- swap — раздел подкачки
- data — раздел типа ufs для хранения каких либо, необходимых нам, данных.
Создание разделов (слайсов)
Если установка производится на современные жесткие диски, у которых размер сектора = 4 кб, то при создании разделов (партиций) необходимо использовать выравнивание. Можно поступить двумя способами: 1) если указываем параметры раздела в блоках, то номер блока вводить кратным 8, например: -b 40; 2) если указываем размер раздела в байтах, либо не указываем вообще начало и размер, использовать параметр -a 4k, который подгонит начало и конец раздела под секторы, размером 4 кб. Так как мы в данном примере производим тестовую установку на виртуальный жесткий диск, то этого можно не делать. В любом случае перед созданием разделов нужно точно знать размер сектора вашего накопителя, иначе это выльется жуткими тормозами в работе.
Теперь создадим разделы. Для этого существует команда gpart add с различными параметрами. Первый параметр -t — указывает на тип создаваемой файловой системы. В нашем случае будет использовано два типа: freebsd-swap и freebsd-ufs. Далее идут два необязательных параметра: -b — указывает на номер LBA, начиная с которого необходимо создать раздел. Если не указать данный параметр, то раздел будет создан автоматически с первого свободного LBA. -s — указывает на размер раздела в LBA. Размер одного блока LBA = 512 байт. Желательно указывать в количестве блоков LBA, но можно и в кило/мега/гига/… байтах (суффикс k/M/G). Если не указать данный параметр, то раздел будет создан до максимально возможного LBA в пределах пустой области. Также в качестве параметра можно указать метку раздела, например: -l swap1 — в этом случае будет создана метка /dev/gpt/swap1, по которой можно более удобно обращаться к разделу. Последним обязательным параметром идет путь к диску. В нашем случае: /dev/ada1.
Давайте создадим два раздела, а затем посмотрим, что у нас получилось. Первый раздел будем создавать без указания начального LBA, но с указанием размера 1 Гб (2097152 блоков). Второй раздел создадим без указания начального LBA и без указания размера — таким образом он будет создан на всем свободном пространстве.
Размер можно указывать в байтах, а не блоках. Это значительно удобней. Единственный минус — система не всегда может корректно рассчитать количество блоков. Возможны случаи, когда на диске останется пустовать некоторое количество блоков при указании размера раздела в байтах.
Создание файловой системы (форматирование)
Разделы типа swap форматировать нет необходимости. А вот разделы типа ufs перед использованием должны быть отформатированы. Правильнее сказать: на них должна быть создана файловая система.
Для того, чтобы создать файловую систему на втором разделе, достаточно выполнить следующую команду:
В данном случае использовался параметр -U — он говорит о том, что в данной файловой системе должен использоваться механизм Soft Updates. Вы можете не использовать этот параметр, чтобы не включать данный механизм.
Монтирование
Следующим шагом будет монтирование разделов. Для начала, чтобы не забыть, добавим наши новые разделы в /etc/fstab. Мой файл после редактирования выглядит вот так:
Я добавил две строки: первая монтирует swap, вторая монтирует новый раздел в каталог /mnt. На деле у вас должен быть какой-то более значимый каталог. Каталог /mnt служит для временно монтированных устройств.
Для того, чтобы перемонтировать все разделы согласно файла /etc/fstab, просто выполним команду:
Как видно из вывода, раздел /dev/ada1p2 смонтирован. Теперь посмотрим, что произошло с разделом SWAP. Выполним команду:
Как видно, новый раздел SWAP не смонтирован. Чтобы смонтировался SWAP, необходимо его включить специальной командой:
Точно так же при помощи команды swapoff нужно отключать раздел SWAP перед тем, как произвести над ним какие-то действия.
На этом все действия по добавлению нового жесткого диска в систему завершены.
Содержание
Создание ZFS пула
Создаете pool для ZFS на первом разделе и загружаетесь с него:
- создаем pool с именем `h', выключенном поддержкой времени последнего доступа и включенным сжатием данных; вместо ad0p3 используем GPT-метку v0_h, чтобы избежать проблем при смене имен устройств или их нумерации
- создаем необходимые dataset'ы
- населяем pool [1]
- перезагружаемся
- загружаемся *не* с ZFS в single-user режим (loader prompt)
- меняем точку монтирования pool'а на корень
- перезагружаемся
- загружаемся с ZFS (loader prompt)
- добавляем в loader.conf(5) поддержку zfs и точку монтирования / (корня)
- добавляем в rc.conf примонтирование всех томов zfs.
Разбивка и подключение в зеркало второго диска
Повторяете шаг 2 для второго диска и подсоединяете его к "зеркалу":
- Размечаем диск с учетом того, что количество блоков у freebsd-zfs должно быть такое же, как и на первом диске. В данном примере - 484200428.
- подсоединяете его к pool'у как элемент зеркала (не перепутайте с *add*)
- смотрим на результат
Краткая инструкция
Дано: жесткий диск /dev/ada1
Цель: удалить существующую разметку, создать новую разметку GPT, создать два раздела: подкачка и данные и подключить их к рабочей системе.
После каждого действия выполняйте gpart show, чтобы наблюдать за результатом. Последовательность действий:
Несколько слов о такой замечательной утилите как gpart . Утилита предназначена для работы с дисками и разделами на нём. На самом деле, утилита gpart является жесткой ссылкой на утилиту geom . Основная задача утилиты — заменить собой такие устаревшие морально программы для работы с дисками, как bsdlabel и fdisk (хотя они по-прежнему включены в дистрибутив и есть в портах).
И так, имеются 2 жестких диска:
На ada0 установлена сама система, его мы трогать не будем. Нас интересует второй диск — ada1 :
Второй диск необходимо разбить аналогично первому. Проверим, что нам скажет gpart о первом диске:
Первый столбец показывает первый блок раздела. Второй — кол-во блоков в этом разделе. Третий — имя раздела. В четвертой колонке указывается тип файловой системы, и в последнем — размер раздела.
На втором диске в настоящий момент нет ничего:
Полезная фича утилиты gpart — это «отложенное» внесение любых изменений. Т.е., если добавить ключи -fx — то изменения на диск не будут записываться сразу, а только после того, как вы дадите команду:
Либо, если решите отменить все изменения — то:
Создаём новую разметку диска, со схемой GPT (про MBR мы потихоньку забываем):
Теперь — посмотрим на диск:
Если необходимо удалить схему — выполняем:
Размер и смещение начала раздела по-умолчанию задаются в блоках, размер которых обычно соответствует размеру физического сектора, т.е. 512 byte. Для того чтобы не вычислять количество блоков, эти параметры можно указывать с суффиксом размера: B, K, M, G, T, P, E — т.е. от байт до экзабайт. Но лучше указывать размер в секторах, иначе размер может быть вычислен неверно.
Размер раздела указывается после опции -s , а смещение начала — после -b . Если не указывать эти параметры — они будут выбраны автоматически: смещение начала — на первый доступный блок, размер — на максимально возможный из доступного свободного пространства.
Вычисление индекса партиции обычно можно оставить утилите gpart . Если вам нужна какая-нибудь особенная конфигурация, например, чтобы система устанавливалась на ada0p3 — нужно указать параметр -i 3 .
Теперь, создадим загрузочный раздел, как на диске ada0 :
Далее, создаём раздел размером 7.6G или 15935360 блоков по 512 bytes.
; 15935360 * 512
8158904320
; 8158904320 / 1024
7967680
Итого, получится раздел размером 7967680 КБ, или 7.9G. Фактически, gpart покажет 7.6 G, т.к. около 5% резервируется самой файловой системой.
-b 162 — первый сектор, с которого будет начинаться раздел;
-s 15935360 — кол-во блоков раздела, так же можно указать так 7.9G;
-t freebsd-ufs — тип файловой системы, так же можно указывать freebsd-swap, freebsd-boot и другие, подробнее — как обычно, в man gpart.
И последний раздел — для раздела подкачки:
Тут мы не указываем ключ -s — gpart автоматически займёт все оставшееся место на диске.
Сравним со старым диском:
Или — просто запустить gpart show без ключей:
=> 34 16777149 ada1 GPT (8.0G)
34 128 1 freebsd-boot (64k)
162 15935360 2 freebsd-ufs (7.6G)
15935522 841661 3 freebsd-swap (411M)
Удаление разделов производится так же легко. Например, мы хотим удалить раздел swap и пересоздать его заново.
Раздел freebsd-swap имеет метку 3. Выполняем:
И теперь — пересоздадим swap -раздел, сделав его абсолютно аналогичным разделу на первом диске, т.е. укажем начальный блок и размер раздела в блоках:
Сравним ещё раз:
=> 34 16777149 ada1 GPT (8.0G)
34 128 1 freebsd-boot (64k)
162 15935360 2 freebsd-ufs (7.6G)
15935522 837632 3 freebsd-swap (409M)
16773154 4029 — free - (2M)
Создадим файловую систему, если требуется:
Если хотите использовать Soft Updates для этой файловой системы — добавьте ключ -U :
В далеком 1983 году для разбиения диска не несколько логических для компьютеров IBM был разработан формат MBR, в дальнейшем он претерпел ряд небольших изменений (чтобы соответствовать современным требованиям). Аббревиатура MBR обозначает Master Boot Record - главная загрузочная запись. В самом начале MBR хранится загрузчик, его длина в в первой версии MBR не превышает 446 байт, а в следующих версиях он существенно меньше. После загрузчика оставшееся место занимает партиционная таблица (таблица разделов), которая может содержать до 4х разделов.
В общей сложности MBR занимает всего 512 байт. Во времена DOS не было никаких проблем с загрузчиком на 440 байт, однако очевидно что 440 байт совершенно недостаточно для загрузчика современных операционных систем. Кроме того, 4х разделов в последнее время тоже часто недостаточно.
Для решения первой проблемы (с загрузкой) разработчики операционных систем стали помещать вторые загрузчики(ntldr, Lilo, Grub, и др.) в первые сектора разделов, в которых находится операционная система, в этом случае размер загрузчика практически не ограничен, загрузчику из MBR в этом случае требуется только найти раздел, загрузить в память начало второго загрузчика и передать ему управление.
Со второй проблемой каждый производитель стал бороться по своему, но смысл у всех одинаковый: создается раздел, внутри которого имеется партиционная таблица в своем формате, внутри нее находятся разделы: у Microsoft это Extended Partition (расширенный раздел) у FreeBSD, Solaris и ряда других это BSD Disklabel, у остальных производителей ряд менее известных форматов, таких как Apple Partition Map, Logical Disk Manager, VTOC (Volume Table Of Contents). Однако с ростом объема дисков появилась третья проблема: по скольку в MBR используется 32 битная адресация, то при размере сектора 512 байт мы наблюдаем лимит в 2 ТБ (не надо мне говорить о 4кб секторах у новых дисков, с ними, в большинстве случает, MBR тоже не дружит :)). Итак, встречаем GPT (GUID Partition Table).
Сам по себе GPT существенно больше, он может содержать огромное кол-во разделов (65535, но многие ОС накладывают дополнительные ограничения, обычно это 128 разделов, в FreeBSD лимит можно установить при создании GPT), для каждого раздела можно задать метку. Кроме того для каждого раздела и всего диска вцелом имеются уникальные идентификаторы, и теперь при любых перемещениях дисков найти нужный диск по идентификатору не составит проблем. Для загрузчика, обычно, выделяется отдельный раздел, и лимитов на размер загрузчика в этом случае нет. Кроме того, GPT использует 64 битную адресацию, что позволяет адресовать диски до 8 Зетабайт (8589934592 ТБ) при размере сектора 512 байт(при больших секторах - максимальный размер, соответственно, увеличивается).
В FreeBSD исторически для разметки дисков используется утилита fdisk, а затем, для создания разделов внутри BSD Disklabel утилита disklabel. В FreeBSD использование disklabel является обязательным для загрузочного раздела на MBR. Разделы, загрузка с которых не требуется, могут находиться на любом поддерживаемом разделе. С появлением GPT в FreeBSD появилась замечательная утилита gpart, которая поддерживает не только GPT, но и MBR, APM, BSD, LDM, PC98 и VTOC8.
И так перейдём к практике. Для просмотра состояния винтов воспользуемся командой gpart show:
Тут мы наблюдаем что имеется 2 диска, на 1.4Тб и 95Тб (массив). Диск 95 Тб сейчас размечен MBR и использовать можно всего 2Тб. Удаляем с него MBR и создадём там GPT.
Теперь видно что все 95 Тб диска доступны для использования. Теперь, предположим, что требуется на этот диск установить ОС, разделив корень, /usr /home /var и /tmp и сделать пару больших разделов под данные. Итак, для загрузки надо создать маленький раздел с загрузчиком в начале диска. В начале диска его необходимо размещать, для совместимости с материнскими платами, которые еще не поддерживают загрузку с больших дисков. На новых материнских платах с EFI этот раздел размещать можно где угодно. Затем в этот раздел запишем загрузчик.
Итак, что мы имеем: мы создали раздел 512Кб, указав тип freebsd-boot и дали ему метку bootloader. Затем записали 2 загрузчика: первый загрузчик из файла /boot/pmbr в то место, где загрузчик находится в случае MBR (это для материнских плат не поддерживающих или не полностью поддерживающих GPT) и второй загрузчик /boot/gptboot мы кладем в раздел номер 1 (-i 1). Кроме того, наименование разделов тоже становится другим, с MBR разделы именовались da0s1, da0s2a, da0s2b…, теперь da0p1, da0p2, da0p3, а поскольку необходимость в BSD Disklabel теперь пропадает то меток a,b,d,… от disklabel больше нет.
Создадим остальные разделы для нашей ОС:
Что очень удобно, это будет работать независимо от компьютера, контроллера и даже, независимо от отперационной системы (если ОС поддерживает GPT и метки).
Ну и наконец заполним оставшееся место
Как видим раздел занял все оставшееся место. Немного подумав, решаем создать там 2 раздела.
Ну вот, теперь осталось созданные разделы отформатировать
Детальная информация хранящаяся в GPT
Тут мы видим всю подробную информацию о разделах. Так-же тут видны метки и UUID разделов. UUID это дополнительный идентификатор, который присваивается каждому разделу при создании, по этому идентификатору так-же как и по метке можно обращаться к разделу, но через путь /dev/gptid/…UID…
Ссылки
Создание шифрованного с помощью ELI раздела на ZFS (Англ.)
Настройка системы для ZFS (Англ.)
Загрузка с ZFS практический пример (Рус.) - Небольшой самопиар и пример инсталляции на ZFS mirror
FreeBSD на GPT (Англ.) - Статья о преимушествах GPT схемы перед MBR
Сделать Gpart дефолтной (Англ.) - Дискуссия в рассылке, о необходимости перехода на использование GPT по дефолту.
ZFS on Root (Англ.) - Статья об установки ZFS в качестве корневой ФС на официальной вики.
ZFS (Англ.) - Общая страничка о ZFS в официальной вики, много ссылок по теме, в том числе и о разных способах загрузки.
Несколько слов о такой замечательной утилите как gpart . Утилита предназначена для работы с дисками и разделами на нём. На самом деле, утилита gpart является жесткой ссылкой на утилиту geom . Основная задача утилиты – заменить собой такие устаревшие морально программы для работы с дисками, как bsdlabel и fdisk (хотя они по-прежнему включены в дистрибутив и есть в портах).
И так, имеются 2 жестких диска:
На ada0 установлена сама система, его мы трогать не будем. Нас интересует второй диск – ada1 :
Второй диск необходимо разбить аналогично первому. Проверим, что нам скажет gpart о первом диске:
Первый столбец показывает первый блок раздела. Второй – кол-во блоков в этом разделе. Третий – имя раздела. В четвертой колонке указывается тип файловой системы, и в последнем – размер раздела.
На втором диске в настоящий момент нет ничего:
Полезная фича утилиты gpart – это “отложенное” внесение любых изменений. Т.е., если добавить ключи -fx – то изменения на диск не будут записываться сразу, а только после того, как вы дадите команду:
Либо, если решите отменить все изменения – то:
Создаём новую разметку диска, со схемой GPT (про MBR мы потихоньку забываем):
Теперь – посмотрим на диск:
Если необходимо удалить схему – выполняем:
Размер и смещение начала раздела по-умолчанию задаются в блоках, размер которых обычно соответствует размеру физического сектора, т.е. 512 byte. Для того чтобы не вычислять количество блоков, эти параметры можно указывать с суффиксом размера: B, K, M, G, T, P, E – т.е. от байт до экзабайт. Но лучше указывать размер в секторах, иначе размер может быть вычислен неверно.
Размер раздела указывается после опции -s , а смещение начала – после -b . Если не указывать эти параметры – они будут выбраны автоматически: смещение начала – на первый доступный блок, размер – на максимально возможный из доступного свободного пространства.
Вычисление индекса партиции обычно можно оставить утилите gpart . Если вам нужна какая-нибудь особенная конфигурация, например, чтобы система устанавливалась на ada0p3 – нужно указать параметр -i 3 .
Теперь, создадим загрузочный раздел, как на диске ada0 :
Далее, создаём раздел размером 7.6G или 15935360 блоков по 512 bytes.
; 15935360 * 512
8158904320
; 8158904320 / 1024
7967680
Итого, получится раздел размером 7967680 КБ, или 7.9G. Фактически, gpart покажет 7.6 G, т.к. около 5% резервируется самой файловой системой.
-b 162 – первый сектор, с которого будет начинаться раздел;
-s 15935360 – кол-во блоков раздела, так же можно указать так 7.9G;
-t freebsd-ufs – тип файловой системы, так же можно указывать freebsd-swap, freebsd-boot и другие, подробнее – как обычно, в man gpart.
И последний раздел – для раздела подкачки:
Тут мы не указываем ключ -s – gpart автоматически займёт все оставшееся место на диске.
Сравним со старым диском:
Или – просто запустить gpart show без ключей:
=> 34 16777149 ada1 GPT (8.0G)
34 128 1 freebsd-boot (64k)
162 15935360 2 freebsd-ufs (7.6G)
15935522 841661 3 freebsd-swap (411M)
Удаление разделов производится так же легко. Например, мы хотим удалить раздел swap и пересоздать его заново.
Раздел freebsd-swap имеет метку 3. Выполняем:
И теперь – пересоздадим swap -раздел, сделав его абсолютно аналогичным разделу на первом диске, т.е. укажем начальный блок и размер раздела в блоках:
Сравним ещё раз:
=> 34 16777149 ada1 GPT (8.0G)
34 128 1 freebsd-boot (64k)
162 15935360 2 freebsd-ufs (7.6G)
15935522 837632 3 freebsd-swap (409M)
16773154 4029 – free – (2M)
Создадим файловую систему, если требуется:
Если хотите использовать Soft Updates для этой файловой системы – добавьте ключ -U :
Сейчас Вы узнаете, как за 5 минут добавить жесткий диск в FreeBSD. Итак. Сначала будет преведена полная инструкция для понимания процесса, а в конце будет краткий список действий, которое будет содержать лишь список команд в качестве шпаргалки.
Читайте также: