Pesquisa Google

quarta-feira, 16 de abril de 2008

Cópias de Segurança em Linux

Cópias de Segurança em Linux

Todos os utilizadores de computadores, já passaram ou irão passar por momentos em que a única esperança perante uma perda da informação do sistema, são as cópias de segurança.

No entanto, entre os que até efectuam cópias de segurança regularmente, encontramos situações em que essas cópias foram efectuadas há demasiado tempo. E note-se que o conceito de tempo aqui aplica-se de forma não linear... se a cópia foi efectuada há um mês, mas desde essa data quase nada foi alterado no conteúdo dos ficheiros, não é problemático. Mas o caso até muda de figura se a cópia até foi realizada ontem, mas a manhã de hoje foi a mais produtiva das nossas vidas e pensar em perder estes dados é pior do que qualquer filme de terror produzido em Hollywood!

Descanse o leitor, porque em Linux as cópias de segurança podem ser facilmente configuradas e efectuadas nos intervalos temporais que o utilizador achar mais convenientes.

Para tal, vamos conhecer várias ferramentas avançadas que integradas devidamente resultam numa excelente política de segurança.

Rsync – sincronizar e copiar

O Rsync é um comando em Linux, o qual, basicamente sincroniza ficheiros e directórios. A grande vantagem da sua utilização advém da eficiência com que efectua essa tarefa, permitindo reduzir o tempo de cópia e a largura de banda (no caso de se utilizar uma rede).

Quando utilizamos o Rsync, este comando não copia todos os ficheiros e pastas na integra. Em vez disso, compara os ficheiros e/ou pastas que pretendemos copiar com a pasta de destino. Se estamos a efectuar a cópia pela primeira vez, esta é realizada pela totalidade, como é óbvio. Mas, se se tratar de uma repetição da cópia, é utilizado nesse caso um algoritmo para determinar o que foi alterado desde a última cópia. Assim, apenas é transferido o que, de facto, é diferente. Mais interessante é o facto de mesmo no caso de ficheiros, estes não são copiados na totalidade. Por exemplo, se temos um ficheiro que tinha um tamanho de 10Mb e actualmente ocupa 12Mb, o Rsync transfere apenas o diferencial (os 2Mb)! Isto aplicado a cópias regulares de grandes volumes, faz milagres!

O Rsync pode ser utilizado para copiar os ficheiros e pastas dentro do mesmo disco ou entre discos, para suportes externos (discos USB) ou em rede (quer local ou Internet). Por uma questão de simplicidade, neste artigo vamos apenas considerar a cópia para um Disco Externo USB.

Forma de utilização do Rsync

O comando para executar o Rsync é:

rsync -argumento origem destino

onde -argumento podem ser um ou vários argumentos, dos quais se destacam:

p – perms: mantém as permissões

t – times: mantém a data e hora das pastas e ficheiros

o – preserve owner: mantém o proprietário

g – preserve group: mantém o grupo

v – verbose: visualização da evolução da tarefa

r – recursive: inclui sub-pastas

a – archive: equivale aos argumentos r, l, p, t, g, o, D

Assim, por exemplo, o comando rsync -tvr /home /mnt/backup realiza uma cópia da pasta /home para a pasta /mnt/backup. O argumento t indica ao Rsync para manter a data e hora originais dos ficheiros, caso contrário a data e hora passaria a ser a da cópia.

A cópia da pasta /home por si só não ajuda na cópia de segurança, pois o interessante é o seu conteúdo de ficheiros e sub-directórios. Para isso, indicamos o argumento r de modo a copiar o directório e tudo o resto que esteja “dentro” deste.

Nesta tarefa o ideal é podermos visualizar o decorrer da cópia, de modo a verificarmos se existe algum erro. Para tal, utilizamos o argumento v.

