sexta-feira, 18 de dezembro de 2009

Considerações gerais sobre LVM

- Um file system desmontado pode ser incrementado em seu tamanho, utilizando uma porção ainda não usada do volume logico ou pode ser extendido para um novo volume fisico.

O comando "extendfs" possibilita aumentar o tamanho do file system, executando todos os procedimentos necessarios para atualização do superbloco (original e copia) e de dados de grupo de cilindros com o endereço dos novos cilindros adicionados.
- O LVM dispõe de comandos que permitem exportar e importar um grupo de volumes de um equipamento para outro.

- Quando por qualquer motivo for necessario recuperar o conteudo de um disco, os comandos tradicionais de backup, apenas retornam os dados do usuario para o volume logico. Porem é necessario também reconstituir a configuração do LVM. Para isso existem 2 comandos que permitem obter o "Backup" e "Restore" da configuração do LVM:
vgcfgbackup - backup da configuração do LVM de um grupo de volumes em arquivos binarios (um arquivo para cada grupo). Esses arquivos são guardados no diretorio "/etc/lvmconf".

vgcfgrestore - permite restaurar a configuracao de um grupo de volumes em volumes fisicos individuais.
- A administração de grupos de volumes, volumes fisicos, volumes logicos, swapping e file system pode ser feitas por comandos ou pelo gerenciador do sistema operacional.

- Os volumes fisicos no LVM são identificados pelo seu nome de device para a seção 2. Cada disco tem um arquivo especial bloco e um arquivo especial caractere. Algumas tarefas de administração do LVM utilizam os arquivos blocos e outros arquivos caractere:
  • Criação de Volume Fisico  - pvcreate - arquivo especial caractere;
  • Adicionando volume fisico em um grupo de volumes - vgextend - arquivo especial bloco;
  • Criar File System ou um volume logico - newfs - arquivo especial caractere;
  • Adicionar um disco a um volume logico ou aumentar o espaço de um volume logico - extendfs - arquivo especial caractere;
  • Montar e desmontar uma file system - mount/umount - arquivo especial bloco;

Gerencimento de Volumes Logicos - Parte 5.

Tabela de grupos de cilindros

O grupo de cilindros é uma coleção de um ou mais cilindros do disco. Um cilindro é a coleção das trilhas formadas pelo posicionamento dos cabeçotes nos multiplos pratos. Cada grupo de cilindro contem a copia do superbloco primario, uma tabela com informações da estrutura do grupo de cilindros, uma tabela de inode e blocos de dados. Todos as informações de acesso ao arquivo e seus dados são controlados pelo grupo de cilindros.
Informações contidas na tabela de grupo de cilindros:
- numero de inodes e de blocos de dados
- mapa dos inodes usados
- mapa dos blocos livres
- ponteiro do ultimo bloco usado
- ponteiro do ultimo fragmento usado
- ponteiro do inode
- numero de fragmentos disponiveis
Tabelas e inodes

Inode é uma tabela que contem informações sobre um arquivo. Um inode contem informações sobre:
- tamanho do arquivo
- dono
- grupo
- data e horario de criação
- ultimo aceso e ultima modificação
- permissões
- numeros de links
- tipo de arquivo
- endereço para os blocos de dados

Os inodes de cada grupo de cilindros são armazenados na tabela de inodes dentro do grupo de cilindros.
O inode contem 15 ponteiros que endereçam os blocos de dados. Quando o arquivo é criado, é feito uma entrada em um desses endereços, o mesmo acontece se o arquivo for aumentado. Se o arquivo for reduzido, os ponteiros são realocados, o endereço dos blocos de dados são retirados do inode e coloado na lista de blocos livres da file system.
O tamanho do inode é de 128 bytes. Cada ponteiro ocupa 4 bytes. Os blocos de dados podem ter 4 ou 8 Kbytes. Os primeiros 12 ponteiros que são conhecidos como blocos diretos apontam diretamento para os blocos de dados do arquivo, podendo o arquivo atingir um tamanho de 96 Kbytes (se os blocos de dados forem 8 Kbytes).
Se o arquivo for maior, o inode ocupara o 13º ponteiro, endereçando um bloco de 4 ou 8 Kbytes (blocos indiretos) ou qual contera 1024 ou 2048 endereços de blocos de dados. Asssim um arquivo podera atingir o tamanho de 16480 Mbytes.
Se o arquivo for mairo que 16480 Mbytes, o inode ocupara  o 14º ponteiro, endereçando um bloco de 4 ou 8 Kbytes o qual contera 1024 ou 2048 endereços ( blocos indiretos duplos ) que apontara um para um bloco 4 ou 8 Kbytes de blocos de dados. Assim um arquivo podera atingir o tamanho de aproximadamente 33 Gbytes. 
O 15º ponteiro esta reservado para uso futuro.
Blocos de dados

O resto do espaço da file system é ocupado por blocos de dados também chamados por blocos de armazenamento. Esses blocos podem ser de 4 ou 8  kb de tamanho e constituem a minima porção que pode ser lida ou gravada em uma file system.
Em arquivos comuns, os blocos de dados contem os dados do arquivo.
Em diretorios, os blocos de dados contem as entradas dos arquivos.
Os arquivos especiais não tem  blocos de dados.

FRAGMENTAÇÃO
Um bloco de dados é dividido em fragmentos de 1, 2, 4 ou 8 Kbytes. O  fragmento é a minima porção que pode  ser acessada em um file system. Os fragmentos são utilizados quando um arquivo não ocupa um bloco em sua totalidade. Um fragmento é alocado sometne no final do arquivo. Um arquivo usara fragmento contido em um unico bloco. Um bloco pode conter fragmento de mais de um arquivo. Multiplos fragmentos podem ser usados por um unico arquivo e serao continuos dentro do bloco.

Supondo os arquivos
A com 512, B com 1 K e C com 3 K:

A - 512 bytes   _
B - 1 K __
C - 3 K ______

Se tivermos usando um disco cujos blocos sejam de 8 Kb e os fragmentos também de 8 Kb, teriamos:

_|______________ -> arquivo A = 8 Kb
__|_____________ -> arquivo B = 8 Kb
______|_________ -> arquivo C = 8 Kb

O total de blocos usados por esses 3 arquivos seria de 24 Kb.

Se tivermos utilizando um disco cujos blocos sejam de 8 Kb e os fragmentos de 1 Kb, teriamos

