Деление дисков на участки


Деление участков на разделы

Таблицы участков в стиле i386 недостаточно, чтобы удовлетворить требованиям, предъявляемым системой FreeBSD к разделам диска. Таблица участков поддерживает всего четыре раздела, тогда как для работы FreeBSD необходимы следующие разделы: корневой раздел, пространство для свопинга, /usr, /var и /tmp. Кроме того, у системного администратора могут быть свои пожелания к делению диска на разделы. Метка диска (disklabel) — это специальный блок данных, расположенный в начале участка, который определяет позиции разделов внутри участка. Различные платформы имеют различные форматы и требования для меток дисков — на платформах i386 и amd64 используется формат bsdlabels, на платформе sparc64 — sunlabels и т. д. Метками дисков на всех платформах управляет утилита disklabel(8). Если вы работаете с незнакомой аппаратной архитектурой, обязательно прочитайте страницу руководства disklabel(8), прежде чем пытаться редактировать диск!

Чтение меток дисков

Чтобы просмотреть метку диска для определенного участка, запустите disklabel(8) с именем устройства участка в качестве аргумента. Например, /dev/ad0s1 — имя устройства для участка 1 на диске ad0:

Утилита disklabel показывает, что диск поддерживает до восьми разделов (1), хотя сконфигурировано только шесть. Имена разделов определяются символами от a до h. Хотя диск и поддерживает «до восьми» разделов, это не означает, что на новом диске у вас действительно имеется восемь разделов. Раздел a традиционно используется как корневой раздел. Никто не помешает вам использовать его для хранения обычных данных, но сам я предпочитаю не рисковать и не вводить в заблуждение себя самого. Раздел b традиционно используется как пространство свопинга. Конечно, операционная система FreeBSD отведет для свопинга только разделы, помеченные как swap в файле /etc/fstab, но меня вряд ли обрадует факт использования раздела b для хранения данных, всплывший при поиске неисправности в 3 часа ночи. Наконец, раздел c — это метка для всего участка. И хотя FreeBSD больше не требует наличия раздела c, это вовсе не означает, что все дополнительные инструменты, которыми я могу пользоваться, правильно воспримут раздел c с данными на нем! История этого раздела так глубоко уходит в прошлое, что я даже не мечтаю использовать его для хранения данных. Все это означает, что под хранение данных вы можете отвести до шести разделов (от d до h и, возможно, a).

Для каждого раздела указываются размер в секторах (2) и смещение от начала участка (3). Смещение — это расстояние от начала участка до начала раздела в секторах. Не забывайте, что нумерация секторов начинается с 0. Раздел c охватывает весь диск, который содержит 39 179 889 секторов, и имеет смещение 0. В этом примере раздел a имеет размер 1 048 576 секторов и смещение 0. Корневой раздел — первый на участке. Раздел b начинается с сектора 1 048 576 на участке, то есть следует сразу за разделом a, и занимает 2 097 152 сектора, откуда следует, что очередной раздел должен начинаться с сектора 3 145 728 A 048 576 + 2 097 152 = 3 145 728). Проверьте смещение раздела d. Все значения вычисляются простым сложением.

Для каждого раздела нужно указывать тип файловой системы (4). В операционной системе FreeBSD обычно используются следующие типы файловых систем: 4.2BSD (любые файловые системы FreeBSD, такие как UFS или UFS2), swap (для пространства свопинга) или unused (для раздела c и для пустого пространства). FreeBSD поддерживает и другие типы файловых систем, но довольно странно, когда в этой операционной системе посреди жесткого диска размещается файловая система FAT или CD, и уж точно вы никогда не увидите диск с разделом UNIX Sixth Edition.

Следующие два столбца указывают размеры фрагментов (5) и блоков (6) для файловых систем UFS и UFS2. В операционной системе FreeBSD блоки по умолчанию имеют размер 16 Кбайт, а фрагменты — 2 Кбайт. Структура файловой системы UFS описана в главе 8. Значения по умолчанию прекрасно подходят для большинства современных систем. При наличии файловой системы специального назначения, с файлами только необычного размера, у вас может появиться потребность изменить размер блока. Например, если приложение использует миллионы файлов, не больше 6 Кбайт каждый, то есть смысл уменьшить размер блока до 8 Кбайт. Минимальный возможный размер блока — 4 Кбайт. Если приложение использует лишь несколько огромных файлов, возможно, есть смысл увеличить размер блока до 32 Кбайт или даже до 64 Кбайт. Однако должен предупредить: система FreeBSD предполагает, что размер фрагмента составляет точно одну восьмую часть размера блока. Использование другого отношения размеров блок/фрагмент отрицательно скажется на производительности.

В последней колонке (7) указано число цилиндров в группе цилиндров этой файловой системы. Всегда, всегда позволяйте FreeBSD вычислять это значение. Учитывая объем лжи — простите, я имел ввиду количество «преобразований», которые производят жесткие диски и операционные системы при определении геометрии жесткого диска, — а также тот факт, что вам не удастся извлечь пользу из изменения информации о группе цилиндров, лучше оставить эти значения в покое.

Теперь, когда мы разобрались с тем, что такое метки дисков, попробуем создать свои собственные.

Резервное копирование и восстановление метки диска

Прежде чем выполнять какие-либо операции, необходимо создать резервную копию метки диска:

# disklabel /dev/da0s1 > da0s1.label.backup

При наличии этого файла вы сможете восстановить метку диска в ее прежнее состояние с помощью ключа -R:

# disklabel -R /dev/da0s1 da0s1.label.backup

Ап! — и ваша старая метка диска восстановлена!

Редактирование метки диска

Чтобы заново делить участок на разделы, необходимо изменить метку диска. Изменение метки диска влечет за собой уничтожение разделов на диске. Это означает, что все данные на этом диске будут утрачены. (Это не значит, что они полностью исчезли с диска, — их просто невозможно найти.) Я рекомендую редактировать метки дисков только на новых дисках, не содержащих данных, или на дисках, для которых были сделаны резервные копии. Вы не сможете редактировать метку диска для участка со смонтированными разделами.

Вот пример метки диска для моего тестового диска:

# disklabel /dev/da0s1
# /dev/da0s1:
8 partitions:
     size  offset  fstype  [fsize bsize bps/cpg]
 c: 17767827       0  unused       0     0         # "raw" part, don't edit
 d: 17767827       0  4.2BSD    2048 16384  28552

Теперь нужно решить, как поделить этот диск. Согласно информации, полученной от fdisk(8), на этом участке есть 8 675 Мбайт свободного пространства. Мне требуется пространство свопинга размером 1 Гбайт и два раздела по 2 Гбайт, а четвертый раздел должен занять оставшееся пространство (примерно 3,5 Гбайт). На всех этих разделах будут использоваться стандартные размеры блоков и фрагментов. Теперь нужно запустить disklabel(8) с ключом -e, и мы получим копию метки диска в текстовом редакторе. Чтобы создать четыре нужных мне раздела, я отредактировал метку так:

Куда делись все числа — количество секторов, смещения? Утилита disklabel(8) распознает сокращения K (Кбайт), M (Мбайт) и G (Гбайт) и может самостоятельно выполнить необходимые вычисления, чтобы исходя из размера раздела получить количество секторов. Нам достаточно указать размер каждого раздела в требуемых единицах измерения. Обратите внимание на раздел f. Символ звездочки (*) сообщает, что disklabel(8) должна отдать этому разделу все остальное пространство. Кроме того, здесь можно использовать проценты, сказав, например: «Этот раздел должен занимать 50 процентов оставшегося свободного пространства».

Помимо этого disklabel(8) может вычислить смещение для каждого раздела. Символ звездочки (*) сообщает утилите disklabel(8), что она сама должна вычислить величину смещения.*

Наконец, обратите внимание на размеры блоков и фрагментов. Для раздела d они указаны явно, но лишь потому, что в первоначальной метке уже имелся раздел d с этими значениями, а я просто поленился стереть их. Утилита disklabel(8) будет использовать значения по умолчанию, если явно не указано иное.

Сохраните плоды своего труда, закройте редактор и взгляните на новую метку диска:

Как видите, были вычислены размеры разделов в секторах и смещения, но как быть с размерами блоков и фрагментов для разделов e и f? Когда вы будете создавать файловые системы на этих разделах, утилита newfs(8) заполнит их значениями по умолчанию.

Копирование структуры деления диска на участки и разделы

Итак, вы научились выполнять резервное копирование таблиц участков и меток диска и восстанавливать их из резервных копий. А нельзя ли с их помощью воссоздать структуру участков и разделов на идентичных дисках? Да, это возможно! Но в первую очередь нужно убедиться, что диски действительно идентичны. Не все диски одного и того же размера имеют одинаковое число секторов. Если диски немного отличаются друг от друга, то вы сможете скопировать структуру разделов наименьшего диска на все остальные.

Сначала отредактируйте таблицы участков и разделов на первом диске в точном соответствии со своими потребностями. Создайте резервные копии меток диска и таблиц участков, а затем «восстановите» эти таблицы на других дисках. Например, на диске /dev/da0 только один участок. Давайте выполним копирование таблицы участков этого диска и метки этого участка, а затем восстановим их на диске /dev/da2:

# fdisk -p /dev/da0 > da0.slice.table
# disklabel /dev/da0s1 > da0s1.disklabel
# fdisk -f da0.slice.table /dev/da2
# disklabel -R /dev/da2s1 da0s1.disklabel

Проверьте новую конфигурацию диска /dev/da2 с помощью утилит fdisk(8) и disklabel(8). Этот прием поможет создать серию дисков с идентичным делением, например, если понадобится выполнить сборку массива дисковой памяти с помощью классов GEOM.

Отсутствующие метки диска

Иногда встречаются участки, на которых вообще нет метки диска. У меня такая ситуация обычно возникает с тестовыми дисками, где я порой заново выполняю разбиение на участки и разделы для проверки своих сумасбродных идей. Если на участке нет метки диска, ее можно создать с помощью ключа -w:

# disklabel -w /dev/da0

Эта новая метка диска будет иметь единственный раздел, охватывающий весь участок. Редактировать существующую метку гораздо проще, чем создавать ее на пустом месте.

Комментарии запрещены.