FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD - Fazendo backup com zfs send / zfs receive via ssh
 
23.04  
Inicio arrow Artigos arrow Fazendo backup com zfs send / zfs receive via ssh
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


Fazendo backup com zfs send / zfs receive via ssh PDF Imprimir E-mail
Por Fernando Buzon Macedo   
10/11/2008
ZFSFiz um pequeno script pra otimizar o processo de backup e manutenção de snapshots em sistema de arquivos zfs, espero que seja útil.

O script começa com alguns macros que informam:

dias="10" (Snapshots com mais de 10 dias no caso serão removidos)
tmp="/tmp" (Não quis chamar o 'zfs list' toda hora pq demora, preferi usar arquivo temporario.)
logdir="/var/log/snap" (arquivo onde serão salvos os logs)

nomepool="prefeitura" (esse é o nome do pool que eu vou trabalhar no servidor de produção)

Também tem essa opção de backup, caso esteja como 'enable' ele vai incrementar os snapshots gerados em um servidor de backup via ssh, só que vc deve usar o acesso ssh entre o servidor de produção e o que receberá o backup com chaves, percebam que eu não uso senha. Caso não esteja enable o script servirá apenas pra gerar novos snapshots e destruir os antigos.

backup="enable"
bkphost="192.168.0.2"

bkppool="backup" (Nome do pool no servidor backup, ja deve estar criado!)      
sshport="2222"         
sshuser="root" 
        

Obs.: O script na verdade é meio burrão, vou explicar... rs

Caso ja tenha snapshots no seu pool e só agora vai passar a utilizar um servidor de backup, o script vai ver que vc ja tem snapshots criados no seu servidor de produção e ja vai pensar que esses snapshots também existam no servidor de backup, sendo assim vai tentar incrementa-los e não vai conseguir, vc, pra não ter trabalho, teria que destruir todos os snapshots do servidor de produção pra que ambos trabalhem em sincronia.

Sarrafo né? mas é assim... rs

 

Segue o script:

Grande abraço a todos!

 

Inicio--------------------------------------------------------------------------------------------------------------------------------------------

#!/bin/sh                                    

dias="10"
tmp="/tmp"
logdir="/var/log/snap"

nomepool="prefeitura"

backup="enable"
bkphost="192.168.0.2"
bkppool="backup"       
sshport="2222"         
sshuser="root"         


#######################################################################################
hoje=`date | awk '{print $3"-"$2}'`                                                    
epoch=`date +%s`                                                                       

hora=`date | awk '{print $4}'`
echo "Inicio $hoje ( $hora )" > $logdir/$hoje.log
echo "" >> $logdir/$hoje.log                     

zfs list -t filesystem > $tmp/zfslist
zfs list -t snapshot > $tmp/snapshotlist

qtd_lista=`cat -n $tmp/zfslist | sed -n '/ /h; $ {x;p;}' | awk '{print $1}'`

b='2'
while [ $b -le $qtd_lista ]; do

pool=`sed "$b,$b!d" $tmp/zfslist | awk '{print $1}'`

#################
if test "$pool" != ""; then

  teste=`grep $pool@ $tmp/snapshotlist`
  if test "$teste" != ""; then        

    seg=`expr $dias '*' 60 '*' 60 '*' 24`
    comp=`expr $epoch - $seg`           

    total=`grep $pool@ $tmp/snapshotlist | cat -n | sed -n '/ /h; $ {x;p;}' | awk '{print $1}'`

    a='1'
    while [ $a -le $total ]; do

      ep_snap=`grep $pool@ $tmp/snapshotlist | sed "$a,$a!d" | awk '{print $1}' | awk -F '@' '{print $2}' | awk -F '_' '{print $2}'`

      if test "$ep_snap" -lt "$comp"; then
        snap=`grep $pool $tmp/snapshotlist | sed "$a,$a!d" | awk '{print $1}'`
        zfs destroy $snap > /dev/null                                        
        echo "Destruido snapshot local $snap" >> $logdir/$hoje.log           
        if test "$backup" = "enable"; then                                   
          destsnap=`echo $snap | sed "s/$nomepool\//$bkppool\//g"`           
          echo "Destruindo snapshot remoto $destsnap em $bkphost (mais de $dias)" >> $logdir/$hoje.log
          ssh -p $sshport $sshuser@$bkphost zfs destroy $destsnap                                    
        fi                                                                                           
      fi                                                                                             

      a=`expr $a + 1`
    done

    a=`expr $a - 1`

    zfs snapshot $pool@"$hoje"_$epoch > /dev/null
    echo "Criado snapshot $pool@\"$hoje\"_$epoch" >> $logdir/$hoje.log

    if test "$backup" = "enable"; then
      if test "$pool" != "$nomepool"; then
        ultimosnap=`grep $pool $tmp/snapshotlist | sed "$a,$a!d" | awk '{print $1}' | awk -F '@' '{print $2}'`
        npool=`grep $pool@ $tmp/snapshotlist | sed "$a,$a!d" | awk '{print $1}' | awk -F '@' '{print $1}' | sed "s/$nomepool\///"`
        echo "Incrementando backup $pool@$ultimosnap com $pool@\"$hoje\"_$epoch em $bkphost $bkppool/$npool" >> $logdir/$hoje.log
        zfs send -i $ultimosnap $pool@"$hoje"_$epoch | ssh -p $sshport $sshuser@$bkphost zfs recv -F $bkppool/$npool >> $logdir/$hoje.log
      fi
    fi

  else

    zfs snapshot $pool@"$hoje"_$epoch > /dev/null
    echo "Criado snapshot $pool@\"$hoje\"_$epoch" >> $logdir/$hoje.log

    if test "$backup" = "enable"; then
      if test "$pool" != "$nomepool"; then
        npool=`echo $pool | sed "s/$nomepool\///"`
        echo "Enviando 1o. backup de $pool@\"$hoje\"_$epoch para $bkphost $bkppool/$npool" >> $logdir/$hoje.log
        zfs send $pool@"$hoje"_$epoch | ssh -p $sshport $sshuser@$bkphost zfs recv $bkppool/$npool
      fi
    fi

  fi

