Para uma máquina que tenha sistemas de arquivos totalmente espelhados usando vinum
, é desejável também espelhar o sistema de arquivos raiz. Efetuar esta configuração é menos trivial do que espelhar um sistema de arquivos arbitrário porque:
O sistema de arquivos raiz deve estar disponível muito cedo durante o processo de inicialização, portanto a infraestrutura vinum
já deve estar disponível no momento.
O volume que contém o sistema de arquivos raiz também contém a auto-inicialização do sistema e o kernel. Eles devem ser lidos usando os utilitários nativos do sistema, como o BIOS, que muitas vezes não pode ser instruído sobre os detalhes do vinum
.
Nas seções a seguir, o termo “volume raiz” é geralmente usado para descrever o volume vinum
que contém o sistema de arquivos raiz (/).
O vinum
deve estar disponível no início da inicialização do sistema pois o loader(8) deve ser capaz de carregar o módulo do kernel vinum antes de iniciar o kernel. Isto pode ser feito colocando esta linha no /boot/loader.conf
:
geom_vinum_load="YES"
O bootstrap atual do FreeBSD tem apenas 7.5 KB de código e não entende as estruturas internas do vinum
. Isso significa que não é possível analisar os dados de configuração vinum
ou descobrir os elementos de um volume de inicialização. Assim, algumas soluções alternativas são necessárias para fornecer ao código de inicialização a ilusão de que ele está trabalhando com uma partição padrão a
que contém o sistema de arquivos raiz.
Para que isso seja possível, os seguintes requisitos devem ser atendidos para o volume raiz:
O volume raiz não pode ser uma stripe ou RAID -5.
O volume raiz não deve conter mais de um subdisco concatenado por plex.
Observe que é desejável e possível usar vários plexes, cada um contendo uma réplica do sistema de arquivos raiz. O processo de bootstrap usará apenas uma réplica para localizar o bootstrap e todos os arquivos de inicialização, até que o kernel monte o sistema de arquivos raiz. Cada subdisco dentro desses plexes precisa da sua própria ilusão de partição a
, para que o respectivo dispositivo seja inicializável. Não é estritamente necessário que cada uma dessas falsas partições a
estejam localizadas no mesmo deslocamento dentro de seu dispositivo, em comparação com outros dispositivos contendo plexes do volume raiz. No entanto, é provavelmente uma boa ideia criar os volumes vinum
dessa forma para que os dispositivos espelhados resultantes sejam simétricos, para evitar confusão.
Para configurar essas partições a
para cada dispositivo contendo parte do volume raiz, é necessário o seguinte:
A localização, offset desde o início do dispositivo, e o tamanho do subdisco desse dispositivo que faz parte do volume raiz precisam ser examinados, usando o comando:
#
gvinum l -rv root
Os offsets (deslocamentos) e tamanhos do vinum
são medidos em bytes. Eles devem ser divididos por 512 para obter os números de blocos que serão usados pelo bsdlabel
.
Execute este comando para cada dispositivo que participa do volume raiz:
#
bsdlabel -e
devname
No comando acima devname
deve ser o nome do disco, como da0
para discos sem uma tabela de slices, ou o nome da slice, como ad0s1
.
Se já existir uma partição a
no dispositivo a partir de um sistema de arquivos raiz pré-vinum
, ela deve ser renomeada para outra coisa para que permaneça acessível (apenas nesse caso), mas ela não será mais usada por padrão para inicializar o sistema. Um sistema de arquivos raiz atualmente montado não pode ser renomeado, portanto, de forma que o processo ser executado quando o sistema for inicializado a partir de uma mídia “Fixit” ou em um processo de duas etapas em que, em um espelho, o disco que ainda não foi inicializado é manipulado primeiro.
O offset da partição vinum
neste dispositivo (se houver) deve ser adicionado ao deslocamento do respectivo subdisco de volume raiz neste dispositivo. O valor resultante se tornará o valor do offset
para a nova partição a
. O valor do size
para esta partição também pode ser obtido a partir do cálculo acima. O fstype
deve ser 4.2BSD
. Os valores de fsize
, bsize
e cpg
devem ser escolhidos para corresponder ao sistema de arquivos atual, embora eles sejam relativamente sem importância dentro deste contexto.
Desta forma, uma nova partição a
será estabelecida sobrepondo a partição vinum
neste dispositivo. O bsdlabel
só permitirá essa sobreposição se a partição vinum
tiver sido marcada corretamente usando o modo fstype do vinum
.
Temos agora uma falsa partição a
em cada dispositivo que possui uma réplica do volume raiz. É altamente recomendável verificar o resultado usando um comando como:
#
fsck -n /dev/
devname
a
Deve ser lembrado que todos os arquivos contendo informações de controle devem ser relativos ao sistema de arquivos raiz no volume vinum
e que, ao configurarmos um novo volume raiz vinum
, ele pode não corresponder o sistema de arquivos raiz que está atualmente ativo. Então, em particular, o /etc/fstab
e /boot/loader.conf
precisam ser ajustados.
Na próxima reinicialização, o bootstrap deve descobrir as informações de controle apropriadas do novo sistema de arquivos raiz baseado no vinum
e agir de acordo. No final do processo de inicialização do kernel, após todos os dispositivos terem sido anunciados, o aviso de destaque que mostra o sucesso desta configuração é uma mensagem como:
Mounting root from ufs:/dev/gvinum/root
Depois que o volume raiz vinum
foi configurado, a saída de gvinum l -rv root
pode parecer com:
... Subdisk root.p0.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p0 at offset 0 (0 B) Drive disk0 (/dev/da0h) at offset 135680 (132 kB) Subdisk root.p1.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p1 at offset 0 (0 B) Drive disk1 (/dev/da1h) at offset 135680 (132 kB)
Os valores a serem observados são 135680
para o offset, relativo à partição /dev/da0h
. Isso se traduz em 265 blocos de discos de 512 bytes nos termos do bsdlabel
. Da mesma forma, o tamanho desse volume raiz é de 245760 blocos de 512 bytes. O /dev/da1h
, contém a segunda réplica deste volume raiz, e possui uma configuração simétrica.
O bsdlabel para esses dispositivos pode se parecer com:
... 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*) c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*) h: 71771672 16 vinum # (Cyl. 0*- 4467*)
Pode-se observar que o parâmetro size
para a falsa partição a
corresponde ao valor descrito acima, enquanto o parâmetro offset
é a soma do deslocamento dentro da partição vinum
h
, e o offset desta partição dentro do dispositivo ou slice. Esta é uma configuração típica que é necessária para evitar o problema descrito em Seção 8.4.3, “Nada carrega e o Bootstrap entra em panic”. A partição a
inteira está completamente dentro da partição h
que contém todos os dados vinum
para este dispositivo.
No exemplo acima, todo o dispositivo é dedicado ao vinum
e não há sobra de partição raiz pré-vinum
.
A lista a seguir contém algumas armadilhas e soluções conhecidas.
Se por algum motivo o sistema não continuar a inicialização, o bootstrap pode ser interrompido pressionando espaço no aviso de 10 segundos. A variável vinum.autostart
do loader pode ser examinada digitando show
e manipulada usando set
ou unset
.
Se o módulo do kernel vinum
ainda não estava na lista de módulos para carregar automaticamente, digite load geom_vinum
.
Quando estiver pronto, o processo de inicialização pode ser continuado digitando-se boot -as
, no qual -as
solicita ao kernel que peça ao sistema de arquivos raiz para montar (-a
) e fazer com que o processo de inicialização pare no modo single user(-s
), em que o sistema de arquivos raiz é montado como somente leitura. Dessa forma, mesmo que apenas um plex de um volume multi-plex tenha sido montado, não estaremos arriscando nenhuma inconsistência de dados entre os plexes.
No prompt solicitando que um sistema de arquivos raiz seja montado, qualquer dispositivo que contenha um sistema de arquivos raiz válido pode ser inserido. Se o /etc/fstab
estiver configurado corretamente, o padrão deve ser algo como ufs:/dev/gvinum/root
. Uma opção alternativa típica seria algo como ufs:da0d
, que poderia ser uma partição hipotética contendo o sistema de arquivos raiz pré-vinum
. Deve-se tomar cuidado se uma das partições alias a
for inserida aqui, para verificar se ela realmente faz referência aos subdiscos do dispositivo raiz vinum
, porque em uma configuração espelhada, isso apenas montaria uma parte de um dispositivo raiz espelhado. Se este sistema de arquivos tiver que ser montado no modo read-write mais tarde, será necessário remover o(s) outro(s) plex(es) do volume raiz vinum
, já que esses plexes carregariam dados inconsistentes.
Se o /boot/loader
falhar ao carregar, mas o bootstrap primário ainda carregar (visível por um único traço na coluna esquerda da tela logo após o processo de boot ser iniciado), uma tentativa pode ser feita para interromper o bootstrap primário pressionando espaço. Isso fará com que o bootstrap pare no estágio dois. Uma tentativa pode ser feita aqui para inicializar uma partição alternativa, como a partição que contém o sistema de arquivos raiz anterior que foi movido de a
.
Esta situação acontecerá se o bootstrap tiver sido destruído pela instalação do vinum
. Infelizmente, o vinum
acidentalmente deixa apenas 4 KB no início de sua partição livre antes de começar a escrever suas informações de cabeçalho vinum
. No entanto, o estágio um e dois bootstraps mais o bsdlabel exigem 8 KB. Portanto, se uma partição vinum
tiver sido iniciada no offset 0 dentro de uma slice ou disco que deveria ser inicializável, a configuração do vinum
irá estragar o bootstrap.
Da mesma forma, se a situação acima foi recuperada, inicializando de uma mídia “Fixit”, e o bootstrap foi reinstalado usando bsdlabel -B
como descrito em ../../../../doc/en_US.ISO8859-1/books/handbook/boot.html#boot-boot1, o bootstrap irá estragar o cabeçalho vinum
e o vinum
não encontrará mais seu(s) disco(s). Entretando nenhum dado de configuração real do vinum
e nenhum volume vinum
de dados foi descartado, sendo possível recuperá-los digitando de novo exatamente as mesmas configurações do vinum
, a situação é difícil de corrigir de forma definitiva. Pois será necessário mover toda a partição vinum
em pelo menos 4 KB, para que o cabeçalho vinum
e o bootstrap do sistema não colidam mais.
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>.