FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Geom - Brincando com discos no FreeBSD.
 
08.07  
Inicio arrow Artigos arrow Geom - Brincando com discos no FreeBSD.
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histrico da Lista
Forum
Keyserver
PC-BSD: Artigos
PC-BSD: Notcias
Galeria de Imagens
Contador Usurios FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS / Twitter
-
DOC-BR (FUG BR)
Introduo
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usurio

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


Geom - Brincando com discos no FreeBSD. PDF Imprimir E-mail
Por Daniel Bristot de Oliveira   
24/07/2006

ImageO que é o Geom? O geom(4) é um framework que atua entre o kernel e os discos, e manipula a entrada e saída de dados no disco. Ele está neste nível, pois atua como uma interface de gerenciamento de dados nos discos para o kernel, assim o geom(4) pode fazer modificações no método em que os dados são gravados no disco, de forma transparente para o resto do sistema.
Leia na integra o que o geom(4) pode fazer por você.

Geom

O contexto de transformações do GEOM abrange desde a geometria de discos, RAID e até proteção de dados com criptografia. Tudo isso de forma transparente para usuários e aplicativos do sistema.

Neste artigo abordaremos algumas funções que o GEOM oferece para nós. Como:

Criptografar discos com alguns dos mais poderosos algoritmos de criptografia, como AES, Blowfish e 3DES. Veja geli(8)
Concatenar discos, isto é, unir discos relativamente pequenos para formar um grande disco. Veja gconcat(8)
Compartilhamento de dois ou mais discos, distribuindo dados em paralelo, RAID0,com o propósito de alto desempenho. Veja gstrip(8)
Espelhamento de disco, RAID 1, fazendo redundância de dados em dois ou mais discos. Veja gmirror(8)
Distribuição com bit de paridade, RAID 3, junção das propriedades do RAID 0 com o RAID 1. veja graid3(8)
Compartilhamento com segredo, O segredo é compartilhado entre os dispositivos e só pode ser desvendado com todos os dispositivos, se um estiver faltando os discos ficarão inacessíveis. Veja gshsec(8)
Compartilhamendo de dispositivos via rede com ggatec(8) e ggated(8) 

O geom(4) foi desenvolvido utilizando alguns conceitos de orientação a objetos, por isso, alguns termos utilizados são provenientes da OO. Com por exemplo, os Fornecedores (Providers) são os dispositivos criados pelos geom, já os Consumidores (Consumers) são os discos e unidades físicas

Geli Criptografando discos

O geli(8) é responsável pelo criptografia em discos, ele é muito útil para manter segurança em dados confidenciais; sabe aqueles disquetes de filmes de Hollywood!, eles provavelmente utilizavam geli(8) para fazer a criptografia nos dispositivos para ninguém acessar, brincadeira. Muitas pessoas o utilizam para criptografar os seus diretórios pessoais, assim, somente sabendo a chave secreta ou tendo o arquivo chave poderá acessar seus arquivos, outro lugar bom para se utiliza-lo é nos Pendrives, nos exemplos eu utilizarei o meu Pendrive com exemplo.

O sistema Operacional

Para utilizar o geli(8) precisamos adicionar as duas linhas abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

   device crypto
options GEOM_ELI

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

   geom_eli_load="YES"

Características

Algumas características do geli(8).

Suporte de há vários métodos de criptografia, como AES, Blowfish e 3DES.
Cria as chaves com uma junção de componentes, como frase secreta, bits do arquivo...
Criptografia da partição root, no momento da montagem da partição root a frase secreta é pedida.
É rápida
A configuração do dispositivo é feita automaticamente.
Utilização de senhas de uso único

Utilizando o geli(8)

O primeiro argumento é a ação a ser tomada. Os argumentos mais utilizados são:

init

Para iniciar a criptografia em um dispositivo. É nele que você configura as opções como algoritmo de criptografia utilizado, tamanho da chave, após o init várias opções são aceitas, veja elas abaixo:

-a Algoritmo - Algoritmo utilizado para criptografar o dispositivo, as possíveis opções são: AES, Blowfish e 3DES.
-b - Pergunta a frase secreta no boot, útil na utilização no sistema de arquivos raiz. Uma questão importante, o diretório /boot deve estar em um dispositivo sem criptografia.
-i Iterações - Número de iterações para usar com PKCS#5v2. Caso nenhum valor seja especificado, o valor padrão é de dois segundos de trabalho de criptografia, se zero for especificado, o PKCS#5v2 não vai ser utilizado.
-K newkeyfile - Com esta opção pode ser utilizado um arquivo como senha. Neste caso será pedido a senha e o arquivo, para utilizar somente o arquivo utilize também a opção -P, ela serve para não pedir a senha.
-l keylen - Tamanho da chave utilizada pelo algoritmo de criptografia, os valores padrões são: 128 para AES e Blowfish e 192 para 3DES.
-s sectorsize - Tamanho do setor criptografado, quanto maior o setor menos trabalho.

Ex: Criando criptografia para o dispositivo /dev/da0s1

# geli init /dev/da0s1
Enter new passphrase:
Reenter new passphrase:

Criando criptografia para o dispositivo /dev/da0s1, utilizando blowfish e o arquivo 'bla' como chave e sem frese secreta.

# geli init -a Blowfish -P -K bla /dev/da0s1
#

Attach

