Руководство FreeBSD
Пред. | Глава 18. GEOM: Модульная инфраструктура преобразования дисковых запросов | След.

# 18.6. Метки дисковых устройств

Перевод на русский язык Денис Пеплин.

Во время загрузки системы, ядро FreeBSD создает файлы для обнаруженных устройств. Этот метод обнаружения устройств создает некоторые проблемы, например если новое дисковое устройство подключается через USB. Может получиться так, что этому диску будет присвоено имя устройства `da0`, а устройство с прежним именем `da0` получит следующее имя, `da1`. Это приведет к проблемам монтирования файловых систем, записанных в `/etc/fstab`. На самом деле, это может даже помешать загрузке системы.

Одно из решений состоит в расположении SCSI устройств в таком порядке, чтобы новые устройства, добавляемые к SCSI контроллеру, занимали свободные номера устройств. Но что делать с USB устройствами, которые могут занять место основного SCSI диска? Это случается потому, что USB устройства обычно тестируются до SCSI контроллера. Решение может состоять в подключении этих устройств после загрузки системы. Другое решение - использование ATA диска и исключение SCSI устройств из `/etc/fstab`.

Есть и лучшее решение. С помощью утилиты `glabel`, администратор или пользователь могут пометить дисковые устройства и использовать эти метки в `/etc/fstab`. Поскольку `glabel` сохраняет метки в последнем секторе заданного устройства, они сохраняются и после перезагрузки. Используя эти метки вместо имени устройств, можно всегда смонтировать файловую систему независимо от назначенного имени устройства.

> Замечание: Очевидно, что метки должны быть постоянными. Утилита `glabel` может использоваться для создания как временных, так и постоянных меток. Только постоянные метки сохраняются после перезагрузок. Прочтите glabel(8) для получения более подробной информации о различии между метками.

## 18.6.1. Типы меток и примеры

Существует два типа меток, основной (generic) тип и метки файловой системы. Метки могут быть постоянными или временными. Постоянные метки создаются командой tunefs(8) или newfs(8). В дальнейшем они будут автоматически создаваться в подкаталоге каталога `/dev`, имя которого определяется в соответствии с типом файловой системы. Например, метки файловых систем UFS2 будут расположены в каталоге `/dev/ufs`. Постоянные метки также можно создать при помощи команды `glabel label`. Эти метки не зависят от типа файловой системы, поэтому они будут перечисляться в каталоге `/dev/label`.

Временные метки не сохраняются после перезагрузки. Эти метки создаются в каталоге `/dev/label`, они хорошо подходят для экспериментов. Временную метку можно создать командой `glabel create`. За более детальной информацией обратитесь к странице справочника glabel(8).

Чтобы создать постоянную метку для файловой системы UFS2 не нарушая самих данных, выполните следующую команду:

    # tunefs -L home /dev/da3

> Внимание: Если файловая система заполнена, это может привести к повреждению данных; в случае заполненной файловой системы надо или удалить ненужные файлы, или не добавлять метки.

Метка должна появиться в `/dev/ufs` и может быть добавлена в `/etc/fstab`:

    /dev/ufs/home      /home            ufs     rw              2      2

> Замечание: Во время запуска `tunefs` файловая система не должна быть смонтирована.

Теперь файловую систему можно смонтировать как обычно:

    # mount /home

Если модуль ядра `geom_label.ko` указан в `/boot/loader.conf` и загружается вместе с системой, или в ядре указана опция `GEOM_LABEL`, метку устройства можно изменять без какого-либо негативного для системы эффекта.

Файловая система может быть создана с меткой по умолчанию путем использования флага `-L` команды `newfs`. Обратитесь к странице справочника newfs(8) за более подробной информацией.

Для удаления метки можно использовать следующую команду:

    # glabel destroy home

В следующем примере показано, как устанавливаются метки на разделы загрузочного диска.

Пример 18-1. Установка меток на разделы загрузочного диска

Установка и задействование постоянных меток на разделах загрузочного диска предоставит возможность операционной системе загружаться нормально в том случае, если диск был переключен на другой контроллер, или даже переставлен на другую машину. В этом примере был задействован один диск ATA, определяемый системой как `ad0`. Также в примере подразумевается, что система использует типичную для FreeBSD схему разделения дискового пространства на слайсы и размещения на них файловых систем `/`, `/var`, `/usr`, `/tmp` и раздела подкачки.

Перезагрузите систему, дождитесь меню загрузчика. Нажатием клавиши 4 выберите однопользовательский режим. Далее, введите следующие команды:

    # glabel label rootfs /dev/ad0s1a
    GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
    # glabel label var /dev/ad0s1d
    GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
    # glabel label usr /dev/ad0s1f
    GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
    # glabel label tmp /dev/ad0s1e
    GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
    # glabel label swap /dev/ad0s1b
    GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
    # exit

Система продолжит загрузку в многопользовательский режим. По завершении загрузки откройте файл `/etc/fstab` и замените в нём традиционные имена файлов устройств на соответствующие устройствам метки. Результат будет выглядеть подобно следующему:

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/label/swap         none            swap    sw              0       0
    /dev/label/rootfs       /               ufs     rw              1       1
    /dev/label/tmp          /tmp            ufs     rw              2       2
    /dev/label/usr          /usr            ufs     rw              2       2
    /dev/label/var          /var            ufs     rw              2       2

Перезагрузите еще раз систему. Если всё прошло успешно, система загрузится как обычно, а вывод команды `mount` отобразит следующее:

    # mount
    /dev/label/rootfs on / (ufs, local)
    devfs on /dev (devfs, local)
    /dev/label/tmp on /tmp (ufs, local, soft-updates)
    /dev/label/usr on /usr (ufs, local, soft-updates)
    /dev/label/var on /var (ufs, local, soft-updates)

Начиная с FreeBSD 7.2, GEOM класс glabel(8) поддерживает новый тип меток для файловых систем UFS. Новый тип меток базируется на уникальных идентификаторах файловых систем, называемых `ufsid`. Во время загрузки системы они автоматически создаются и помещаются в каталог `/dev/ufsid`. Перечисление меток должным образом в файле `/etc/fstab` делает возможным монтирование разделов по значениям `ufsid`. Чтобы получить перечень файловых систем и соответствующих им меток `ufsid`, выполните команду `glabel status`:

    % glabel status
                      Name  Status  Components
    ufsid/486b6fc38d330916     N/A  ad4s1d
    ufsid/486b6fc16926168e     N/A  ad4s1f

В данном примере `ad4s1d` содержит файловую систему `/var`, а `ad4s1f` соответствует файловой системе `/usr`. Эти файловые системы можно также монтировать, указав значения их `ufsid` в файле `/etc/fstab`:

    /dev/ufsid/486b6fc38d330916        /var        ufs        rw        2      2
    /dev/ufsid/486b6fc16926168e        /usr        ufs        rw        2      2

Таким способом могут быть смонтированы любые разделы с метками `ufsid`, что исключает необходимость создания постоянных меток вручную и в то же время позволяет воспользоваться преимуществами монтирования по меткам.

Пред. | Начало | След.
Сетевые устройства GEOM Gate | Уровень выше | Журналирование UFS средствами GEOM

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.