A|_B|_____C|_____ -> O total de blocos utilizados por esses 3 arquivos seria de 5 Kb.

abraços e até a proxima.

quinta-feira, 17 de dezembro de 2009

Gerencimento de Volumes Logicos - Parte 4.

File System

O HP-UX aloca blocos de 512 bytes e faz a ocupação sequencial dos blocos dentro da file system. Cada vez que um bloco é liberado, fica a disposição do sistema para reaproveitamento, tornando dinamica a alocação de disco. Para agilizar o acesso ao disco, o HP-UX utiliza-se de buffer de I/O, de 1024 bytes, para transferencia de dados em memoria, mantendo-os por um determinado periodo de tempo, antes de grava-lo em disco.
COMPONENTES DO FILE SYSTEM

Um sistema de arquivos consistem em:
- Bloco de boot ( somente em discos de boot)
- superbloco primario
- superbloco redundante
- tabela do grupo de cilindros
- tabela de inodes
- blocos de dados ( arquivos e diretorios )

Bloco de boot

O bloco de boot é utilizado pelo sistema como bloco de boot; ele ativa um programa para carregar o nucleo do sistema operacional. Este bloco não é utilizado pelo gerenciador do sistema de arquivos.

Superbloco primario

O superbloco primario é uma area de 8 Kbytes no disco. Pelo fato de ser extremamente importante para o sistema, uma copia é mantido em memoria.
Ele é atualizado em disco sempre que o comando sync é executado. O HP-UX mantem uma copia do superbloco em cada grupo de cilindro que é denominado superbloco redundante, possibilitando a reconstituição em caso de perda.

O superbloco possui informações para o gerenciamento da filesystem. É conhecido como cabeçalho da filesystem e é sempre o bloco 1 de um volume logico do HP-UX. 

As informações contidas no superbloco são:
- flag de modificação do superbloco (informações de atualização da file system)
- informações estaticas:
  • tamanho da file system
  • numeros de inodes
  • mapa de localização de espaços livres
  • numero de grupos de cilindros
  • localização do superbloco, grupo de cilindros, inodes e blocos de dados
  • tamanho dos discos e numero total de blocos
  • tamanho de fragmentos e numero total de fragmentos
- informações dinamicas:
  • numero total de blocos livres
  • numero total de inodes livres
  • flag do file system ( 0 = montado, 1 = desmontado)
Obs: A cópia do superbloco primario (redundante) contem somente as informações estaticas se for necessario a reconstituição das informações dinamicas, sera feito atraves do comando "fsck". O arquivo "/etc/sbtab" contem um lista de localização dos superblocos reduntantes em cada grupo de cilindros. Este arquivo deve ser listado e guardado para referencias futuras.

ate mais,....


Gerencimento de Volumes Logicos - Parte 3.

Area e Swap (swap space)

Swap é uma area de armazenamento em disco para uso da memoria virtual, para executar swapping ou paging de processos.
A memoria fisica é um recurso limitado, isso significa que somente alguns processos podem estar presente na memoria em um periodo de tempo, enquanto outros processos estão aguardando. Em função dessa situação foi introduzido o conceito de swap; quando a solicitação de memoria fisica for alta os processos inteiros ou parte deles são colocados em area de swap, e quando essa solicitação diminui os processos inteiros ou parte deles são trazidos de votla para a memoria.

Existe um daemon chamado "Vhand", que monitora cada pagina de memoria tentando encontrar paginas ( uma pagina é igual a 4 Kbytes) que não estejam sendo acessadas atualmente. Se existir uma alta solicitação de memoria, as paginas que não estão sendo acessadas atualmente são levadas para a area de swap (swap out) atraves do "Vhand". Um outro daemon "statdaemon" retem informações de quando o Vhand esta ocupado. Quando o statdaemon percebe que o Vhand não esta conseguindo manter a memoria livre tão rapido quanto são as solicitações, ele ativa o "swapper".
  • Vhand - leva/retorna paginas de processos para/da area de swap. (paging out e paging in)
  • Swapper - leva/retorna processos inteiros para/da area de swap
Com relação a memoria fisica deve se distinguir 3 conceitos:
  • real memory - é a quantidade de memoria fisica instalada no sistema
  • lockable memory - é a  quantidade de memoria reservada por um subsistema ou por um processo. Não pode ser feito swap do conteudo dessa area.
  • availabe memory - é a memoria disponivel para ser utilizada como memoria virtual.
Essas informações podem ser obtidas pelo comando "dmesg".

Todo o gerenciamento de memoria é efetuado pelo MMU (Memory Management Unit) que intarage entre os endereços dos espaços fisicos e endereços dos espaços logicos.
TERMOS UTILIZADOS:
  • device swap - Uma partição (seção ou LVM) ou um disco inteiro, utilizado exclusivametne para swap. O device swap não utiliza o espaço de um file system. Exceto para o swap primario, os demais podem ser configurados dinamicamente.
  • primary swap - é um tipo especial de device swap que esta localizado no mesmo disco do file system root e é ativado durante o boot.
  • secondary swap - é um tipo especial de device swap adicional que pode estar localizado em qualquer outro disco.
  • File System Swap - é uma area de swap adicional reservada dentro de uma file system. É configurada dinamicamente e utilizada quando o espaço do device swap não for suficiente.
  • Pseudo Swap - permite utilizar uma parte da memoria real como area de swap. Desta forma a memoria real tera uma area disponivel para execução de processos e uma area disponivel para utilização de swap. É indicado para quando se tem muita memoria real. O pseudo swap é configurado no Kernel atraves do parametro "swappseudo-on" (1 = habilitado e 0 = desabilitado, o default é 1)
Observações

- Algumas aplicações necessitam de uma quantidade minima de area de swap para serem executadas adequadamente. A quantidade necessaria normalmente esta escrita na documentação da aplicação.
- A mensagem de erro "sorry pid xxxxxx was killed due to no swap space" aparece quando não ha espaço de swap disponivel para execução do processo. Verifique o espaço de disco disponivel para aumentar ou criar area de swap.

- O tamanho da area de swap necessaria equivale a 2 vezes a memoria real, esse assunto é discutivel, hoje em muitos sistemam, 1 vez o tamanho é suficiente as vezes ate menos.
- Coloque uma unica partição de swap por disco do contrario podera resultar num excessivo movimento de cabeça de disco.