O argumento attach serve para "ligar" o dispositivo já criptografado, ele pede a chave secreta para decriptografar a unidade, e após o comando a unidade decriptografada é acessada pelo dispositivo /dev/Dispositivo.edi, por exemplo /dev/da0s1 será acessado pelo /dev/da0s1.eli. Algumas flags são aceitas, veja elas abaixo.

-d Se esta opção for especificada o dispositivo será fechado após a ultima escrita nele, no caso quando ele for desmontado, o dispositivo /dev/da0s1.eli desaparecerá.
-k Especifica o arquivo de senha que foi utilizado na criação do dispositivo
-p Não pede a frase secreta

Exemplos Ligar o dispositivo do primeiro exemplo:

# geli init /dev/da0s1
Enter passphrase:

Ligar o dispositivo do segundo exemplo para ser destruído após ser desmontado

# geli attach -k bla -p -d /dev/da0s1
#

Após a primeira vez que você ligou o dispositivo, formate-o com newfs, como no exemplo abaixo.

# newfs /dev/da0s1.eli

Agora você pode montar o dispositivo normalmente, como no exemplo abaixo:

# mount /dev/da0s1.eli /mnt

detach

O Argumento detach serve para “desligar” o acesso ao dispositivo, é como se o computador esquecesse a chave que é utilizada para decriptografar o dispositivo. ele possui somente duas opções:

-f Força a retirada do dispositivo.
-l Ele não retira o dispositivo enquanto o dispositivo estiver aberto.

Ex:

Retirando o dispositivo criado anteriormente.

# geli detach /dev/da0s1
#

onetime

Este argumento serve para criar dispositivos com chave de uso único, este argumento é utilizado para criptografar dispositivos temporários como Swap. ele aceita os argumento -a, -d,-l e -s que já foram descritos acima.

setkey

Cria ou ajusta uma chave. O geli(8) utiliza uma chave Mestre que pode ser criptografada com duas chaves secretas, com o parâmetro init, somente a chave 0 é criada. A chave pode ser trocada a qualquer momento, em um dispositivo ou um backup, mas somente se o dispositivo estiver ligado a chave não vai ser pedida. O argumento -i tem o mesmo sentido da seção init. Os outros argumentos utilizáveis são:

-k keyfile A chave secreta antiga
-K newkeyfile A nova chave secreta
-n keyno O número da chave, como disse antes um dispositivo pode ter duas chaves, a chave do init é a chave 0, se você quer criar uma nova chave utilize o keyno igual a 1,
-p Não utiliza a chave antiga
-P Não utiliza uma nova chave

Ex: Alterando a senha do exemplo anterior, retirando o arquivo de senha e adicionando uma frase secreta.

# geli setkey -k bla -p /dev/da0s1
Enter new passphrase:
Reenter new passphrase:

delkey

O parâmetro delkey destrói (sobrescreve com uma chave randômica) a frase selecionada. O dispositivo não será desligado se as chaves forem destruídas, e pode ser recuperado com o setkey.

Algumas flags.
-a Destrói todas as chaves,
-f Força destruir todas as chaves.
-n número da chave a ser destruída.

kill

Este comando apaga todas as chaves e desliga o dispositivo. Este comando é de mão única, e uma vez feito não pode ser desfeito. Ele possui somente uma flag, a -a que força o kill para todos os dispositivos ligados.

backup

Cria um backup dos meta dados do dispositivo em um arquivo

restore

Restaura o backup de um arquivo para um dispositivo

clear

Limpa o meta dado de um dispositivo

dump

Cria uma imagem do meta dado de um dispositivo.

Veja mais exemplos no man 8 do geli

gstripe RAID 0 com GEOM

O gstripe(8) é utilizado para fazer RAID 0 entre dois ou mais disco. O RAID 0 conhecido como, Striping, é um método utilizado para combinar alguns discos em um único grande volume. Na grande maioria das vezes isto é feito através de uma controladora, porém o gstripe(8) dá via software o suporte ao RAID 0.

A gravação é feita como se todos os discos que formam o array fossem somente um, por exemplo, em uma gravação, os dados serão distribuídos por todos os disco do RAID, se um arquivo de 265k for gravado em um RAID 0 de 4 discos, o dado será dividido em quatro partes de 64k que serão gravadas uma em cada disco. Assim aumentando a velocidade de I/O e o tamanho de uma unidade, como na imagem abaixo:

striping.jpg

Existem dois modos de se fazer a configuração, de modo manual ou automático; de modo manual os meta dados não são armazenados nos discos, assim os discos precisam ser configurados manualmente todas as vezes que forem utilizados, como o nome diz no modo automático, os meta dados são gravados em disco, e os dispositivos são reconhecidos automaticamente.

O sistema Operacional

Para utilizar o gstripe(8) precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

    options GEOM_STRIPE

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

   geom_stripe_load="YES"

Utilizando o gstripe

O primeiro argumento do gstripe(8) diz a ação que ele deve tomar. Vamos ver eles abaixo

create

Esta opção tem a sintaxe mínima "gstripe create name disco disco" onde nome é o nome do novo dispositivo que será armazenado em /dev/stripe/name e discos são os dispositivos de armazenamento que serão utilizados. Este é o modo manual de criar uma configuração, isto é, cada vez que você deseja criar o dispositivo, você terá que executar o gstripe(8). Se o módulo geom_stripe.ko não estiver sido carregado, ele será carregado. Esta opção aceita algumas flags que veremos abaixo:

