[FUG-BR] gconcat

Daniel Bristot de Oliveira danielbristot em gmail.com
Domingo Março 4 23:28:22 BRT 2007


BOA! um boa pergunta para um domingo a noite.

Eu nunca tinha tentado fazer acontecer o seu problema, mas vamos ver o
que da, se segura que vai comessa a baixaria hehehe

O disco utilizado é uma partição em que eu guardo o ports, é a
/dev/ad0s4f, o tamanho dela é: 3145728000 bytes

-----
1. Criar um concat com só um disco, de forma "manual", desta forma os
meta dados ficam em memoria e nenhum meta-dado é gravado no disco,
entao o sistema de arquivos/disco não é alterado.

# gconcat create teste1 /dev/ad0s4f

desktop# gconcat list
Geom name: teste1
State: UP
Status: Total=1, Online=1
Type: MANUAL
ID: 1060847703
Providers:
1. Name: concat/teste1
   Mediasize: 3145728000 (2.9G)   <----- Tamanho do novo privider
(/dev/concat/data)
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ad0s4f
   Mediasize: 3145728000 (2.9G)   <----- Tamanho do consumidor (/dev/ad0s4f)
   Sectorsize: 512
   Mode: r1w1e2
   Start: 0
   End: 3145728000

# mount /dev/concat/teste1 /usr/ports/
# df | grep ports
/dev/concat/teste1   2971278  2715162   18414    99%    /usr/ports
# ls /usr/ports/
[conteudo inalterado]

Como nenhum meta-dado foi escrito no disco, o FS não foi alterado,
então tudo continua como estava antes, apenas com um novo "label".

Resutado: Funcionou
-----

Teste 2:

Fazer o mesmo teste de cima, porém, criar o provider de forma automática.

#gconcat label teste2 ad0s4f
# gconcat list
Geom name: teste2
State: UP
Status: Total=1, Online=1
Type: AUTOMATIC
ID: 3377459459
Providers:
1. Name: concat/teste2
   Mediasize: 3145727488 (2.9G)   <--- Tamanho do novo provider < 512k
que o antigo
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ad0s4f
   Mediasize: 3145728000 (2.9G)    <--- Tamanho do consumidor
   Sectorsize: 512
   Mode: r1w1e2
   Start: 0
   End: 3145727488

Agora um bloco de meta-dados foi escrito no ultimo bloco da particao,
veja que o Midiasize do consumidor tem 3145728000 bytes, mas ele
inicia em, 0 e termina em 3145727488, os 512k (3145728000 - 3145727488
= 512) que faltam, estão sendo utilizados pelos meta-dados, assim
estão disponiveis apenas 3145727488 para o provider.

# mount /dev/concat/data /usr/ports/
# df | grep ports
/dev/concat/teste2   2971278  2715162   18414    99%    /usr/ports
# ls /usr/ports/
[conteudo inalterado]

Observer que o df(8) nas duas ocasiões retornou o mesmo tamanho do
disco, isto por que o df(8) utiliza as informações do sistema de
arquivos, e não do geom(4). Como o meta-dado do gconcat(8) foi gravado
no ultimo setor, o superbloco do FS ficou como estava antes, assim o
sistema de arquivos vai funcionar.

mais um teste:

vou tentar enxer o sistema de arquivos:

# ls -lh /home/bristot/OOo_2.1.0_FreeBSD62Intel_install_pt-BR.tbz
-rw-r--r--  1 bristot  wheel   115M Feb  3 21:49
/home/bristot/OOo_2.1.0_FreeBSD62Intel_install_pt-BR.tbz
# df -h | grep ports
/dev/concat/teste2    2.8G    2.6G     18M    99%    /usr/ports
# cp /home/bristot/OOo_2.1.0_FreeBSD62Intel_install_pt-BR.tbz /usr/ports/
# df -h | grep ports
/dev/concat/teste2    2.8G    2.7G    -97M   104%    /usr/ports

Funcionou! Funciou??

Aqui pode dar um problema, o sistema de arquivos pode sobrescrever o
ultimos 512k que ele acreditava ser o final do disco, assim ele sobre
escreve os meta-dados, mas cara, isso vai entras em FS, ai não me
garanto muito, mas para ter uma noção da probabilidade de ser escrito
nestes 512k, levando em conta que 512k é um quarto de
fragmento(padrão), que por sua vez é um oitavo de um bloco(padrão),
isso diminui as chances dele ser sobrescrito, nun fiz estes testes,
mas assim que sobrar um tempo vou faze-los :D. se voce assina a lista
freebsd-geom deve ter visto uma thread a uma duas semanas atraz,
falando sobre o problema do ultimo bloco em classes aplicadas de uma
"quente", o assunto da thread erra: "New g_part class", bom no final o
phk da uma pincelada sobre isto.

3: criar um concat com dois discos.

# gconcat teste3 /dev/ad0s4f /dev/ad0s3
# gconcat list
Geom name: teste3
State: UP
Status: Total=2, Online=2
Type: AUTOMATIC
ID: 3747211060
Providers:
1. Name: concat/teste3
   Mediasize: 7003383296 (6.5G)
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ad0s4f
   Mediasize: 3145728000 (2.9G)
   Sectorsize: 512
   Mode: r1w1e2
   Start: 0
   End: 3145727488
2. Name: ad0s3
   Mediasize: 3857656320 (3.6G)
   Sectorsize: 512
   Mode: r1w1e2
   Start: 3145727488
   End: 7003383296

Em numeros

44(Midia Size ad0s4f + Midia Size ad0s3)- Midia Size do concat/teste3
= blocos que foram utilizados por meta-dados
(3857656320+3145728000)-7003383296 = 1024

Como podemos ver, os meta-dados foram gravados em ambos os discos.

# mount /dev/concat/teste3 /usr/ports/
# df -h | grep ports
/dev/concat/teste3    2.8G    2.6G     18M    99%    /usr/ports

OPA! o disco esta com o mesmo tamanho de antes??? sim, pois o sistema
de arquivos apenas foi criado para o primeiro disco, assim ele não
sabe nada sobre o outro.
--

Então, se for criar um concat de UM disco de forma MANUAL, tudo blz,
funciona sem formatar, mas acho que isso não é muito útil :D

espero ter ajudado, e desculpe por alguma merd* que posso ter escrito,
estou morto do sono :D

gn8
-- 
Daniel Bristot de Oliveira


Mais detalhes sobre a lista de discussão freebsd