- As areas dos devices swap devem ter tamanhos semelhantes.

- Areas de swap em discos diferentes são tratados intercalando a utilização de espaços de um disco e de outro disco.

- Quando se define uma area de swap, deve-se atribuir a prioridade de uso da area (0-melhor a 10-pior). O sistema utiliza primeiramente as areas de prioridade 0 e depois as de prioridade 10.

- Areas de swap criadas em dispositivos mais rapidos devem ter melhor prioridade.

- Area de swap em file system devem ter prioridade pior, ou seja mais proximo de 10.

- A area total de swap disponivel no sistema consiste de todas as areas de swap disponiveis (device swap e file system swap). O gerenciador de swap reserva o espaço de swap no momento da criação do processo, mas somente aloca o espaço no momento de fazer o swap.

- "swapinfo" é o comando que exibe informações sobre as areas de swap. Na listagem exibida podera ser identificado 3 tipos de swap; "dev" (device swap), "fs" (file system swap) e "hold" (montante de area reservada na criação do processo, porem ainda não alocada). Algumas das opções do comando swapinfo são:
-t inclui uma linha de totais.
-a exibe todas as areas de swap, inclusive as que não estão em uso.
-d exibe informações das devices swap somente.
-q imprime somente os totais.

Gerencimento de Volumes Logicos - Parte 2.

Como prometido estou voltando ao assunto de Volumes Logicos, hoje estarei escrevendo sobre root disk, grupo de volumes root, area de swap, File System, etc

Disco de root (root disk)
Um disco deve, normalmente, ter 3 areas; area de boot, area de swap e area das file systems.
A area de boot é gerada no processo de instalação e contem o codigo de ativação do sistema. Essa area so é utilizada durante o boot do sistema.
Em discos particionados pelo metodo de seção, a area de boot deve residir na "seção 6". Em sistemas gerenciados pelo metodo "LVM", a area de boot esta contida na BDRA (Boot Data Reserved Area). O BDRA é criado quando o volume logico do root é criado. Quando se utiliza LVM a seção utilizada é sempre 2 (disco inteiro).

Area de boot é uma file system de formato proprio denominado LIF (Logical Interchange Format) de estrutura simples que pode ser coloado em areas pequenas, como por exemplo 2 Mbytes . O LIF contem o codigo de ativação que sera carregado no Kernel do HP-UX (/hp-ux). O cabeçalho da LIF contem os arquivos ISL, HP-UX, AUTO, RDB e IOMAP.

O ISL utiliza o arquivo AUTO para localizar o Kernel do HP-UX durante o boot do sistema.
A area de swap é uma area continua do disco usada pela memoria virtual. A primeira area de swap especificada é referenciada como "primary swap" e esta localizada no disco de root. Em sistemas que utilizam particionamento por seção, a primeira area de swap ocupa sua propria seção, separado da area de boot e da area das file systems. Em sistemas que utilizam LVM, a primeira area de swap reside em um volume logico do grupo de volume root (vg00).

A estrutura de dados do disco de root é diferente da estrutura de um disco que nao tenha area de boot. O disco de root contem setores reservados para o BDRA e o LIF (contendo o programa de boot). A alocação de espaços é mais restrita do que em outros discos, pois o espaço alocado para a file system root, para a area de swap, e para a area de dump devem ser continuos.
Um disco de boot contem as seguintes informações:
  • O cabeçalho LIF - Essa area estara presente tambem em volumes fisicos que contenham area de dump e area de swap.
  • PVRA - Physical Volume Reserverd Areas. Contem informacoes especificas do volume fisico para o LVM.
  • LIF Directory Area - Contem o boot do sistema HP-UX, arquivos LABEL e outros arquivos LIF.
  • VGRA - Volume Group Reserved Area. Contem informações especificas do grupo de volume para o LVM. Uma copia exata do VGRA é gravada em cada volume fisico do grupo. Dentro da VGRA esta o VGSA (Volume Group Status Area) e o VGDA (Volume Group Descriptor Area). O VGDA contem informações que descrevem todos os volumes fisicos necessarios para configurar o grupo de volumes no LVM. O VGSA contem informacoes de quorum do grupo de volumes; quais particoes estao estragadas e quais volumes fisicos nao estao disponiveis ou não ativos.
  • Bad Block Relocation Area - Contem informações especificas sobre o mecanismos de recuperação de blocos ruins.
  • User Area - Onde serão criados os volumes logicos para as respectivas file system. O primeiro volume logico deve ser para o file system do root.
Um disco que não tenha area de boot contem as seguintes informações:
  • PVRA - identico ao disco de boot.
  • VGRA - identico ao disco de boot.
  • Bad Block Relocation Area - identico ao disco de boot.
  • User Area - onde serão criados os volumes logicos para as respectivas file systems.
Durante o processo de ativação do grupo de volumes o LVM le os dados de controle do volume fisico definido no grupo. Esses dados de controle, os quais incluem o VGDA e VGSA estão armazenados em todos os volumes fisicos do grupo de volumes.

Grupo de volumes root
O grupo de volumes root é um grupo especial. Ele contem a area de boot, a file system root, a area primaria de swap, e pode tambem conter a area de dump do sistema e a area de outras file system.
O volume logico do file system root contem algumas restrições:
  • Deve ter localização especifica no disco de boot
  • Deve ser criado com alocação continua de partições
  • Não pode suportar realocações de bad block
  • Deve ser identificado no BDRA
  • Não pode ser aumentado ou diminuido
  • Deve conter a file system que contenha o /usr e o /tmp
O volume logico de swap primario deve ter alocação de partições fisica continuas e deve ser identiicado pelo BDRA.
Se for utilizado área de dump, seu volume logico deve ser criado no grupo de volume root, podendo-se ter mais que um volume logico para dump. Sua area deve ter alocação de partição fisica continuas e identificadas pelo BDRA. 

Depois retorno falando sobre a area de swap (swap space) 

Abraços. 

sexta-feira, 20 de novembro de 2009

Script de Backup

Como havia comentando o post passado estava com problema na execução de um script (ver post rsync). A solução foi surpreendente e conforme vai passando os anos, fico mais impressionado com o mundo *NIX.

bom o problema ja discuti no post anterior, agora vou postar o script rodando perfeitamente em meu sistema, gostaria de chamar a atenção para o comando "rev", achei muito legal, e foi esse comando que resolveu meu problema. 

sem mais delongas, aqui vai o script.

#!/bin/bash
#************************************************

#Script Criado com o proposito de backupear remotamente o servidor Shiva atraves
# do comando rsync.
#------------------------------------------------ # Criacao.........Amilcar de Jesus Moreti
# Data Criacao....05 de Agosto de 2009
# Versao..........1
# Release.........1
# E-Mail..........ajmoreti@yahoo.com.br
# MSN.............acmoreti@msn.com
# Skype...........ajmoreti
#------------------------------------------------*
# LOCAL
#------------------------------------------------*
dirBkp="/backupsrv"
dumpFile="/dumpFiles"
dateBkp=`date +%A`
#------------------------------------------------*
# BACKUP SERVERS
#------------------------------------------------*
nomServer="shiva deva vishnu mozart"
dirshiva="/etc /home /lean /ordensProd /otimizador /pcp /qualidade /sgq /srf"
dirdeva="/etc /usr/local/bin /totvs/apo/logix /totvs/bin/appserver /root/.odbc.ini"
dirvishnu="/etc /usr/informix /usr/local/bin"
dirmozart="/etc /coml /home /usr/local/bin /srv"
dirisis=""
dirosiris=""
for nServer in ${nomServer}
do
        dirServer="$dirBkp/$nServer"
        if [ ! -d $dirServer ]
        then
                mkdir $dirServer
        fi

        listExclude="/usr/local/bin/${nServer}ListExclRsync"
        for sDir in $(eval echo \$dir${nServer})
        do
                rsync -C \
                -D \
                --recursive \
                --update \
                --links \
                --perms \
                --acls \
                --xattrs \
                --dirs \
                --owner \
                --group \
                --times \
                --verbose \
                --progress \
                --partial \
                --numeric-ids \
                --specials \
                --exclude-from=$listExclude \
                $nServer:$sDir $dirServer
