[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