-s stripesize Especifica o tamanho do bloco em que as informações serão divididas, o número deve ser um múltiplo do maior setor de todos os discos.

Vamos ver um exemplo abaixo, para criarmos o diretório /home. Vamos criar o dispositivo, criar o sistema de arquivos e montar.

# gstripe create gs /dev/ad0s1e /dev/ad3s1c 
# newfs /dev/stripe/gs
# mount /dev/stripe/gs /home

NOTA: Os discos ou partições devem ter o mesmo tamanho!

label

Esta é a maneira automática de criar um dispositivo. A sintaxe é a mesma do create, somente alterando o create para o label. Neste caso, a flag -s também é aceita. Deste modo, depois que o dispositivo é criado, as informações serão reconhecidas automaticamente pelo sistema, assim é possível adicionar uma entrada no fstab com o dispositivo criado, neste caso o /dev/stripe/gs. gstripe no kernel.

# gstripe label gs /dev/ad0s1e /dev/ad3s1c 
# newfs /dev/stripe/gs
# mount /dev/stripe/gs /home

Para adicionar uma entrada para este dispositivo no fstab, para montar em /home, adicione a seguinte linha no /etc/fstab:

echo  /dev/stripe/gs    /home  ufs   rw  2  2 >> /etc/fstab

stop

Desliga um dispositivo, esta opção deve ser seguida pelo nome do dispositivo a desligar, e este comando não mexe nos meta dados do array.

# umount /home
# gstripe stop gs

clear

Limpa os meta dados das partições que formam o array.

# gstripe clear /dev/ad0s1e 

dump

Cria um backup dos meta-dados do array.

# gstripe clear /dev/ad0s1e 

Gmirror RAID 1 com GEOM

RAID 1 ou Mirroring (Espelhamento) é uma técnica utilizada para fazer redundância de discos, isto é, manter dois discos iguais, assim se um vier a falhar o outro estará pronto para assumir o seu lugar. Na prática, por exemplo, seria ter dois HDs A e B, iguais, sendo que só utilizaremos o espaço de um, no caso o de A, quando utilizamos o RAID1 tudo o que é gravado no disco A será também gravado no disco B, assim se o A parar o B assume seu lugar, como se nada tivesse acontecido.

O gmirror(8) permite fazer espelhamento tanto de um disco inteiro quando de uma partição ou slice.

Depois que as unidades forem espelhadas, todos os componentes são detectados e configurados automaticamente, a sincronização de dados também. Para isto os meta-dados(informações sobre o espelhamento) sempre serão armazenados em disco.

O Sistema Operacional

Para utilizar o gmirror(8) precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

    options GEOM_MIRROR

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

   geom_mirror_load="YES

Utilizando o Gmirror

O primeiro argumento do gmirror(8) diz a ação que ele deve tomar. Vamos ver eles abaixo

label

Cria um espelhamento, e tem a sintaxe "gmirror label [-hnv] [-b Algoritimo] [-s slice] nome dispositivo ...", pode-se colocar um ou mais dispositivos. A ordem em que os nomes dos dispositivos é importante, pois, a prioridade dos componentes é baseada nesta ordem. Quando um dispositivo é criado, ele ficará acessível no diretório /dev/mirror/nome. Vamos ver abaixo as flags disponíveis para este comando.

-b algoritmo Especifica o algoritmo de balanceamento, sendo um dos algoritmos abaixo:
load Executa operações de leitura do componente com menor carga
prefer Executa operações de leitura do componente com maior prioridade.
round-robin Utiliza um algoritmo circular para escolher de onde ler.
split Divide as requisições entre os discos, este é o padrão.
-n Desativa a auto sincronização de componentes "envelhecidos"
-s Tamanho Quando utilizando o algoritmo de balanceamento split, e uma requisição de leitura for maior ou igual ao "Tamanho" especificado aqui, a leitura no disco será dividida em parte do tamanho de "Tamanho" e cada parte será lida de um disco diferente.

Vejamos abaixo um exemplo, baseado em um artigo de Dru Lavigne, iremos fazer o espelhamento em dois discos, na instalação do FreeBSD. O Artigo original pode ser acessado neste Link.

Iremos utilizar dois discos iguais, localizados em /dev/ad0 e /dev/ad2, como podemos ver, os dois são mestres, um do ata0 e outro do ata1. Iremos instalar o FreeBSD no disco ad0. A configuração será feita durante a instalação do sistema. Após instalar e configurar o sistema, não reinicie, vá para um terminal que foi aberto com Alt+F4. Quando eu entro neste terminal, normalmente eu executo o tcsh, mas vamos ao que interessa, vamos criar o mirror com o algoritmo round-robin e nomeá-lo como gm0. OBS: O primeiro comando é só um ajuste para possibilitar a criação do mirror, o comando que realmente cria o mirror é o segundo.

# sysctl kern.geom.debugflags=16
# gmirror label -v -b round-robin gm0 /dev/ad0

Para tudo funcionar, devemos habilitar o suporte ao gmirror no kernel, aqui optaremos por carregar o módulo durante a inicialização, mais tarde, se você preferir, pode compila-lo estaticamente no kernel. Para isto execute o seguinte comando:

# echo geom_mirror_load="YES" > /boot/loader.conf

