18.7. Rotulando Dispositivos de Disco

Durante a inicialização do sistema, o kernel do FreeBSD cria nós de dispositivos conforme os dispositivos são encontrados. Esse método de detectar dispositivos gera alguns problemas. Por exemplo, e se um novo dispositivo de disco for adicionado via USB? É provável que um dispositivo flash receba o nome do dispositivo da0 e o da0 original alterado para da1. Isso causará problemas ao montar sistemas de arquivos se eles estiverem listados no /etc/fstab, o que também pode impedir que o sistema seja inicializado.

Uma solução é encadear os dispositivos SCSI para que um novo dispositivo adicionado à placa SCSI receba números de dispositivo não utilizados. Mas e os dispositivos USB que podem substituir o disco principal SCSI? Isso acontece porque os dispositivos USB geralmente são examinados antes da placa SCSI. Uma solução é inserir esses dispositivos apenas após o sistema ter sido inicializado. Outro método é usar apenas uma única unidade ATA e nunca listar os dispositivos SCSI no arquivo /etc/fstab.

Uma solução melhor é usar o glabel para rotular os dispositivos de disco e usar os rótulos no arquivo /etc/fstab. Como o glabel armazena o rótulo no último setor de um determinado provedor, o rótulo permanecerá persistente nas reinicializações. Ao usar esse rótulo como um dispositivo, o sistema de arquivos pode sempre ser montado independentemente do nó do dispositivo pelo qual ele é acessado.

Nota:

O glabel pode criar rótulos transitórios e permanentes. Somente rótulos permanentes são consistentes nas reinicializações. Consulte glabel(8) para obter mais informações sobre as diferenças entre os rótulos.

18.7.1. Tipos de Rótulos e Exemplos

Os rótulos permanentes podem ser um rótulo genérico ou de um sistema de arquivos. Rótulos de sistema de arquivos permanentes podem ser criados com tunefs(8) ou newfs(8). Esses tipos de rótulos são criados em um subdiretório /dev e serão nomeados de acordo com o tipo de sistema de arquivos. Por exemplo, os rótulos do sistema de arquivos UFS2 serão criados em /dev/ufs. Rótulos permanentes genéricos podem ser criados com o glabel label. Estes não são específicos do sistema de arquivos e serão criados em /dev/label.

Os rótulos temporários são destruídos na próxima reinicialização. Esses rótulos são criados em /dev/label e são adequados para experimentação. Um rótulo temporário pode ser criado usando glabel create.

Para criar um rótulo permanente para um sistema de arquivos UFS2 sem destruir nenhum dado, emita o seguinte comando:

# tunefs -L home /dev/da3

Um rótulo deve agora existir em /dev/ufs que pode ser adicionado ao arquivo /etc/fstab:

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

Nota:

O sistema de arquivos não deve ser montado durante a tentativa de executar o tunefs.

Agora o sistema de arquivos pode ser montado:

# mount /home

A partir deste ponto, desde que o módulo do kernel geom_label.ko seja carregado na inicialização com o /boot/loader.conf ou com a opção do kernel GEOM_LABEL estando presente, o nó do dispositivo pode mudar sem qualquer efeito negativo no sistema.

Os sistemas de arquivos também podem ser criados com um rótulo padrão usando a flag -L com o comando newfs. Consulte newfs(8) para obter maiores informações.

O seguinte comando pode ser usado para destruir o rótulo:

# glabel destroy home

O exemplo a seguir mostra como rotular as partições de um disco de inicialização.

Exemplo 18.1. Rotulando Partições no Disco de Inicialização

Ao marcar permanentemente as partições no disco de inicialização, o sistema deve poder continuar a inicializar normalmente, mesmo se o disco for movido para outro controlador ou transferido para um sistema diferente. Para este exemplo, presume-se que um único disco ATA é usado, que é atualmente reconhecido pelo sistema como ad0. Também é assumido que o esquema de partição padrão do FreeBSD é usado, com /, /var , /usr e /tmp, bem como uma partição de swap.

Reinicialize o sistema e, no prompt do loader(8), pressione 4 para inicializar no modo de usuário único. Em seguida, insira os seguintes comandos:

# 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

O sistema continuará com a inicialização multiusuário. Depois que a inicialização terminar, edite o arquivo /etc/fstab e substitua os nomes de dispositivos convencionais por seus respectivos rótulos. No final o /etc/fstab ficará assim:

# 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

O sistema agora pode ser reinicializado. Se tudo correr bem, ele aparecerá normalmente e o comando mount mostrará:

# 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)

A classe glabel(8) suporta um tipo de rótulo para sistemas de arquivos UFS, com base no ID do sistema de arquivos exclusivo ufsid. Esses rótulos podem ser encontrados em /dev/ufsid e são criados automaticamente durante a inicialização do sistema. É possível usar rótulos ufsid para montar partições usando o /etc/fstab. Use o glabel status para receber uma lista de sistemas de arquivos e seus rótulos ufsid correspondentes:

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

No exemplo acima, ad4s1d representa /var, enquanto ad4s1f representa /usr. Usando os valores ufsid mostrados, essas partições podem agora ser montadas com as seguintes entradas em /etc/fstab:

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

Quaisquer partições com rótulos ufsid podem ser montadas dessa forma, eliminando a necessidade de criar manualmente rótulos permanentes, enquanto ainda desfruta dos benefícios da montagem independente do nome do dispositivo.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.