else
  echo "Cade os pools?"
  echo "Cade os pools?" > $logdir/$hoje.log
fi

#################

b=`expr $b + 1`
done

hora=`date | awk '{print $4}'`
echo "" >> $logdir/$hoje.log
echo "Fim $hoje ( $hora )" >> $logdir/$hoje.log

fim---------------------------------------------------------------------------------------------------------------------------------------------- 

 

"O PUNK NUNCA MORRE!"

Comentrios
Por Renato em 10/11/2008 17:58:08
Cara voc no poderia postar algo sobre a implementao do zfs. 
 
Como voc esta usando o zfs raidz ou pool ? 
 
Pf mada umas dicas ai para o pessoal que ta aprendendo ou querendo aprender + sobre o zfs
Por punk em 11/11/2008 11:20:25
Ento Renato, me desculpe pela falta de informao, minha inteno nem foi falar do zfs em si. 
At pensei em escrever alguma coisa pra te ajudar, mas acho que vc vai aproveitar mais dando uma lida na documentao da prpria sun, est em portugus: 
 
http://docs.sun.com/app/docs/doc/820-0447/zfsover-1?l=es&a=view 
 
O ZFS ainda est em desenvolvimento no FreeBSD e por isso nem todos os recursos que vc vai encontrar na documentao da sun so aplicveis no FreeBSD, mas o bsico o bsico e com uma lida nessa documentao vc ja vai entender como funciona. 
 
O andamento do desenvolvimento do ZFS no FreeBSD vc pode acompanhar nesse link: 
 
http://wiki.freebsd.org/ZFS 
 
Particularmente o que me faz mais falta e estou ansioso pra que concluam logo o suporte a acls. 
 
E tambm tem mais esse link que fala sobre uns \"ajustes\" que vc pode fazer no FreeBSD para que o ZFS trabalhe melhor: 
 
http://wiki.freebsd.org/ZFSTuningGuide 
 
Eu uso zfs e por enquanto ta filzinho, vou continuar usando! 
Faa uns testes e tire suas prprias concluses, se precisar de alguma ajuda me da um toque, o que tiver no meu alcance e conhecimento um prazer ajudar. 
 
abs.
Por Renato em 11/11/2008 17:25:18
Valeu Muito obrigado pela ateo e pelos links. 
Eu no tinha achado em portugus ainda, j vi alguns sites falando sobre o zfs e algumas implementaes mas so bem pobres em teoria e eu no sou f de ir implementado coisas sem saber de todos os detalhes para no cair em armadilhas 
futuras. 
 
Obrigado e um grande abrao
PJMYVNOrKxhWJf
Por Kailan em 27/10/2011 17:25:50
Halleujlah! I needed this—you're my savior.
snapshot
Por fbio holliday em 09/04/2013 15:13:00
Ol boa tarde, sou novo no zfs e estou me aventurando nesta buscar por conhecimento dese filesystem, e estou gostando muito.. Minha duvida a seguinte... Preparei a unidade, crei o poll, crie o zfs, e depois creie o snapshot do volumo criado... mas no sei por que, mas no consta nada dentro so snapshot criado.. j enviei dados pro volume, j alterei.. e mesmo assim nada de conter algo dentro.. poderia me d esta fora? meu skype : fabio holliday


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

Cdigo:* Code

ltima Atualizao ( 21/11/2008 )
 
< Anterior   Prximo >
FUG-BR - Espalhando BSD
Dicas Rpidas:
Quer saber todos os arquivos que um dado port instalou? Use pkg_info -L <nome do port>. Quer reler a mensagem de pós-instalação de um port já instalado? Use pkg_info -D <nome do port>. Quer consultar informações de um port sem precisar mencionar seu nome e versão exatamente como registrados? Use pkg_info -x <expressao>, por exemplo, pkg_info -L -x perl
 






Wallpapers
Sua Opiniao
Online:
Ns temos 16 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

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