Salienta-se o detalhe que é de extrema importância: no comando apresentado no exemplo, o caminho da pasta de origem não apresenta o / no final, tal como na pasta de destino. Isto deve-se ao facto de, desta forma, a cópia incluis a própria pasta /home. Vejamos outros exemplos para melhor entender:

rsync -tvr /home /mnt/backup -> copia o directório /home (e seus sub-directórios) para a pasta /mnt/backup.

rsync -tvr /home/ /mnt/backup -> copia os ficheiros existentes na pasta /home (e seus sub-directórios) para a pasta /mnt/backup, mas a própria pasta /home não é copiada.

Dos argumentos apresentados, verificarmos que escrever rsync -rltpgoD e rsync -a, é exactamente a mesma coisa. Como sempre, os utilizadores de Linux quando podem simplificar, não hesitam!

Montagem de Disco Externo

Em artigos anteriores, verificamos que em Linux não existem os drives C:, D:, etc, como estamos habituados em Windows. A localização dos dispositivos (discos, disquetes, CD-ROM, etc) podem ser encontrados na pasta /dev.

Os discos IDE são listados como /dev/hd* e os SATA ou USB como /dev/sd*.

Alguns exemplos ajudam a compreender:

/dev/hda1 -> disco IDE Primário Master

/dev/hda2 -> disco IDE Primário Slave

/dev/hdb1 -> disco IDE Secundário Master

/dev/hdb2 -> disco IDE Secundário Slave

/dev/sda1 -> primeiro disco SATA ou USB

/dev/sda2 -> segundo disco SATA ou USB

Mesmo sabendo isto, não é possível aceder a qualquer um dos discos sem que o mesmo seja montado. Assim, o comando mount permite a montagem de um dispositivo no sistema, sendo acessível como se fosse um directório. Normalmente é utilizada a pasta /mnt, por forma a sabermos que estamos a aceder a um conteúdo que nem sempre poderá estar acessível porque foi “montado”. Isto não significa que o leitor seja obrigado a seguir com o uma regra! Se preferir, poderá criar os directórios que desejar para a montagem dos mais variados dispositivos.

Mais exemplos:

mount /dev/hdb1 /mnt -> monta o disco IDE Secundário Master na pasta /mnt

mount /dev/sda1 /mnt -> monta o disco SATA ou USB na pasta /mnt

Desta forma, seria possível aceder aos directórios de cada um dos discos e efectuar as tarefas desejadas, com o comando cd /mnt.

Pelo que aprendemos até ao momento, já podemos efectuar uma cópia de segurança. Basta executar uma sequência de comandos. No nosso exemplo, vamos considerar a cópia da pasta /home para o disco externo ligado por USB reconhecido como /dev/sda1.

Para se saber quais os dispositivos ligados ao computador, basta executar o comando sfdisk –l, o qual divide na sua apresentação os tipos de ligação de discos (IDE, SATA ou USB). No caso de o disco externo não corresponder a sda1 no seu sistema, não se esqueça de alterar esses pontos nos comandos de exemplo que apresentamos!

A sequência de comandos seria a seguinte:

mount /dev/sda1 /mnt -> Monta o disco externo na pasta /mnt

rsync -av /home /mnt -> Copia a pasta /home e respectivo conteúdo (ficheiros e sub-pastas) para o directório /mnt. O argumento v permite-nos acompanhar todo o processo na linha de comandos em função da sua evolução.

umount /mnt -> Desmonta o disco externo. A informação do disco mantém-se, mas este deixa de ser acedido pelo sistema. Após este passo, é possível remover o disco em segurança.


Aparentemente o processo de cópia está concluído, e resta ao leitor efectuar estes comandos sempre que pretender actualizar a cópia de segurança.

O problema é que o mais certo é esquecer-se e só o voltar a fazer muito raramente. E nesse caso, de quase nada serviu o que aprendeu…


SCRIPT – pequeno aplicativo

Um script é, nada mais, nada menos, do que um pequeno programa criado pelo utilizador, que pode executar uma série de comandos automatizados.

