bsdlabel

bsdlabel - чтение и запись метки диска

Утилита bsdlabel устанавливает, проверяет или изменяет метку BSD раздела на диске или в файле, содержащем образ раздела. Кроме того, bsdlabel может установить на диск код загрузчика.

bsdlabel [-A] диск | -f файл
bsdlabel -w [-An] [-B [-b загрузчик]] [-m машина] диск | -f файл [тип]
bsdlabel -e [-An] [-B [-b загрузчик]] [-m машина] диск | -f файл
bsdlabel -R [-An] [-B [-b загрузчик]] [-m машина] [-f] диск | -f файл файл_прототипа

Имя дискового устройства

При указании устройства (т.е., когда опция -f не используется) префикс /dev/ может быть опущен и bsdlabel добавит его автоматически.

Общие опции
Опция -A включает обработку традиционных частей метки BSD. Если опция не указана, эти поля автоматически инициализируются подходящими значениями.

Опция -f говорит bsdlabel о том, что вместо раздела диска нужно будет оперировать с файлом.

Опция -n прерывает работу bsdlabel сразу перед тем, как диск был бы модифицирован, и вместо записи результата на диск просто показывает его.

Опция -m машина заставляет bsdlabel использовать формат другой архитектуры. В настоящее время допустимыми значениями являются i386, amd64, ia64, pc98 и alpha. Если эта опция опускается, утилита bsdlabel будет использовать формат машины, на которой она работает.

Чтение метки диска

Чтобы просмотреть имеющуюся метку диска, bsdlabel используется следующим образом:

bsdlabel [-A] [-m машина] диск

Аргумент диск указывает на желаемый диск, и может быть задан в виде da0 или /dev/da0. Эта команда отобразит текущую конфигурацию разделов.

Запись стандартной метки

Чтобы записать стандартную метку, используйте bsdlabel так:

bsdlabel -w [-An] [-m машина] диск [тип]

Если указан тип диска, будет использована соответствующая запись из файла disktab(5), в противном случае будет записана стандартная метка.

Редактирование существующей метки диска

Чтобы отредактировать существующую метку диска, используйте bsdlabel так:

bsdlabel -e [-An] [-m машина] диск

Эта команда открывает дисковую метку в редакторе по умолчанию, после редактирования проверяет её на корректность и записывает её на диск.

Восстановление метки диска из файла

Формат запуска bsdlabel для восстановления метки диска из файла, следующий:

bsdlabel -R [-An] [-m машина] диск файл_прототипа

Утилита bsdlabel позволяет восстановить метку диска, которая была предварительно сохранена в файл в формате ASCII. Файл прототипа должен иметь
тот же формат, что используется при чтении или редактировании метки. Комментарии начинаются со знака `#' и продолжаются до конца строки.

Установка загрузчика

Если указана опция -B, код загрузчика будет cчитан из файла /boot/boot и записан на диск.
Опция -b загрузчик позволяет задать другой файл с кодом загрузчика.

ФАЙЛЫ
/boot/boot Образ стандартного загрузчика.
/etc/disktab Файл описания дисков.

ФОРМАТ СОХРАНЯЕМОГО ФАЙЛА
Утилита bsdlabel использует ASCII формат для чтения, редактирования и восстановления метки диска. Формат метки выглядит примерно так:

 
8 partitions:
 #        size   offset    fstype   [fsize bsize bps/cpg]
   a:    81920       16    4.2BSD     2048 16384  5128
   b:  1091994    81936      swap
   c:  1173930        0    unused        0     0         # "raw" part, don't edit

Если указана опция -A, то формат будет таким:

# /dev/da1c:
 type: SCSI
 disk: da0s1
 label:
 flags:
 bytes/sector: 512
 sectors/track: 51
 tracks/cylinder: 19
 sectors/cylinder: 969
 cylinders: 1211
 sectors/unit: 1173930
 rpm: 3600
 interleave: 1
 trackskew: 0
 cylinderskew: 0
 headswitch: 0           # milliseconds
 track-to-track seek: 0  # milliseconds
 drivedata: 0

 8 partitions:
 #        size   offset    fstype   [fsize bsize bps/cpg]
   a:    81920       16    4.2BSD     1024  8192    16
   b:   160000    81936      swap
   c:  1173930        0    unused        0     0         # "raw" part, don't edit

Строки, начинающиеся с символа `#' являются комментариями.

Таблица разделов может иметь до 8 разделов. Каждый раздел содержит следующую информацию:

Идентификатор раздела
Обозначается одной латинской буквой в интервале от "a" до "h". По договорённости, раздел "c" зарезервирован для описания диска в целом.
size
Размер раздела в секторах, K ( килобайтах - 1024 ), M ( мегабайтах - 1024*1024 ), G ( гигабайтах - 1024*1024*1024 ), % процентах после удаления всех разделов с фиксированным размером, кроме раздела "c", или * ( всё свободное место, оставшееся после разделов с фиксированным размером и разделов, описанных в процентах ). Для раздела "c" размер * обозначает весь диск. Допустимо указание суффиксов K, M и G в нижнем регистре. Размер и суффикс должны быть указаны без пробелов между ними.
Пример: 2097152, 1G, 1024M и 1048576K все обозначают один и тот же размер ( с учётом 512-байтовых секторов ).
offset
Смещение начала раздела относительно начала диска в секторах, или *, чтобы утилита bsdlabel сама посчитала правильное значение ( конец предыдущего раздела плюс один, раздел "c" игнорируется ). Для раздела "c", * обозначает нулевое смещение. Первый раздел должен иметь смещение 16, потому что первые 16 секторов зарезервированы под метаданные.
fstype
Описывает назначение раздела. Пример выше показывает все используемые в настоящий момент типы разделов. Для файловых систем UFS и разделов ccd(4) используется тип 4.2BSD. Для дисков Vinum используется тип vinum. К другим часто встречающимся типам относятся swap и unused. По соглашению, раздел "c" представляет собой весь слайс и должен иметь тип unused, хотя утилита bsdlabel не заставляет придерживаться этого соглашения. Утилита bsdlabel также знает о других типах разделов, которые не используются в настоящее время. ( Смотрите определения, начинающиеся с FS_UNUSED, в для более подробного ознакомления. )
fsize
Только если файловая система 4.2BSD, размер фрагмента; см. newfs(8).
bsize
Только если файловая система 4.2BSD, размер блока; см. newfs(8).
bps/cpg
Только если файловая система 4.2BSD, количество цилиндров в группе; см. newfs(8).

Примеры:

Показать метку первого слайса диска da0, полученную через /dev/da0s1:

bsdlabel da0s1

Записать метку da0s1, хранящуюся в ядре, в файл savedlabel. В дальнейшем этот файл может быть использован для восстановления метки с помощью опции
-R:

bsdlabel da0s1 > savedlabel

Создать метку на da0s1:

bsdlabel -w /dev/da0s1

Прочитать метку с da0s1, отредактировать её и записать результат на диск:

bsdlabel -e da0s1

Прочитать метку da0s1, отредактировать её, и показать, какой бы была новая метка (в секторах). Эта команда не записывает новую метку, ни в ядро, ни на диск:

bsdlabel -e -n da0s1

Записать стандартную метку на da0s1. Чтобы впоследствии отредактировать разделы и параметры файловых систем, воспользуйтесь другой командой, bsdlabel -e:

bsdlabel -w da0s1

Восстановить метку диска на da0s1 на основе информации, полученной из файла savedlabel:

bsdlabel -R da0s1 savedlabel

Показать, какой бы была метка на da0s1, используя конфигурацию разделов в файле label_layout. Полезно для определения актуального дискового пространства, выделяемого под разделы, при использовании схемы разбиения на разделы на основе % и *:

bsdlabel -R -n da0s1 label_layout

Установить новый загрузчик на da0s1. Код загрузчика берётся из файла /boot/boot:

bsdlabel -B da0s1

Установить новую метку и загрузчик. Код загрузчика берётся из файла newboot в текущем рабочем каталоге:

bsdlabel -w -B -b newboot /dev/da0s1

Полностью стереть всю предыдущую информацию на диске, создав на её месте новый загрузочный диск с таблицей DOS-разделов, состоящей из одного слайса на весь диск. Инициализировать метку на этом слайсе, затем отредактировать её. Команды dd(1) не являются обязательными, но могут потребоваться, чтобы некоторые BIOSы правильно распознали диск:

 
dd if=/dev/zero of=/dev/da0 bs=512 count=32
fdisk -BI da0
dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
bsdlabel -w -B da0s1
bsdlabel -e da0s1

Пример метки диска с использованием новых типов размера разделов, таких как %, M, G и *, который может быть использован в качестве исходного файла для "bsdlabel -R ad0s1 new_label_file'':

 
# /dev/ad0s1:

 8 partitions:
 #        size   offset    fstype   [fsize bsize bps/cpg]
   a:   400M       16    4.2BSD     4096 16384    75     # (Cyl.    0 - 812*)
   b:     1G        *      swap
   c:      *        *    unused
   e: 204800        *    4.2BSD
   f:     5g        *    4.2BSD
   g:      *        *    4.2BSD

ДИАГНОСТИКА
Драйверы устройств ядра не позволят уменьшить размер раздела диска или изменить его смещение, если раздел используется системой.

СОВМЕСТИМОСТЬ
Поскольку для хранения количества секторов используется тип u_int32_t, BSD метки ограничены максимумом в 2^32-1 секторов. Обычно это означает 2 терабайта дискового пространства. Диски большего размера могут быть поделены на части, используя другие методы, например gpt(8). Разные операционные системы семейства BSD используют немного отличающиеся версии меток, которые в целом несовместимы друг с другом.

СМОТРИ ТАКЖЕ
ccd(4), geom(4), md(4), disktab(5), boot0cfg(8), fdisk(8), gpt(8),newfs(8)