Vinum mantém uma base de dados de configuração onde descreve os objetos conhecidos por um sistema individual. Inicialmente, o usuário cria o banco de dados de configuração a partir de um ou mais arquivos de configuração com a ajuda do utilitário vinum(8). Vinum guarda uma cópia das configurações de seu banco de dados em cada slice de disco (a qual Vinum chama de dispositivo) sobre seu controle. Essa base de dados é atualizada em cada mudança de estado, então, precisamente recupera o estado de cada objeto do Vinum.
O arquivo de configuração descreve os objetos individuais do Vinum. A definção de um simples volume poderia ser:
drive a device /dev/da3h volume myvol plex org concat sd length 512m drive a
Esse arquivo descreve quatro objetos do Vinum:
A linha drive descreve uma partição de disco (drive) e sua localidade relativa ao hardware subjacente. É dado um nome simbólico a. Essa separação entre nomes simbólicos e nomes de dispositivos permite que os discos sejam movidos de um lado a outro sem confusão.
A linha volume descreve um volume. O único atributo requerido é o nome, nesse caso myvol.
A linha plex define um plex. O único parâmetro requerido é a organização, nesse caso concat. Nenhum nome é necessário: o sistema irá automaticamente gerar um nome a partir do volume adicionando o sufixo .px, onde x é o número de plexes no volume. Então, esse plex terá o nome myvol.p0.
A linha sd descreve um subdisco. As especificações mínimas são o nome do disco no qual será armazenado, e o tamanho do subdisco. Como nos plexes, nenhum nome é necessário: o sistema delega automaticamente nomes provenientes dos plexes adicionando o sufixo .sx, onde x é o número de subdiscos do plex. Então Vinum delega a esse subdisco o nome de myvol.p0.s0.
Depois de processar esse arquivo, vinum(8) gera a seguinte saida:
# vinum -> create config1 Configuration summary Drives: 1 (4 configured) Volumes: 1 (4 configured) Plexes: 1 (8 configured) Subdisks: 1 (16 configured) D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
Essa saída mostra um pequeno formato de listagem do vinum(8). É representado graficamente na Figura 13-4.
Essa figura, e as outras que seguem, representam um volume, que contém plexes, e estes, por sua vez possuem subdiscos. Nesse exemplo trivial, o volume contém um plex, e o plex contém um subdisco.
Esse volume em particular não tem nenhuma vantagem específica sobre uma partição de um disco convencional. Contém um único plex, então, não é redundante. O plex contém um único subdisco, então a alocação de dados não se difere de uma partição de disco convencional. As sessões seguintes exemplificam diversos métodos de configuração mais interessantes.
A confiança em um volume pode ser aumentada com espelhamento. Quando planejando um espelhamento de volume, é importante se assegurar que o subdisco de cada plex esta em partições diferentes, para que uma falha de disco não derrube os dois plexes. A seguinte configuração espelha um volume:
drive b device /dev/da4h volume mirror plex org concat sd length 512m drive a plex org concat sd length 512m drive b
Nesse exemplo, não foi necessário especificar uma definição de uma partição a novamente, a partir do momento que o vinum armazena todos os objetos em sua base de dados de configuração. Depois de processar essa definição, a configuração se parece com:
Drives: 2 (4 configured) Volumes: 2 (4 configured) Plexes: 3 (8 configured) Subdisks: 3 (16 configured) D a State: up Device /dev/da3h Avail: 1549/2573 MB (60%) D b State: up Device /dev/da4h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB
Figura 13-5 mostra a estrutura graficamente.
Nesse esemplo, cada plex contém os 512 MB de espaço de endereço. E como no exemplo anterior, cada plex contém um único subdisco.
O espelhamento do volume no exemplo anterior é mais resistente a falhas do que o volume não espelhado, mas sua performance é menor: cada escrita no volume requer a escrita em dois discos, usando assim mais largura de banda de disco. Quando se quer considerar a peformance é indicado uma abordagem diferente: ao invés de espelhar, os dados são segmentados dentre o maior numero de partições possível. A configuração seguinte mostra um volume com um plex striped entre quatro partições:
drive c device /dev/da5h drive d device /dev/da6h volume stripe plex org striped 512k sd length 128m drive a sd length 128m drive b sd length 128m drive c sd length 128m drive d
Como antes, não é necessário definir as partições que já são conhecidas pelo vinum. Depois de processar essa definição, a configuração se parece com:
Drives: 4 (4 configured) Volumes: 3 (4 configured) Plexes: 4 (8 configured) Subdisks: 7 (16 configured) D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%) D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%) D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%) D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB V striped State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB P striped.p1 State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB S striped.p0.s0 State: up PO: 0 B Size: 128 MB S striped.p0.s1 State: up PO: 512 kB Size: 128 MB S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB
Esse volume é representado em Figura 13-6. O sombreado dos stripes indica a porção junto ao espaço endereçado do plex: os stripes mais claros vem primeiro, os mais escuros por último.
Com o hardware necessário, é possível construir volumes que apresentam tanto acréscimo de performance quanto de estabilidade quando comparados às partições UNIX® comuns. Um arquivo de configuração típico pode ser:
volume raid10 plex org striped 512k sd length 102480k drive a sd length 102480k drive b sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e plex org striped 512k sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e sd length 102480k drive a sd length 102480k drive b
Os subdiscos do segundo plex estão deslocados por dois discos em relação ao primeiro plex: isso ajuda a garantir que não acontecerá escrita no mesmo subdisco, mesmo que a transferência aconteça sobre dois discos.
Figura 13-7 representa a estrutura desse volume.
Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.