dumpDir="$dumpFile/$nServer"
                if [ ! -d $dumpDir ]
                then
                        mkdir $dumpDir
                fi

                if [ ! -d $dateBkp ]
                then
                        mkdir $dumpDir/$dateBkp
                else
                        rm $dumpDir/$dateBkp/*.tar.gz
                fi
                newVar=`echo $sDir | rev | awk -F/ '{print $1}' | rev`
                tar -zcvf $dumpDir/$dateBkp/$newVar.tar.gz /$dirServer/$newVar --atime-preserve -p --remove-files
        done
done

Rsync

Saudações a todos!!!

Hoje deveria continuar a falar sobre o LVM, porem vou continuar outro dia, o meu grande problema no momento é com backup, é que venho desenvolvendo um script para criar backup de um servidor de arquivos em shell, porem me deparei com um problema na hora de targear esses arquivos.
Esse backup estou fazendo com o rsync porem percebi que ele nao salva o nome em path absoluto e sim relativo, exemplo: 

/usr/local/bin ele grava como bin.
declarei uma variavel tipo array dirBkp="/usr/local/bin /totvs/bin/appserver /totvs/apo/logix"

for i in ${dirBkp}
do
echo $i
done

/usr/local/bin
/totvs/bin/appserver
/totvs/apo/logix

tar -zcvf /backupsrv/$dirBkp.tar.gz

deu para perceber o problema né, o codido do script entenderia o seguinte:

/backupsrv/totvs/apo/logix/.tar.gz

e isso causa um erro, bom o que vou garimpar agora é uma solução para esse problema, ou atraves do comando rsync ou atraves de qualquer outra solução.

vou começar pelo rsync.

Name
rsync  - rapido, versatil à distancia (e local), ferramenta de copia de arquivos
Sinopse

Local:  rsync [OPÇÃO...]  SRC.... [DEST]

Acesso via remote shell:
pull:    rsync [OPÇÃO...]   [USER@]HOST::SRC...[DEST]
push: rsync [OPÇÃO...] SRC... [USER@]HOST:[DEST]

Acesso via rsync daemon: 

pull: rsync [OPÇÃO...]  [USER@]HOST::SRC... [DEST]
        rsync [OPÇÃO...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

push: rsync [OPÇÃO] SRC... [USER@]HOST::DEST
          rsync [OPÇÃO] SRC... rsync://[USER@]HOST[PORT:]/DEST

Usos, com apenas um arg SRC e sem arg DEST ira listar os arquivos de origem, em vez de copar.

Descrição 
Rsync é um rapido e extraordinariamente versatil ferramenta de copia de arquivos. Ele pode  copiar localmente, para / de outro host atraves de qualquer shell remoto, ou para / de um daemon rsync remoto. Ele oferece  um grande numero de opções que controla cada aspecto de seu comportamento e permite a especificação muito flexivel do conjunto de arquivos a serem copiados. É famoso por seu delta algoritmo de transferencia, o que reduz a quantidade de dados enviados pela rede atraves do envio so das diferenças entre os arquivos de origem e os arquivos existentes no destino. Rsync é amplamente utilizado para backups e espelhamentos e como um comando de copia melhorada para uso diario.

Rsync encontra arquivos que precisam ser transferidos usandouma verificação rapida "algoritmo" (por padrão) que procura por arquivos que foram alterados no tamanho ou no tempo da ultima modificação. Quaisquer mudanças em outros atributos preservada (tal como solicitado por opções) são feitas no arquivo de destino diretamente, quando a rapida verificação indica que os dados do arquivo não precisa ser atualizado.

Alguns dos recursos adicionais do rsync são:

  • suporte para ligações de copia, dispositivos, proprietarios, grupos e permissões
  • excluir e excluir-de opções semelhantes para o GNU tar
  • CVS excluir um modo de ignorar os mesmos arquivos que o CVS ignoraria
  • pode usar qualquer shell remoto, incluindo ssh ou rsh
  • não requer previlegios de super-usuario
  • pipelining de transferencia de arquivos para minimizar os custos de latencia 
  • apoio anonimo ou atenticado pelo rsync (ideal para espelhamento)
Geral

Rsync copia arquivos de ou para uma maquina remota ou localmente no host atual (ele nao suporta copiar arquivos entre dois hosts remotos).
Ha duas maneiras diferentes para o rsync manter contato com  um sistema remoto: usando um programa shell remoto como o transporte (como o ssh ou rsh) ou contatando um daemon rsync diretamente via TCP. O transporte do shell remoto é utilizado sempre que o caminho de origem ou de destino contem um dois-pontos simples (:) depois de uma especificação de acolhimento. Comunicar-se com um daemon rsync diretamente acontece quando a origem ou o caminho de destino contem um duplo dois-pontos (::) depois de um separador de especificação de acolhimento ou quando um rsync://URL é especificada.
Como um caso especial, se um argumento de uma unica fonte é especificado sem um destino, os arquivos serão listados em um formato de saida similar a "ls -l"

Se nem a origem ou o caminho de destino especificar uma maquina remota, a copia ocorre localmente (ver também a lista de opção)
Rsync refere-se ao lado do local como o "cliente" e o lado remoto como "servidor". Não confunda "servidor" com um daemon rsync - daemon é sempre um servidor, mas um servidor pode ser um deamon ou um processo remoto shell gerado.

Uso
Voce usa o rsync da mesma forma que voce usa o RCP. Voce deve especificar uma origem e um destino, uma das quais pode ser remota.

talvez a melhor maneira de explicar a sintaxe esta com alguns exemplos:

rsync -t *.c foo:src/

isto seria transferir todos os arquivos que correspondem ao padrao *.c do diretorio atual para o diretorio src na maquina foo. Se algum dos arquivos ja existentes no sistema remoto, o protocolo de atualização rsync remoto é utilizado para atualizar o arquivo, enviando apenas as diferenças. 

rsync -avz foo:src/bar data/tmp

Tal transferencia recursivamente todos os arquivos do diretorio src/bar na maquina foo para o diretorio data/tmp na maquina local.


até mais, depois continuo o artigo.

quinta-feira, 12 de novembro de 2009

Gerenciamento Avancado de discos com LVM

Depois de umas boas ferias de volta ao trabalho :-D , e nesse artigo quero falar sobre LVM

O Assunto e bastante extenso, mas vale a pena tratar esse assunto, levando em consideração que hoje o LVM é um assunto muito difundindo, mas que as vezes por falta de informação acaba deixando de ser usada.

O LVM (Logical Volume Manager) é um "Gerenciador de Volumes Logicos", muito flexivel, e sua implementação no Linux segue os mesmos padrões do HP-UX, então esse artigo servira tambem para o HP-UX.

O que muda no HP-UX, é que para saber quais são os discos que vamos utilizar, utiliza-se o comando:

# ioscan -fC disk

Quando começamos a instalação de um novo servidor, geralmente ja temos em mente qual  sera a sua aplicação, a partir dai, definimos os file systems, o tamanho deles, discos, etc.

Como nem tudo é perfeito, no meio do percurso o servidor pode precisar de mais discos, ou mais partições, ou ainda aumentar as partições, enfim, sao varias as possibilidades que podem ocorrer com um servidor depois de instalado, mas como fazer isso da melhor maneira possivel e sem traumas?

A resposta esta no LVM, utilizo o LVM desde quando começei a trabalhar com HP-UX, e gostei muito da flexibilidade da ferramenta, hoje em Linux os servidores que instalo, utilizo 100% LVM.

Entendendo os conceitos do LVM:

O LVM e um sistema gerenciador de discos que permite o particionamento dos discos atraves do tratamento de grupo de volumes, volumes logicos e volumes fisicos.

O administrador do sistema deve entender os conceitos de: partições fisicas, volumes fisicos, particoes logicas, volumes logicos, grupos de volumes e como eles se relacionam uns com os outros.

Partições Fisicas (PX - Physical Extent)
É a menor unidade de alocação de espaço em disco. São segmentos do mesmo tamanho em um determinado volume fisico. O tamanho da partição fisica é determinada em bytes e pode estar na faixa de 1 a 256 mbytes, sendo que o default é 4 mbytes e o nº maximo de particoes fisicas em um disco é 65.535.
Volume Fisico (PV - Physical Volume)
É um disco fixo fisicamente acoplado ao computador com um identificador unico.
/dev/sda   e   /dev/sdb

dependendo da tarefa que vai executar com LVM, o sistema utilizara o arquivo especial bloco ou caractere.

Partições Logicas (LX - Logical Extent)
São alocadas sobre as partições fisicas.
Uma partição logica corresponde a uma, duas ou tres partições fisicas dependendo do espelhamento que se tenha escolhido.

Volume Logico (LV - Logical Volume)
São grupos de informações localizadas em volumes fisicos ( uma coleção de partições logicas). Um volume Logico representa uma file system.
Os dados em um volume logico parecem ser continuos (para o usuario), mas podem estar de forma não continua no volume fisico. Isso permite a um file system paginar espaços, realocar espaços e permite tambem a interligação de multivolumes fisicos.

Volume logicos podem ser alterados, extendidos, listados, criado e removidos. O tamanho de um volume logico é determinado pelo numero das partições logicas (PX).

Os nomes dos volumes logicos são identificados pelos nomes dos arquivos especiais:

/dev/vgnn/[r]volx

Por default, x inicia com valor 1 e é incrementado na ordem em que os volumes são criados dentro de cada grupo de volumes, não impedindo que o administrador escolha um nome para o volume logico.

Grupo de Volume (VG - Volume Group)
É uma coleção de 1 à 32 volumes fisicos de tamanho e tipo variado e com um nome (vgnn).
Quando se adiciona um volume fisico a um grupo de volumes, o volume fisico é particionado em unidades continuas de mesmo tamanho (partições fisicas). Essas partições fisicas herdam o tamanho das partições fisicas ja definidas no grupo.

Após a instalação, do sistema HP-UX  e Linux com LVM  o sistema fica com um grupo de volume "/dev/vg00", podendo-se então criar os volumes logicos para distribuir o espaço em disco. Qualquer outro volume fisico que for conectado ao sistema pode ser adicionado ao grupo de volumes root, ou em um outro grupo de volumes. Neste caso o novo nome sera vgnn, onde nn sera um numero sequencial a partir de 1.

O diretorio "/dev" contem o diretorio do grupo de volume com os respectivos arquivos especiais que representam os volumes logicos do grupo. Contem tambem o arquivo especial "group" o qual fornece, à estrutura de dados LVM, informações sobre o grupo de volume.

O numero maximo de volumes logicos (file system) para um grupo de volumes é de 255, mas o limite, na verdade, é determinado pelo tamanho dos volume fisico atribuido ao grupo de volume.

Gerenciando Volumes Logicos

O gerenciador de volume logico é  um nivel de software entre a aplicação e o hardware, que controla os recursos do disco fixo, pelo mapeamento dos dados entre o armazenamento fisico e o logico. Os 2 aspectos do gerenciador de volume logico sao:
  • Armazenamento fisico (Physical Storage)
    Especifica onde os dados residem.
  • Armazenamento logico (Logical Storage)
    Controla quais dados serão apresentados para  o usuario e como eles serao apresentados. O armazenamento dos dados podem estar continuos, expandidos; podem estar interligados a multiplos discos; e serem replicados (copiados, reproduzidos). Essas caracteristicas suprem o usuario de incrivel disponibilidade dos dados e gerenciamento flexivel dos subsistemas do disco fixo.
O armazenamento logico (Logical Storage) é mapeado para o armazenamento fisico quando o gerenciador de volumes logicos faz referencia a dados representados na partição logica. O volume logico pode interligar Volumes alocados sobre partições fisicas dentro do volume group. Uma partição logica é feita em cima de 1, 2 ou particações fisicas (dependendo do numero de copias)

Os volumes fisicos disponiveis (disco fixo) conectados ao sistema podem ser agrupados em um ou mais volumes group. O usuario ve cada volume group como um set de um ou mais volumes logicos. O HP-UX usa volumes logicos separados, com propositos especificos como; swap, sistema de arquivos, dados de boot ou armazenamento de dump.

Volumes fisicos são dividos em unidade de tamanho igual, chamadas partições fisicas (PX). Existem de uma a tres partições fisicas por partições logicas, dependendo do nº de copias. As partições fisicas são agrupadas dentro das partições logicas que compreendem o volume logico.

Realocação de blocos ruins (Bad Block)
A substituição de blocos de disco dentro de um grupo de volume é configuravel. Esse tipo de realocação não é suportada por todos os discos.
Quando o LVM detecta um erro de leitura corrigivel (soft error) ele pode regravar os dados corrigindo esse erro, de outra forma ele aplicara o tratamento de erro não corrigivel (Hard error).

Quando ocorre um "Hard error" o LVM realoca o bloco usando um pool de blocos de dados que é mantido para esse proposito, direcionando o I/O para esse bloco. Se esta sendo utilizado espelhamento o LVM le os blocos de uma outra copia e entao regrava o bloco realocado. Esse procedimento é completamente transparente para a aplicação. Se não estiver sendo utilizado o espelhamento o LVM retornara um codigo de erro.

Para configurações com controladora de disco inteligente, antes de ocorrer a realocação de software, o drive de disco fisico tenta realocar e regravar o bloco defeituoso. Se obtiver sucesso o drive de disco não mais apresentara o bloco defeituoso e o LVM remove essa indicação ou defeito de sua tabela.

até mais, depois retorno falando de root disk, grupo de volumes root e muito mais.

abraços.

quarta-feira, 7 de outubro de 2009

Backup para um Diretorio.

Foi uma descoberta e tanto esse procedimento de backup para um diretorio. Aconteceu que eu estava enfrentando um problema com backups de logical logs remoto, ou seja , estava enviando os logical logs diretamente a outros servidores, porem me deparei com o problema de nao atualização da flag (B) do Logical Log, foi onde resolvi abrir um chamado na IBM para tentar sanar o problema, e o Suporte da IBM, onde fui muito bem atendido, me indicaram esse metodo de backup, que particularmente achei muito interessante.

Se você optar por fazer um Backup em diretorios, não sera mais necessario o uso de fitas, que convenhamos da medo, principalmente se for fita DAT. Em vez de, você fazer o backup num diretorio local, que não seria nada seguro, podemos fazer o backup em uma file system montada de um outro servidor, ou seja, usar uma NFS.
O usuario que executa o backup deve obrigatoriamente ter permissão de escrita no diretorio (777). O diretorio deve ter espaço o suficiente para manter os backups dos dados. Voce pode usar o ferramentas do sistema operacional para compactar os arquivos apos o backup.

Vantagens de fazer o backup em um diretorio:
  • Pode-se fazer backup's de varias instancias simultaneamente;
  • Voce pode usar ferramentas do sistema operacional para compactar os arquivos;
  • Voce pode facilmente configurar o sistema de backup de logs para fazer backup automatico qdo os arquivos de logs encherem.
Configurando o caminho do diretorio

Use o parametro de configuração TAPEDEV para especificar o caminho absoluto do diretorio onde sera efetuado o backup. Este e o destino onde o ontape escreve os dados de backup e tambem onde o ontape le os arquivos para restore. Voce também deve especificar um diretorio para o parametro de configuração LTAPEDEV para os backup de Logical Logs.

Use a opção -d com o ontape para desligar o prompt interativo, qdo se efetuar um backup para um diretorio.


Renomeação de arquivos existentes

Quando o ontape repete uma operação archive, ele renomeia os arquivos para que os arquivos existentes nao sejam reescritos. Um timestamp é adicionado ao nome do arquivo.

Convenção de renomeação
  • Archive: Os times de checkpoint são adicionados no archive, e tem esse formato filename_YYYYMMDD_hhmmss_archive-level.
  • Arquivos de Logical Logs: O time do backup é adicionado, e possui esse formato filename_YYYYMMDD_hhmmss.
Exemplo, My_instance_L0 é renomeado para My_instance_20091007_134100_L0.

Quando houver necessidade de restauração do sistema, o ontape exige que o storage-space e os arquivos de logical logs sejam identicos aos especificados pelo parametro TAPEDEV e LTAPEDEV. Se os arquivos foram renomeados, pelo proprio ontape ou manualmente pelo usuario, é necessario uma intervenção manual e voltar os nomes como especificado nos parametros citados.

Voce pode mudar o nome padrao dos backups usando a variavel IFX_ONTAPE_FILE_PREFIX.

quinta-feira, 1 de outubro de 2009

exports - Sistema de Arquivos NFS a ser exportado (para kernel baseado em NFS)

SINOPSE
                  /etc/exports
DESCRIPTION
O arquivo do server /etc/exports, é um arquivo de lista de controle de acesso para sistesmas de arquivos que podem ser exportadas para clientes NFS. Ele é usado pelo exportfs(8) para dar informações ao mountd(8) e para o Kernel baseado no daemon nfsd(8).

O formato do arquivo é similar ao arquivo da SunOS. Cada linha contem um ponto de exportação e um espaço em branco separando as permissões dos clientes para montar o sistema de arquivos naquele ponto. Cada cliente pode ser incluso imediatamente seguido por um parentesis, e as opções separadas por virgulas para esse cliente. Não e permitido espaços em branco entre um cliente e sua lista de opção.

Linhas em brancos são ignoradas. Um ("#") introduz um comentario ate o final da linha. As entradas de dados podem ser prosseguida atraves de novas linhas usando uma barra invertida ("\"). Se um nome exportado contem espaços deve-se usar aspas duplas (" "). Voce tambem pode especificar espaços ou outros caracteres incomuns para a exportação usando uma barra seguido do codigo octal.
Formato de Nomes
O cliente NFS pode ser especificado varias maneiras:
Unico host
este e o formato mais comum. Voce pode especificar um host quer por um nome abreviado reconhecido pelo DNS, um nome de dominio qualificado ou por um endereço IP.

Netgroups
netgroups NIS pode ser usado no formato @grupo. Somente serão autenticados hosts de cada membros dos grupos que são considerados membros habilitados. Hosts vazios ou aquele que contem um traço simples (-) serão ignorados.

Curingas
Nomes de maquinas podem contem caracteres curingas (*) e (?). Podem ser usados para criar arquivos exports menores; por exemplo, *.cs.foo.edu correspondente a todos o hosts do dominio cs.foo.edu. Com esses caractares podemos combinar pontos em um nome de dominio, o modelo citado ira corresponder a todos os hosts dentro do subdominio cs.foo.edu. 

Endereços de Rede IP 
Voce tambem pode exportar diretorios para todos os hosts da rede simultaneamente. Isto é feito especificando um endereço IP e a Mascara de Rede como endereço/mascara onde a mascara pode ser especificada no formato com pontos e numeros decimais, ou  como umas mascara de comprimento contiguos ( por exemplo, este '/255.255.255.0' ou '/22' . Curingas geralmente não trabalha com endereços IP's, embora eles possam trabalhar quando as pesquisas reversas de DNS falhar.

Segurança RPCSEC_GSS
Para restringir acesso a uma exportação usando o rpcsec_gss, use a string especial "gss/krb5" como no cliente. Isto não possibilitara requisições simultaneas rpcseg_gss e fara exigencia sobre o endereço IP do cliente.

Opções Gerais
exportfs compreende as seguintes opções:

secure - Esta opção requer que os pedidos sejam originadas em uma porta menor que 1024. Esta opção é ativado por padrão. Para desligar, especifique insecure.

rw - Habilita leitura e escrita nesse volume NFS. Por padrão isso é desabilitado,o padrão é ro.

async - Esta opção permite que o Servidor NFS viole o protocolo NFS e responda ao pedido antes de quaisquers alterações feitas nos arquivos.
usando esta opção geralmente melhora o desempenho, mas ao custo de perder a integridade dos dados em caso de um crash no servidor, isso pode causar danos, perdas ou dados corrompidos.
Em versões do nfs-utils incluindo ate a versão 1.0.0, essa opção foi padrão. Em lançamentos futuros, sync é padrão, e async tem que necessariamente ser declarado. Para ajudar os administradores de sistemas a tomar conhecimento desta alteração, 'exportfs' ira emitir um aviso se sync ou async for declarado.

no_wdelay - Esta opção não tera efeito caso o async seja definido. O Servidor NFS normalmente demora a fazer um comit de escrita para disco e se o NFS Server suspeitar que há outra requisição solicitando a gravação. Isso permite que multiplas solicitações de gravações requisitadas sejam comitadas para o disco. Se o servidor de NFS recebe pequenos pedidos relacionados, este comportamento pode realmente diminuir a performance, assim no_wdelay esta disponivel como off. Por padrao a opção wdelay é on.
nohide - Esta opção é baseada na opção do IRIX NFS. Normalmente, se um servidor exporta dois sistema de arquivos que esta dentro de um, então o cliente tera que montar dois sistemas de arquivos explicitamente para ter acesso aos sistemas de arquivos. Se ele apenas monta o pai, ele vai ver o outro diretorio vazio onde o outro sistema de arquivo é montado. Esse sistemad e arquivo esta escondido.
Configurando a opção nohide em um sistema de arquivo, faz com que ele não se seja oculto, e um cliente devidamente autorizado se capaz de se mover por ele e seu pai, sem perceber a mudança.
Entretanto, alguns clientes NFS não lidam muito bem com essa situação.
A opção nohide somente é eficiente em single hosts, ele não funciona de forma confiavel com netgroup, subnet ou curingas.
Esta opção pode ser muito util em algumas situações, mas deve ser usado com cuidado, e somente depois de confirmar se o cliente lida com a situação de forma eficaz.
Esta opção pode ser desabilitada com hide.
no_subtree_check - essa opção desabilita a verficação do subtree, que tem implacações de segurança media, mas pode melhorar a confiabilidade em algumas circunstancias.
Se um subdiretorio de um sistema de arquivo é exportado, o servidor deve verificar não so o arquivo que é acessado no sistema de arquivo apropriado (que é mais facil) mas também o que esta na arvore exportada (que é mais dificil). Essa checagem esta ligada a opção subtree_check.
A fim de checar essa verificação, o servidor deve incluir algumas informações sobre a localização do arquivo "filehandle" que é dada ao cliente. Isto pode causar problemas com acessos a arquivos que são renomeados enquanto que um cliente tem esses arquivos abertos (embora em muitos casos simples, ele continuara a funcionar).
subtree também é usado para certificar-se que que os arquivos dentro dos diretorios somente é acessado pelo root, se o sistema de arquivos é exportado com a opção no_root_squash (veja abaixo), então o arquivo é acessado com mais direitos em geral.
Como orientação geral, o sistema de arquivos home, que é normalmente exportado na raiz e podem mudar o nome dos arquivos com frequencia, devem ser exportados com a opção subtree desabilitada. Um Sistema de arquivos que somente leitura, e não possua arquivos que serão renomeados (exemplo, /usr ou /var) e para os quais podem ser subdiretorios, provavelmente deve ser exportado com o subtree ON.
O padrão traz o subtree como habilitado.

terça-feira, 29 de setembro de 2009

O que é Logical Log ?

A ideia do Logical Log é manter um historico das operações e alterações dos dados do servidor desde o tempo de armazenamento da ultima copia de segurança do dbspace, então o servidor de banco de dados gera registros de logs. O Banco de Dados armazena os registros de log no Logical Log, um arquivo circular que é composto de tres ou mais arquivos logicos de log. Chama-se Logical Log, porque os registros de log representa operações logicas do servidor de banco de dados, ao contrario das operações fisicas. A qualquer momento, a combinação de um backup de uma dbspace e os backup de logical log contem uma copia completa do seu servidor de banco de dados.
Como Administrador do banco de dados, voce deve configurar e gerenciar os logical logs. Por exemplo, se voce não fizer os backups de logical logs regularmente, os logical logs serão preenchidos e o servidor de banco de dados suspendera os processos.

Estas responsabilidades incluem as seguintes tarefas:
  • Escolher um local apropriado para os logical logs;
  • Acompanhamento do status dos arquivos de logical logs;
  • Atribuir um espaço de armazenamento adequado em disco para o logical logs;
  • Alocação de arquivos de logs adicionais, sempre que necessarios;
  • Backup dos logical logs para uma midia;
  • Gerenciamento dos logging de blobspace e sbspace;
Localização dos Arquivos de Logical-Log
Quando o servidor de banco de dados inicializa os "disk space", ele coloca os logical logs e os physical-logs no root dbspace. Voce não tem controle sobre esta ação. Para melhorar o desempenho (especificamente, para reduzir os numeros de gravações no root dbspace e minimizar a contenção) , mover os arquivos de Logical-Logs para fora do root dbspace para um dbspace em um disco ou uma outra partição que não seja compartilhada com tabelas ativas ou o physical logs.
Para melhorar o desempenho ainda mais, separe os arquivos de Logical-Logs em dois grupos e armazena-los em dois discos separados. Por exemplo, se voce possui seis arquivos logical-logs voce pode locar os arquivos 1, 3 e 5 no disco 1 e os arquivos 2, 4 e 6 no disco 2. Esta disposição melhora o desempenho porque nunca a mesma unidade de disco tem que lidar com gravações do logical log atual, ou seja ha um balanceamento de I/O em disco.

Os arquivos de Logical-Logs contem informações criticas e deve ser espelhado para o maximo de proteção dos dados. Se voce mover os arquivos de Logical-Logs para um dbspace diferente, planeje para iniciar um espelhamento desse dbspace.

Idendificação dos Logical-Logs
Cada arquivo de Logical-Log, se backupeado para uma midia ou não, tem um numero de identificação exclusivo (unique ID). A sequencia começa com 1 para o primeiro Logical-Log preenchida apos a inicialização do dbspace . Quando o arquivo de Logical-Log atual torna-se completa (100%) o servidor de banco de dados muda-se para o proximo arquivo de Logical-Log e incrementa um numero de ID unico para o novo arquivo de Log + 1. Arquivos de Logs que foram recentementes adicionados ou marcados para exclusão tem o numero de ID unico de 0.

O atual espaço em disco alocado para cada arquivo de registro logico tem um numero de identificação conhecido como o numero de arquivo de Log. Por exemplo, se voce configura seis arquivos de Logical-Logs, esses arquivos leva um numero de registro de um a seis. Os numeros de registros podem estar fora de sequencia. Como os Logical-Logs são backapeados e liberados, o servidor de banco de dados reutiliza esses espaços.

Flags de Status do Logical-Log
Todos os arquivos  de Logical-Log possuem uma flag de status na primeira posição:
Added (A), Deleted (D), Free (F), ou Used (U). Abaixo possiveis combinações dos Flags:

A - - - - - -  > Arquivo de Log foi adicionado, e esta disponivel, mas ainda não foi utilizado;
D - - - - - -  > Se voce eliminou um arquivo de Log com as flags U-B, ele sera marcado como deletado. Esse arquivo de Log é eliminado e seu espaço e liberado para reutilização quando voce rodar um backup de nivel-0 de todos os dbspace.
F - - - - - -  > Arquivo de Log esta livre e disponivel para uso;
O arquivo de Log livre é liberado imediatamente após o backup de nivel-0, todas as transações dos Logical-Logs são fechadas e as atualizações mais antigas são carregadas em disco.
U - - - - - -  > Arquivo de Log foi usado mas não backepeado;
U-B - - - -  > Arquivo de Log foi backepeado mas ainda necessario em caso de restore. ( Arquivos de Logs são liberados quando não é mais necessario para recuperação.)
U-B- - - L  > Arquivo de Log foi usado mas ainda necessario em caso de restore. Contem o ultimo registro de CheckPoint;
U - - -C- -  > O servidor de Banco de Dados esta enchendo o arquivo de Log;
U - - -C-L  > Arquivo de Log atual contem o ultimo registro de checkpoint;


Tamanho do Logical-Log
Decidir a quantidade de arquivos de Logical-logs e tamanho que voce quer. Se voce alocar espaço em disco mais do que o necessario, o espaço é desperdiçado. Se voce não atribuir espaço em disco suficiente, o desempenho pode ser afetado.  Considere os seguintes pontos sobre o tamanho e o numero de arquivos de Logical-logs:
  • O tamanho minino para um arquivo de Logical Logs é de 200 kilobytes;
  • O tamanho maximo para paginas de Logical Logs é de 1048576 paginas (equivalente a 0x100000).
  • Arquivos de logs menores significa que voce pode levar mais tempo de recuperação em caso de um recover se os discos que contenham os logs cair. Se o Continuous Log Backup é definido, os arquivos de Logs são automaticamentes copiados assim que cheios.
  • Use arquivos de Logs maiores quando muitos usuarios estão escrevendo nos logs ao mesmo tempo.
Numeros de Arquivos de Logical-Logs
Quando voce pensar em numeros de Arquivos de Logical-Logs considere os pontos abaixo:
  • Voce sempre deve ter no minino 3 arquivos de Logs e no maximo 32767. O numero de arquivos de Logs depende do tamanho desses logs.
  • O Numero de arquivos de logs afeta a frequencia dos backups desses logs;
  • O numero de arquivos de logs afeta a taxa de recuperação de arquivos em Blobspace e blobpages;