Agora o dispositivo será reconhecido durante a inicialização do sistema automaticamente. Agora vamos ajustar nosso fstab para utilizar o dispositivo. Os nossos discos e partições agora devem se acessados dentro do diretório /dev/mirror/, em nosso caso, /dev/mirrot/gm0[...]. Edite o seu /etc/fstab substituindo o /dev/ad0.. por /dev/mirror/gm0..., por exemplo:

O arquivo antigo:

/dev/ad0s2b             none            swap    sw              0       0
/dev/ad0s3a / ufs rw 1 1

Ficará

/dev/mirror/gs0s2b             none            swap    sw              0       0
/dev/mirror/gs0s3a / ufs rw 1 1

Pronto, agora volte para o sysinstall apertando em Alt+F1, e reinicie o computador. (Calma não terminamos ainda, mas antes de terminarmos devemos ver mais algumas opções.)

insert

Esta opção tem a sintax gmirror insert [-hiv] [-p priority] name prov ... e serve para adicionar mais um disco ao espelhamento. Depois de inserido o novo disco no RAID ele é sincronizado com os outros disco. As possíveis flags são:

-h Grava o de forma fixa o nome do provider nos meta dados
-i Marca o componente inativo após a sincronização
-p priority Especifica a prioridade do novo componente

Agora iremos continuar o nosso exemplo, Após reiniciar o computador, durante a inicialização, antes da checagem de disco, as seguintes linha provavelmente apareceram na sua tela.

GEOM_MIRROR: Device gm0 created (id=2125638583).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
GEOM_MIRROR: Device gm0 already configured.
Mounting root from ufs:/dev/mirror/gm0s1a

Isto nos mostra que o dispositivo foi reconhecido. Se estas mensagens apareceram e o sistema iniciou, vamos continuar nosso exemplo e criarmos efetivamente o nosso RAID 1. Para isto abra um terminal como root e execute o seguinte comando:

# gmirror insert gm0 /dev/ad2
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: rebuilding provider ad2.

Agora sim, temos o RAID, o comando acima inseriu o dispositivo /dev/ad2 no RAID e a partir de agora os dados entre os dois discos serão sincronizados e eles começarão trabalhar em conjunto. Para ver como está a sincronização execute:

# gmirror list

Este comando trará a saída de status dos discos.

clear

Esta opção tem a sintax gmirror clear dispositivo, limpa os meta dados do dispositivo, assim todas as informações "sobre" o mirror são apagadas de um disco, por exemplo.

# gmirror clear /dev/ad0

Irá limpar as informações do mirror do dispositivo /dev/ad0

configure

Esta opção tem a sintax gmirror configure [-adhnv] [-b balance] [-s slice] name e tem como configurar ou reconfigurar um dispositivo. Por exemplo troca o algoritmo de balanceamento. Veremos abaixo algumas das possíveis flags.

-a Liga a auto sincronização dos discos com dados "envelhecidos", por exemplo se um disco "cair" e voltar ele será sincronizado automaticamente.
-b Altera o algoritmo de balanceamento.
-d Não grava o de forma fixa o nome do provider nos meta dados
-h Grava o de forma fixa o nome do provider nos meta dados
-n Desliga a auto sincronização dos discos com dados "envelhecidos", por exemplo se um disco "cair" e voltar ele será sincronizado automaticamente.
-s slice Especifica o tamanho do bloco que as informações serão divididas no algoritmo de balanceamento split.

Esta função pode ser utilizada com o nosso exemplo acima. No exemplo o algoritmo utilizado foi o round-robin, com o configure poderemos altera-lo para o split, como no exemplo abaixo.

# gmirror configure -b split gm0

rebuild

Esta opção tem a sintax gmirror rebuild [-v] name prov ... E serve para recarregar o espelhamento, ele só tem motivo para ser utilizado, se a sincronização de algum dispositivo foi desligada.

Vamos ver o exemplo, se o disco /dev/ad2 foi desconectado do RAID por algum motivo, e ele voltar depois, o comando rebuild irá fazer a sincronização dos dados, como no exemplo abaixo.

# gmirror rebuild gm0 /dev/ad2

remove

Esta opção tem a sintax gmirror remove [-v] nome disco ...e serve para remover um componente do mirror e limpar seus meta dados. Como exemplo, iremos retirar o disco /dev/ad2 do nosso RAID

# gmirror remove gm0 ad2 

deactivate

Esta opção tem a sintaxe gmirror deactivate [-v] name prov ... e serve para desativar um componente, assim, ele não será automaticamente reconhecido quando ligado ao sistema.

Como exemplo, vamos desativar o dispositivo /dev/ad2 do nosso exemplo:

# gmirror deactivate gm0 ad2

activate

Esta opção tem a sintaxe gmirror activate [-v] nome disco ... e serve para ativar um componente que foi desativado anteriormente.

Como exemplo, vamos reativar o dispositivo /dev/ad2 do nosso exemplo:

# gmirror activate gm0 ad2

A partir deste momento os dados dos dois discos serão sincronizados.

forget

Esta opção tem a sintaxe gmirror forget nome e serve para esquecer os componentes que não estão conectados. Por exemplo, se desconectarmos o ad2 poderemos utilizar o forget. Como no exemplo abaixo:

# gmirror deactivate gm0 ad2
# gmirror forget gm0
# gmirror activar gm0 ad2
GEOM_MIRROR: Cannot add disk ad3 to gm0