Assim, é possível criar num único ficheiro, um script contendo todos os comandos apresentados para a realização da cópia de segurança.

Para o efeito, podemos recorrer a um processador de texto na linha de comandos. Existem vários, sendo os mais conhecidos o “vi”, o “nano” e o “emacs”. Por uma questão de facilidade de utilização para os utilizadores menos experientes, vamos apresentar o nosso exemplo recorrendo ao “nano”.

O ficheiro a criar será o “backup.sh” e utilizamos os seguintes comandos:

nano /etc/backup.sh -> executa o editor de texto “nano” e criar o ficheiro “backup.sh”

A linha de comandos altera o aspecto o aspecto de forma a permitir-nos escrever texto:

#!/bin/sh

mount /dev/sda1 /mnt || exit

rsync -av /home /mnt

umount /mnt






A primeira linha indica a “shell”, ou seja, o interpretador de comandos a utilizar.

De seguida, aparece a montagem do disco externo, no entanto, acrescentamos um elemento novo para o leitor: o “pipe” (||). Estes caracteres são obtidos pela combinação das teclas Alt+\. Em termos básicos, a instrução dada permite a interrupção dos comandos no caso de não estar presente o disco externo. Assim, evita-se correr as tarefas que não vão ter qualquer efeito.

Os restantes comandos são os mesmos que apresentamos antes.


CRON – Agenda de tarefas do Sistema

Desta forma o processo está quase concluído, faltando apenas o agendamento da tarefa, de modo a correr periodicamente, para que a cópia de segurança não dependa da disponibilidade e lembrança do seu utilizador.

Em Linux temos um serviço, o qual é carregado no arranque do sistema. Este serviço é designado por “Cron”. Esta ferramenta permite programar a execução de comandos e tarefas de forma repetitiva ou apenas numa única vez. Para isso, o “cron” utiliza uma tabela denominada “crontab”. O arquivo “crontab” normalmente está localizado no directório /etc.

A utilização do “crontab” obedece a um formato especifico de modo a permitir o agendamento das tarefas.

Para a edição do “crontab” podemos utilizar o editor de texto já nosso conhecido: o “nano”.

O comando nano /etc/crontab (não é engano, este ficheiro não tem extensão) abre o ficheiro de modo a permitir a sua edição. O leitor verificará que o mesmo não está vazio, tal como ocorrera com o “backup.sh”, porque é um ficheiro criado pelo sistema.

Salienta-se uma particularidade: qualquer linha iniciada por # é interpretada pelo sistema como um comentário. Isto significa que o texto servirá para ser lido pelos utilizadores e não pelo sistema, que o ignorará.

Dito isto, o comando a incluir no final do ficheiro será:

# Cópia de segurança diária

0 13 * * * root /etc/backup.sh


Vamos conhecer em detalhe cada elemento desta linha:

Minuto

Hora

Dia do Mês

Mês

Dia da semana

Utilizador

Comando

0

13

*

*

*

root

/etc/backup.sh

Desta forma, o “cron” sabe que todos os dias, às 13 horas e 0 minutos deverá executar o comando /etc/backup.sh.

No entanto, estes campos podem assumir outros valores (sabendo que o * significa “todos”):

- Minutos: 0 a 59;

- Horas: 0 a 23;

- Dia do Mês: 1 a 31;

- Mês: 1 a 12;

- Dia da semana: 1 (Segunda-feira) a 7 (Domingo);

- Utilizador: Nome do utilizador associado ao comando;

- Comando: Qualquer comando ou “script” válido.

Agora sim, já poderá efectuar cópias de segurança automatizadas e ficar descansado se algo correr mal e necessitar recuperar os dados do seu computador. Convirá, periodicamente, verificar se o disco externo está em perfeito funcionamento e se as cópias de segurança estão a ser realizadas com sucesso..

Sem comentários: