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)