Como podemos ver o dispositivo ad2 não pode mais ser ligado ao gm0, para ele ser inserido novamente no RAID, a opção insert deve ser utilizada.

stop

Esta opção tem a sintaxe gmirror stop nome e serve para parar um dispositivo, por exemplo, antes do dispositivo ser retirado. Esta opção ainda possui a flag -f que serve para forçar a parada do dispositivo. Como exemplo vamos parar o nosso dispositivo de exemplo, claro que para pará-lo devemos forçar a saída, para isto utilize a flag -f

# gmirror stop gm0

Se você está executando os mesmos exemplos que eu, o seu sistema acabou de reiniciar!  :)

dump

Esta opção tem a sintaxe gmirror dump disco e serve para fazer um "dump" das informações do disco.

Exemplo:

# gmirror dump /dev/ad2

Gconcat(8) O concatenador de discos do GEOM

O gconcat(8) serve para concatenar discos, isto é, juntar dois discos relativamente pequenos e formar um grande disco. Isto é muito útil quando se precisa de um grande volume, e isto também entra no nível de RAID 0, só que sem as questões de striping, isto é, os dados não ficarão divididos paralelamente nos dois discos. Esta forma é uma das mais simples de se utilizar o geom(4).

O Sistema Operacional

Para utilizar o gconcat(8), precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

    options GEOM_CONCAT

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

   geom_concat_load="YES"

Utilizando o Gconcat

A concatenação de discos pode ser feita de duas maneiras, de forma manual, onde todas as vezes que um disco concatenado for utilizado ele deve ser criado, ou de forma automática, onde todas as configurações do concatenamento ficarão gravadas em meta dados nos discos, assim, toda vês que o disco for conectado ao sistema ele será reconhecido automaticamente. Abaixo veremos como fazer estas duas formas. Após concatenado o dispositivo ficará acessível dentro do diretório /dev/concat/$Nome onde Nome é o $Nome do dispositivo.

O primeiro argumento do gconcat(8) diz a ação que ele deve tomar. Vamos ver eles abaixo.

create

Esta opção tem a sintaxe gconcat create [-v] nome disco disco..., e esta é a forma manual de se criar um disco concatenado. Como exemplo iremos concatenar dois disco, /dev/ad1 com 4 Gb e /dev/ad3 com 10 Gb, logo após iremos criar o novo sistema de arquivos e montar sobre o diretório /mnt

# gconcat create gc0 /dev/ad1 /dev/ad3
# newfs /dev/concat/gc0
# mount /dev/concat/gc0 /mnt

label

Esta opção tem a sintaxe gconcat label [-v] nome disco disco..., e esta é a forma automática de se criar um disco concatenado. Iremos fazer o mesmo exemplo acima, porém iremos criar de forma automática e adicionarmos a entrada no /etc/fstab

# gconcat label gc0 /dev/ad1 /dev/ad3
# newfs /dev/concat/gc0
# echo /dev/concat/gc0 /mnt ufs rw 2 2 >> /etc/fstab

stop e destroy

Esta opção tem a sintaxe gconcat stop [-fv] nome e serve para parar um disco concatenado, A flag -f serve para forçar a parada, como exemplo, vamos para o nosso exemplo.

# gconcat stop gc0

clear

Esta opção tem a sintaxe gconcat clear [-v] disco e serve para remover os meta dados de um discos, como por exemplo, iremos utilizar-lo com o disco /dev/ad3

# gconcat clear /dev/ad3

dump

Esta opção tem a sintaxe gconcat dump disco e serve para fazer um "dump" das informações do disco.

Exemplo:

# gconcat dump /dev/ad3

Gshsec discos dependentes GEOM

Com o gshsec(8) é possível fazer com que um disco necessariamente precise do outro para ser montado, isto é feito pelo compartilhamento de um segredo entre os dispositivos, assim os dois discos precisam estar presentes para ter-se acesso as informações.

O Sistema Operacional

Para utilizar o gshsec(8) precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

  options         GEOM_SHSEC

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

  geom_shsec_load="YES"

 

Utilizando o Gshsec

O primeiro argumento do gshsec(8) diz a ação que ele deve tomar. Vamos ver eles abaixo.

label

Esta opção tem a sintaxe gshsec label [-hv] nome disco disco e ela cria um segredo compartilhado entre os discos, o dispositivo ficará acessível dentro do diretório /dev/shsec/nome, e só será acessível se os todos os discos estiverem conectados.

Por exemplo iremos ligar um Pendrive e um diretório.

# gshsec label -v secret /dev/ad0s1 /dev/da0

Assim o /dev/shsec/secret só será acessível se o pendrive estiver conectado.

stop

Esta opção tem a sintaxe gshsec stop [-fv] nome, isto para o dispositivo, mas não o é destruído.

Por exemplo, iremos parar o dispositivo do exemplo acima.

# gshsec stop secret

A flag -f serve para forçar a parada do dispositivo.

clear

Esta opção tem a sintaxe gshsec clear [-v] disco e serve para remover os meta dados de um discos com, por exemplo, iremos utilizar-lo com o Pendrive.

# gconcat clear /dev/da0

Agora não podemos mais acessar o dispositivo /dev/ad0s1

dump

Esta opção tem a sintaxe gshsec dump disco e serve para fazer um "dump" das informações do disco.

Exemplo:

# gconcat dump /dev/ad0s1

Graid3 Raid3 com GEOM

O RAID3 é um sistema de RAID que tenta juntar as características de auto desempenho e segurança de dados, Para este tipo de RAID são necessários (2^n + 1) discos, simplificando, 3, 5, 9, 17.... Neste tipo de RAID um dos discos não servirá para armazenamento de dados, mas sim para armazenamento de um [Bit de Paridade], e nos outros discos os dados são gravados, caso um disco venha a falhar, ele pode ser reconstruído a partir dos dados do outro disco e do bit de paridade, Porém se mais de um disco falhar ao mesmo tempo ou no momento da reconstrução de um disco quebrado, todo o conteúdo pode ser perdido, mesmo assim ele é mais seguro que somente um RAID 0, e o desempenho é aproveitamento de espaço em disco é melhor que o RAID 1, pois o tamanho dos discos será a soma de todos-1 dispositivos e a gravação e leitura de dados será feita em todos-1 discos paralelamente. No Raid 3 os meta dados são gravados no último setor do disco, assim eles serão reconhecidos e recarregados automaticamente na inicialização do sistema e em uma eventual falha. Depois de criado os dispositivos ficarão acessíveis dentro do diretório /dev/raid3/$Nome onde nome é o $Nome do dispositivo criado.

O Sistema Operacional

Para utilizar o graid3(8) precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

  options         GEOM_RAID3

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

  geom_raid3_load="YES"

Utilizando o Graid3

O primeiro argumento do gmirror diz a ação que ele deve tomar. Vamos ver eles abaixo.

label

Esta opção tem a sintaxe graid3 label [-hnrvw] nome disco disco disco e serve para criar um dispositivo RAID 3, o último disco será responsável pela gravação dos bits de paridade, uma dica é escolher o melhor disco para isso. A configuração inicial do RAID é feita aqui, então vamos ver as possíveis flags.

-h Grava o de forma fixa o nome do provider nos meta dados
-n Desliga a auto sincronização dos discos não sincronizados, em estado velho.
-r Utiliza o componente de paridade para leitura em estilo round-robin, sem esta opção o componente de paridade não é utilizado em um sistema onde os discos estejam operando corretamente, com esta opção as operações de I/O serão cerca de 40% mais rápidas, porém leituras seqüenciais serão mais lentas, Não utilize esta opção se a opção -w estiver em uso.
-w Com esta opção, todas as leituras serão checadas com o bit de paridade, se um erro for encontrado um erro será retornado o valor da sysctl kern.geom.raid3.stat.parity_mismatch é incrementado. Não utilize esta opção se a flag -r for utilizada também.

Por exemplo vamos criar RAID 3 em três partições, /dev/ad0s1e, /dev/ad2s1e e /dev/ad3s1e, todos as três partições tem 1.9G, será utilizada a flag -w e o disco ad3 será o de paridade. Iremos fazer um novo sistema de arquivos e iremos fazer ele montar sobre o diretório /home

# graid3 label gr0 /dev/ad0s1e /dev/ad2s1e /dev/ad3s1e
# newfs /dev/raid3/gr0
# echo "/dev/raid3/gr0 /home ufs rw 2 2" >> /etc/fstab

clear

Esta opção tem a sintaxe graid3 clear [-v] disco e serve para limpar os meta dados de um disco. Como exemplo iremos limpar os meta dados do disco /dev/ad0s1e

# graid3 clear /dev/ad0s1e

configure

Esta opção tem a sintaxe graid3 configure [-adhnrRvwW] nome e serve para re-configurar um dispositivo de RAID3. Esta opção tem várias flags, as veremos abaixo.

-a Liga a auto sincronização de dispositivos em estado antigo.
-d Não grava o de forma fixa o nome do provider nos meta dados
-h Grava o de forma fixa o nome do provider nos meta dados
-n Desliga a auto sincronização de dispositivos em estado antigo.
-r Liga a leitura em round-robin.
-R Desliga a leitura em round-robin.
-w Liga a verificação de leitura.
-W Desliga a verificação de leitura.

Como exemplo, iremos ligar a verificação de leitura do exemplo criado anteriormente.

# graid3 configure -w gr0

rebuild

Esta opção tem a sintaxe graid3 rebuild [-v] nome disco e serve para sincronizar os discos, e só tem efeito se a auto-sincronização do disco tenha sido desligada.

Como exemplo, vamos supor que o disco /dev/ad3s1e esteja em estado antigo e a auto-sincronização tenha sido desligada, para sincronizarmos ele novamente executaremos o seguinte comando.

# graid3 rebuild gr0 /dev/ad3s1e

remove

Esta opção tem a sintaxe graid3 remove [-v] <-n number> nome e serve para remover um disco do RAID, e limpar os seus meta dados, a cada disco é atribuído um número, e o número do disco pode ser obtido através do comando graid3 list, em nosso caso era o disco /dev/ad3s1e. Como exemplo, iremos tirar o disco número dois do nosso exemplo.

#graid3 remove -n 2 gr0

insert

Esta opção tem a sintaxe graid3 insert [-hv] <-n $numero> nome disco' e serve para adicionar um disco que foi retirado ou tenha "estragado" anteriormente. Após inserido o novo disco, ele será sincronizado. Este comando tem somente mais uma flag, que será vista abaixo:

-h Grava o de forma fixa o nome do provider nos meta dados.

Um exemplo será adicionar o disco numero dois que foi removido, com o disco /dev/ad3s1e

graid3 insert -n 2 gr0 ad3s1e 

stop

Esta opção tem a sintaxe graid3 stop [-fv] nome e serve para parar um dispositivo de RAID, a flag -f serve para forçar a parada de um dispositivo.

Por exemplo, vamos parar o nosso exemplo:

graid3 stop -f gr0

GEOM Gate, Exportando e importando dispositivos via rede

Fechando este artigo, vou explicar as duas ferramentas, o ggatec(8) e o ggated(8), que fazem possíveis a exportação e importação de dispositivos de armazenamento via rede. O ggated(8) é o servidor, ele ficará no computador que contém o dispositivo real, já o ggatec(8) ficará do lado do cliente e será responsável por criar o dispositivo no cliente. Bom mas qual a vantagem do Geom Gate sobre o NFS? O NFS não cria um dispositivo na maquina cliente, assim é impossível aplicar as outras regras do geom sobre NFS, como exemplo com o Geom Gate é possível criar RAID 1 em rede. Para este exemplo ficar "rico" iremos exportar via rede o dispositivo de RAID 3 que criamos no exemplo anterior, porém ele pode ser feito com qualquer dispositivo.

ggated(8) O servidor de dispositivos

Como disse antes, o ggated(8) é responsável pelo lado do servidor do geom gate, basicamente ele lê um arquivo de configuração, que por padrão é /etc/gg.exports. Este arquivo tem uma sintaxe simples, são basicamente três colunas, descritas abaixo:

EndereçoDoCliente     Acesso         Dispositivo Local     

Em endereço do cliente podemos colocar o nome do computador, um endereço de IP ou endereço de rede/Mascara da rede, em Acesso temos três opções, RW para Leitura e Escrita, RO para Somente Leitura e WO para Somente Escrita, e para o dispositivo é o caminho do dispositivo como /dev/ad0s1d. O arquivo pode ter quantas entradas for necessário. Para nosso exemplo, onde exportaremos o dispositivo /dev/raid3/gr0 utilizaremos o seguinte arquivo.

10.0.0.0/8     RW      /dev/raid3/gr0

Agora é só executarmos o ggated(8) e está pronto, o ggate por padrão utiliza a porta 3080 tcp de todas as suas interfaces.

# ggated
# echo $?
0
#

No exemplo acima vimos que o ggated(8) retornou 0, então ele está funcionando corretamente, caso ele retorne 1, um erro ocorreu, e provavelmente seja o arquivo de configuração ou a porta já esteja em uso, provavelmente por outro processo do ggated(8)

O ggate(8) possui algumas flags, veremos elas abaixo:

-a endereço Especifica o endereço para escutar as conexões
-n Não utiliza TCP_NODELAY
-p porta A porta que ele irá escutar conexões.
-R rcvbuf Tamanho do buffer de recebimeto. O padrão é 131072 (128kB).
-S sndbuf Tamanho do buffer de envio. O padrão é 131072 (128kB).
-v Executa em primeiro plano, assim exibindo informações de debug na saída padrão

Considerações: Os dispositivos exportados não podem ser montados localmente, e a velocidade dos dispositivos importados nos clientes ficará reduzida pela conexão de rede e pelo geom gate utilizar TCP, as conexões não são criptografadas!

ggated(8) O cliente de dispositivos

O ggatec(8), como dito anteriormente é o cliente do ggated(8). Ele tem uma sintaxe mais parecida com as outras opções do geom. Ele precisa de um servidor ggated(8) para se conectar. Os dispositivos criados pelo ggatec(8) ficarão sobre o diretório /dev/ggate# onde # é o número do dispositivo, iniciando de 0.

O Sistema operacional

Para utilizar o gate(8) precisamos adicionar a linha abaixo no arquivo de configuração do kernel. E depois construir o novo kernel.

options GEOM_GATE

Uma outra opção é carregar o módulo dinâmico do kernel, para isto adicione a linha abaixo no seu /etc/loader.conf

geom_gate_load="YES"

Utilizando o ggatec

O primeiro argumento do ggatec(8) diz a ação que ele deve tomar. Vamos ver eles abaixo.

create

Esta opção tem a sintaxe ‘’ggatec create Servidor Dispositivo’’, basicamente ela cria o dispositivo /dev/ggate0 se este for o primeiro dispositivo montado, caso não seja, o valor 0 vai ser incrementado em um. Esta opção possui várias flags, as veremos abaixo:

-n Não utiliza TCP_NODELAY
-v Em modo verbose
-o ro | wo | rw O modo de Montagem, respectivamente, Somente Leitura, Somente Escrita e Leitura e Escrita.
-p porta A porta que o servidor está escutando
-q queue_size Tamanho da fila de requisições de I/O que podem ser enfileiradas
-R rcvbuf Tamanho do buffer de recebimento. O padrão é o do servidor.
-S sndbuf Tamanho do buffer de envio. O padrão é o do servidor.
-s sectorsize Tamanho do setor, caso não seja especificado o valor padrão de 512k vai ser utiliziado
-t timeout Tempo de Timeout, por padrão 0, que significa timeout infinito
-u unit Especifica o número da Unidade, aquele número do dispositivo /dev/ggateNumero

Como exemplo vamos criar o dispositivo do exemplo do ggated(8), e monta-lo em /mnt

# ggatec create 10.0.13.146 /dev/raid3/gr0
# mount /dev/ggate0 /mnt

rescue

Esta opção tem a sintaxe mínima ggatec rescue -u NumeroDoDispositivo Servidor Dispositivo e serve para recuperar um dispositivo que foi perdido, por exemplo em uma falha na rede. Esta opção aceita as flags -n, -v, -o, -p, -R e -S descritas anteriormente. Como exemplo, suponhamos a rede caio e o dispositivo anterior foi perdido, para recuperarmos, executaremos o exemplo abaixo.

ggatec rescue -u 0 10.0.13.146 /dev/raid3/gr0

destroy

Esta opção tem a sintaxe ggatec destroy -u NumeroDaUnidade e serve para destruir uma unidade. Esta opção conta com a flag -f que serve para forças a destruição do dispositivo. Por exemplo, vamos destruir o exemplo que construímos, como ele está montado sobre /mnt vamos forçar sua destruição.

# ggatec destroy -u 0 -f

list

Esta opção tem a sintaxe ggatec list e serve para mostrar os dispositivos montados, porem se utilizado a opção -u mostra somente o dispositivo e a opção -vtraz em modo verbose. Como exemplo vamos exibir as informações sobre o dispositivo numero 0.

# ggatec list -v -u 0
NAME: ggate0
info: 10.0.13.146:3080 /dev/raid3/gr0
access: read-write
timeout: 0
queue_count: 0
queue_size: 1024
references: 1
mediasize: 4008393728 (3.7G)
sectorsize: 1024
mode: r0w0e0


Status, e Informações

O geom(8) traz algumas informações sobre os dispositivos que estão ativos no sistema, como por exemplo, o status de sincronização dos discos que estão em RAID1 com o gmirror(8). Estas informações são obtidas utilizando um dos comandos do grupo do geom(8), como gmirror(8) ou geli(8) com as seguintes opções:

help Exibe ajuda
list [name ...] Mostra os dispositivos ligados ao sistema e exibe algumas informações
status [-s] [name ...] Exibe o status do dispositivo.
load [-v] Carrega o módulo do kernel responsável pela classe.
unload [-v] Descarrega o módulo do kernel.

 

Considerações Finais

Vimos neste artigo um dos maióres poderes do FreeBSD, que é a flexibilidade com que podemos trabalhar os discos, coisa que nem todos Sistemas Operacionais fazem com tanta trasnparência e facilidade.

Referências: FreeBSD HandBook: http://www.freebsd.org/doc/en/books/handbook/geom.html
Páginas do Man

Agradecimentos ao Time WWW.
Ao Departamento de Ciência da Computação da Unesc que me dá todo apoio e infra-estrutura.
E a “Pawel Jakub Dawidek” o Sr Geom.

Daniel Bristot de Oliveira

danielbristot_AT_gmail_com

Comentrios
Por thiago_cabeludo em 25/07/2006 22:58:17
Excelente artigo
Parabns!
Por garga em 26/07/2006 07:54:30
Excelente artigo, muito completo e objetivo. Parabns Daniel!
Excelente
Por Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo em 26/07/2006 10:07:42
Melhor que isso ? S dois disso. :P hehe! Muito bom, parabns daniel. :)
PUTA FALTA DE EDUCACAO!
Por Joao Paulo - 0v3rm1nd em 31/07/2006 10:45:28
PUTA FALTA DE EDUCACAO esse artigo, assim, a seco, de repente, sem avisar antes, assusta a gente, deixa a sociedade escandalizada, deixa outros sistemas operacionais resumidos a po, faz a gente pensar "como pudemos viver sem geom antes"? 
 
Daniel pra ser melhor que isso so falta uma coisa: ser apresentado pela Fernanda Lima de tanguinha de top transparente. 
 
Obrigado demais pela incrivel contribuicao, provavelmente a melhor documentacao de GEOM disponivel na internet.
Perfeito
Por Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo em 05/08/2006 16:42:12
Simplesmente perfeito!!! objetivo, conciso, prtico... melhor impossvel. Tambm puderera, n? FreeBSD...
Fala Srio
Por neo em 09/08/2006 14:38:59
Tu acabou de resolver meu problema de bkp por rede IAOeuhAOEIuhAEOi 
 
vlw 
 
abraaoooo e parabens
Sua Palestra
Por Daniel Leite de Oliveira em 11/04/2007 15:13:08
cara assisti a sua palestra na semana da computao na Univali sj 
e curti muito essa parte do geom 
gostaria que voce me desse uns tokes na instalao do freeBSD 
 
obrigada
Por Mrcio em 30/03/2010 15:54:01
/etc/loader.conf triste!!!


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 30/08/2006 )
 
< Anterior   Prximo >
FUG-BR - Espalhando BSD
Dicas Rpidas:
O portsclean(1) é uma ferramenta que limpa todo o diretório work/ do ports(7). Além de liberar espaço em disco ele é capaz de remover arquivos antigos que não possuem referência no /usr/ports/distfiles.

#portsclean -C
Limpa o diretorio work/

#portsclean -D

Limpa o diretorio distfiles/

#portsclean -i
Modo interativo, pergunta se você quer remover o arquivo

Recomendado
#portsclean -CDi
 






Wallpapers
Sua Opiniao
Online:
Ns temos 20 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

FUG-BR: Desde 1999, espalhando BSD pelo Brasil.