HOT Backup and HOT Restore

Revision as of 20:05, 15 December 2009 by Rubão (talk | contribs) (New page: = zmbkpose = by Rubens Alonso Filho <rubens@4linux.com.br> O zmbkpose é uma ferramenta desenvolvida em shell script que faz hot backup e hot restore das contas de usuários armazenadas ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

zmbkpose

by Rubens Alonso Filho <rubens@4linux.com.br>

O zmbkpose é uma ferramenta desenvolvida em shell script que faz hot backup e hot restore das contas de usuários armazenadas no Zimbra Collaboration Suite Opensource.

Esta ferramenta NÃO FAZ disaster recovery.

Ela pode rodar a partir de qualquer host da rede, podendo ser configurada em um servidor de backups já existente.

A ferramenta faz os backups e restores através dos protocolos LDAP e HTTP (SOAP).

Ela foi concebida quando a Zimbra expôs na guia de preferências do usuário a opção de exportar a conta (release 5.0.12). Com o objetivo de oferecer um mecanismo de arquivamento, semelhante ao existente no Outlook, permitindo que os usuários executem seus próprios backups.

A partir daquele ponto ficou evidente para mim que era só uma questão de entender o mecanismo e automatizá-lo em um script.

Além dos conteúdo das caixas-postais (e-mails, contatos, compromissos, tarefas, documentos e arquivos), o script também faz o backup de todos os atributos da conta presente no LDAP.

Dessa forma, foi possível fazer backups completos que podem restaurar até mesmo contas apagadas, além de recuperar atributos modificados, como a senha.

Por uma questão de familiaridade, o zmbkpose também cria sessões, que são diretórios com todo o conteúdo becapeado. Estes diretórios são prefixados com "full-" ou "inc-", e um arquivo chamado sessions.txt cataloga todas as sessões.

Porém não há compromisso ou relação direta e inequívoca com a ferramenta de backup nativa do ZCS NE. Por isso, consulte atenciosamente o help do zmbkpose, assim como as documentações que serão produzidas.

Na versão 1.0.0 do zmbkpose, a ferramenta oferece as seguintes opções:

 * Backup full de todas as contas
 * Unordered List Item
 * Backup full de uma ou mais contas informadas na linha de comandos
 * Listar as sessões executadas
 * Restaura a partir de uma sessão especificada o conteúdo de uma ou mais contas
 * Restaura a partir de uma sessão especificada o perfil e configurações de uma ou mais contas
 * Restaura completamente uma conta excluída, a partir da sessão mais antiga até a sessão mais recente

Para utilizar o script é preciso:

 - Instalar os pacotes ldap-utils e curl
 - Criar o diretório /etc/zmbkpose
 - Configurar o arquivo /etc/zmbkpose/zmbkpose.conf, observando atentamente cada item (pode ser necessário criar usuário, diretório, e conhecer credenciais de um servidor ZCS remoto)
 - Crie o script a partir do código abaixo, concedendo permissão de execução. Lembre-se que ele só pode ser executado pelo usuário que você definir no conf.
 - Para conhecer a sintaxe de utilização, digite simplesmente "zmbkpose"


Script e arquivo de configuração do zmbkpose

/etc/zmbkpose/zmbkpose.conf

  1. This file is part of zmbkpose.
  1. zmbkopse is free software: you can redistribute it and/or modify
  2. it under the terms of the GNU General Public License as published by
  3. the Free Software Foundation, either version 3 of the License, or
  4. (at your option) any later version.
  1. zmbkopse is distributed in the hope that it will be useful,
  2. but WITHOUT ANY WARRANTY; without even the implied warranty of
  3. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4. GNU General Public License for more details.
  1. You should have received a copy of the GNU General Public License
  2. along with Foobar. If not, see <http://www.gnu.org/licenses/>


  1. Arquivo de configuração do script de backup para Zimbra Opensource Edition
  2. Linhas iniciadas com # serao descartadas
  3. Os valores devem ser preenchido sem espacos, aspas, ou caracteres especiais
  1. Usuario com privilegios de execucao do script e leitura e gravacao no diretorio de trabalho

BACKUPUSER=

  1. Diretorio de trabalho onde serao criadas as sessoes temporarias e definitivas contendo conteudo e atributos dos usuarios
  2. # Conteudo sensivel. O diretório deve ter acesso restrito ao BACKUPUSER

WORKDIR=

  1. Deve ser preenchido com o endereco de e-mail de algum usuario administrador global, possivelmente admin@exemplo.com.br
  2. DICA: Caso a conta de administrador seja desconhecida ou inexistente, sera necessario criar uma em linha de comandos no servidor Zimbra
  3. # zmprov ca novoadmin@exemplo.com "senha"
  4. # zmprov ma novoadmin@exemplo.com zimbraIsAdminAccount TRUE

ADMINUSER=

  1. Deve ser preenchido com a senha do usuario administrador definido em ADMINUSER

ADMINPASS=

  1. Dever ser preenchido com o nome ou endereço IP do servidor LDAP MASTER

LDAPMASTERSERVER=

  1. Deve ser preenchido com o valor da chave zimbra_ldap_userdn
  2. DICA: Para obter esse valor, no servidor Zimbra execute
  3. # zmlocalconfig zimbra_ldap_userdn

LDAPZIMBRADN=

  1. Deve ser preenchido com o valor da chave zimbra_ldap_password
  2. DICA: Para obter esse valor, no servidor Zimbra execute
  3. # zmlocalconfig -s zimbra_ldap_password

LDAPZIMBRAPASS=

  1. Vai indicar a localização do arquivo de log dos backups e restore

LOGFILE=


/usr/local/bin/zmbkpose

  1. !/bin/bash
  2. zmbkpose
  3. Bash script to hot backup and hot restore Zimbra Collaboration Suite Opensource
  4. Copyright (C) 2007 Rubens Alonso Filho <rubens@harv.com.br>
  5. This program is free software; you can redistribute it and/or
  6. modify it under the terms of version 2 of the GNU General Public
  7. License as published by the Free Software Foundation.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  15. USA
  16. Version: 1.0.0


show_help () { echo "Uses:

    zmbkpose -f 	

Starts a full backup of all accounts.

    zmbkpose -f mail1,mail2,...,mailn

Starts a full backup of any account specified at command line.

    zmbkpose -i 	

Starts an incremental backup of all accounts. It needs a previous full backup.

    zmbkpose -i mail1,mail2,...,mailn	

Starts an incremental backup of any account specified at command line. A full account backup will run if it doesnt have any previous full backup.

    zmbkpose -l

Lists all backup sessions done.

    zmbkpose -r mail1,mail2,...,mailn session_name

Restore all contents (mail, contacts, appointments...) to any account from session specifieds at command line. If session is not specified, all sessions will be restored from oldest to newest session. It may take longer.

    zmbkpose -restoreAccount mail1,mail2,...,mailn

Restore deleted accounts back to directory and all of its contents from oldest to newest session. It may take longer.

    zmbkpose -restoreAccount mail1,mail2,...,mailn --LDAPOnly session_name

Restore only account attributes, like password, class of service, etc; from specified session. HINT: It may be necessary to flush server's cache to apply imediatelly recovered attributes. So at Zimbra server, run: zmprov fc account account_name "

exit 0 }

all_accounts_backup () { ACCOUNTSLIST=$(mktemp) $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(objectclass=zimbraAccount)" zimbraMailDeliveryAddress zimbraMailHost | grep ^zimbraMail | awk '{print $2}' > "$ACCOUNTSLIST" SESSION="full-"$(date +%Y%m%d%H%M%S) echo "SESSION: $SESSION started at $(date)" >> $WORKDIR/sessions.txt TEMPDIR=$(mktemp -d $WORKDIR/XXXX) for MAIL in $(grep @ $ACCOUNTSLIST); do MAILHOST=$(grep -A1 $MAIL $ACCOUNTSLIST| grep -v @) $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(zimbraMailDeliveryAddress=$MAIL)" > $TEMPDIR/$MAIL.ldiff $(which curl) -k -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz > $TEMPDIR/$MAIL.tgz echo $SESSION:$MAIL:$(date +%m/%d/%y) >> $WORKDIR/sessions.txt done mv "$TEMPDIR" "$WORKDIR/$SESSION" && rm -rf "$TEMPDIR" echo "SESSION: $SESSION ended at $(date)" >> $WORKDIR/sessions.txt exit 0 }

all_accounts_incremental () { FULLSESSIONLABEL=$(grep "SESSION: full-" $WORKDIR/sessions.txt | tail -1 | awk '{print $2}') if ! [ -z "$FULLSESSIONLABEL" ]; then

       if ! [ -d "$WORKDIR/$FULLSESSIONLABEL" ]; then
               echo "$WORKDIR/$FULLSESSIONLABEL directory doesnt exist. Impossible to proceed."
               exit 0
       fi

else echo "No full backups found. Impossible to proceed." exit 0 fi INCFROM=$(grep INCFROM: $WORKDIR/sessions.txt | tail -1 | awk '{print $2}') ACCOUNTSLIST=$(mktemp) $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(objectclass=zimbraAccount)" zimbraMailDeliveryAddress zimbraMailHost | grep ^zimbraMail | awk '{print $2}' > "$ACCOUNTSLIST" SESSION="inc"-$(date +%Y%m%d%H%M%S) echo "SESSION: $SESSION started at $(date)" >> $WORKDIR/sessions.txt TEMPDIR=$(mktemp -d $WORKDIR/XXXX) for MAIL in $(grep @ $ACCOUNTSLIST); do EXISTFULL=$(grep $MAIL $WORKDIR/sessions.txt | grep ^full)

       if [ -z $EXISTFULL ]; then
       	echo "$MAIL doesnt have any previous full backup. Running now..."
               account_backup $MAIL
       else

INCFROM=$(grep $MAIL $WORKDIR/sessions.txt | grep -v ^WARN | tail -1 | awk -F: '{print $3}') if [ "$INCFROM" = "$(date +%m/%d/%y)" ]; then echo "WARN: $MAIL was already backed up today. Nothing to do." | tee -a $WORKDIR/sessions.txt else MAILHOST=$(grep -A1 $MAIL $ACCOUNTSLIST| grep -v @) $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(zimbraMailDeliveryAddress=$MAIL)" > $TEMPDIR/$MAIL.ldiff $(which curl) -k -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz\&query=after:\"$INCFROM\" > $TEMPDIR/$MAIL.tgz echo $SESSION:$MAIL:$(date +%m/%d/%y) >> $WORKDIR/sessions.txt fi fi done mv "$TEMPDIR" "$WORKDIR/$SESSION" && rm -rf "$TEMPDIR" echo "SESSION: $SESSION ended at $(date)" >> $WORKDIR/sessions.txt exit 0 }

account_backup () { if [ -z $SESSION ]; then SESSION="full-"$(date +%Y%m%d%H%M%S) echo "SESSION: $SESSION started at $(date)" >> $WORKDIR/sessions.txt TEMPDIR=$(mktemp -d $WORKDIR/XXXX) else SUBSESSION="$SESSION" SESSION="full-"$(date +%Y%m%d%H%M%S) fi K=1 while true; do MAIL=$(echo $1, | cut -d, -f$K) if [ -z $MAIL ]; then break fi $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(zimbraMailDeliveryAddress=$MAIL)" > $TEMPDIR/$MAIL.ldiff MAILHOST=$(grep ^zimbraMailHost $TEMPDIR/$MAIL.ldiff | awk '{print $2}') $(which curl) -k -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz > $TEMPDIR/$MAIL.tgz echo $SESSION:$MAIL:$(date +%m/%d/%y) >> $WORKDIR/sessions.txt ((K = K+1)) unset MAIL sleep 1 done if [ -z $SUBSESSION ]; then mv "$TEMPDIR" "$WORKDIR/$SESSION" && rm -rf "$TEMPDIR" echo "SESSION: $SESSION ended at $(date)" >> $WORKDIR/sessions.txt exit 0 else SESSION="$SUBSESSION" fi }

account_incremental () { SESSION="inc-"$(date +%Y%m%d%H%M%S) echo "SESSION: $SESSION started at $(date)" >> $WORKDIR/sessions.txt TEMPDIR=$(mktemp -d $WORKDIR/XXXX) K=1 while true; do MAIL=$(echo $1, | cut -d, -f$K) if [ -z $MAIL ]; then break else EXISTFULL=$(grep $MAIL $WORKDIR/sessions.txt | grep ^full) if [ -z $EXISTFULL ]; then echo " $MAIL doesnt have any previous full backup. Running now..." account_backup $MAIL ((K = K+1)) else $(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(zimbraMailDeliveryAddress=$MAIL)" > $TEMPDIR/$MAIL.ldiff INCFROM=$(grep $MAIL $WORKDIR/sessions.txt | grep -v ^WARN | tail -1 | awk -F: '{print $3}') if [ "$INCFROM" = "$(date +%m/%d/%y)" ]; then echo "WARN: $MAIL was already backed up today. Nothing to do." | tee -a $WORKDIR/sessions.txt ((K = K+1)) else MAILHOST=$(grep ^zimbraMailHost $TEMPDIR/$MAIL.ldiff | awk '{print $2}') $(which curl) -k -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz\&query=after:\"$INCFROM\" > $TEMPDIR/$MAIL.tgz echo $SESSION:$MAIL:$(date +%m/%d/%y) >> $WORKDIR/sessions.txt ((K = K+1)) fi fi fi unset MAIL done mv "$TEMPDIR" "$WORKDIR/$SESSION" && rm -rf "$TEMPDIR" echo "SESSION: $SESSION ended at $(date)" >> $WORKDIR/sessions.txt exit 0 }

list_sessions () { grep SESSION: $WORKDIR/sessions.txt| grep started | awk '{print $2}' exit 0 }

account_restore () { ACCOUNTBKPS=$(mktemp) K=1 while true; do

       MAIL=$(echo $1, | cut -d, -f$K)
       if [ -z $MAIL ]; then
               break
       fi

grep $MAIL $WORKDIR/sessions.txt | grep -v ^WARN: > $ACCOUNTBKPS if ! [ -s $ACCOUNTBKPS ]; then echo "$MAIL: No backups found. Impossible to restore" ((K = K+1)) else if [ -z $2 ]; then echo "Not Implemented." # Complete restore from oldest to newest ((K = K+1)) else ACCOUNTSESSION=$(grep $2 $WORKDIR/sessions.txt | tail -1 | awk '{print $2}') if [ -z $ACCOUNTSESSION ]; then echo "$MAIL: $2 session doesnt exists. Impossible to proceed..." break else ACCOUNTINSESSIO=$(grep $MAIL $ACCOUNTBKPS | grep $ACCOUNTSESSION) if [ -z $ACCOUNTINSESSIO ]; then echo "$MAIL not found in session $ACCOUNTSESSION. Impossible to restore."

       				((K = K+1))

else MAILHOST=$(grep ^zimbraMailHost $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}')

       				$(which curl) -k --data-binary @$WORKDIR/$ACCOUNTSESSION/$MAIL.tgz -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz
       				((K = K+1))

unset MAIL fi fi fi fi done exit 0 } LDAP_content_restore () { ACCOUNTBKPS=$(mktemp) K=1 while true; do

       MAIL=$(echo $1, | cut -d, -f$K)
       if [ -z $MAIL ]; then
               break

fi if [ -z $2 ]; then EXIST=$($(which ldapsearch) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -w $LDAPZIMBRAPASS -b -LLL "(&(objectclass=zimbraAccount)(zimbraMailDeliveryAddress=$MAIL))" uid) if ! [ -z "$EXIST" ]; then echo "$MAIL account exists. Run zmbkpose -r $MAIL session_name." ((K = K+1)) else grep $MAIL $WORKDIR/sessions.txt | grep -e ^inc- -e ^full- > $ACCOUNTBKPS if ! [ -s $ACCOUNTBKPS ]; then

       		        echo "$MAIL: No backups found. Impossible to restore"
               		((K = K+1))

else echo "Sessions found $(cat $ACCOUNTBKPS | awk -F: '{print $1}')" for ACCOUNTSESSION in $(cat $ACCOUNTBKPS | awk -F: '{print $1}'); do echo "Restoring from $ACCOUNTSESSION" MAILHOST=$(grep ^zimbraMailHost $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}') $(which ldapdelete) -r -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS $(grep ^dn: $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}') 2>/dev/null $(which ldapadd) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS -f $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff

       	        	        $(which curl) -k --data-binary @$WORKDIR/$ACCOUNTSESSION/$MAIL.tgz -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz

echo "$MAIL restored from $ACCOUNTSESSION" done ((K = K+1))

       	        	unset MAIL

fi fi else ACCOUNTSESSION=$(grep $2 $WORKDIR/sessions.txt | grep $MAIL | tail -1 | awk -F: '{print $1}') if [ -z $ACCOUNTSESSION ]; then

               	echo "$MAIL: Session $2 doesnt exist or not found. Impossible to restore..."
       	        ((K = K+1))
               else

USERDN=$(grep ^dn: $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}') $(which ldapdelete) -r -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS $USERDN $(which ldapadd) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS -f $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff echo "User profile and settings restored from $ACCOUNTSESSION"

       	        ((K = K+1))
      	        	unset MAIL

fi

       fi

done exit 0 }

  1. This option is not yet exposed at script's help cause it need more consistences so
  2. DO NOT USE IT AT A PRODUCTION ENVIRONMENT
  3. DeusMeAjude ()
  4. {
  5. for BKP in $(grep -e ^full- -e ^inc- $WORKDIR/sessions.txt); do
  6. ACCOUNTSESSION=$(echo $BKP | awk -F: '{print $1}')
  7. MAIL=$(echo $BKP | awk -F: '{print $2}')
  8. USERDN=$(grep ^dn: $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}')
  9. MAILHOST=$(grep ^zimbraMailHost $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff | awk '{print $2}')
  10. echo "Restaurando $MAIL"
  11. $(which ldapdelete) -r -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS $USERDN 2>/dev/null
  12. $(which ldapadd) -x -H $LDAPMASTERSERVER -D $LDAPZIMBRADN -c -w $LDAPZIMBRAPASS -f $WORKDIR/$ACCOUNTSESSION/$MAIL.ldiff
  13. $(which curl) -k --data-binary @$WORKDIR/$ACCOUNTSESSION/$MAIL.tgz -u $ADMINUSER:$ADMINPASS https://$MAILHOST:7071/home/$MAIL/?fmt=tgz
  14. echo "$MAIL restaurado"
  15. done
  16. exit 0
  17. }
  1. Loading config file

source /etc/zmbkpose/zmbkpose.conf

if ! [ -z "$BACKUPUSER" ]; then if [ "$(id -u)" != "$(id -u $BACKUPUSER)" ]; then echo "You must be $BACKUPUSER to run this script" exit 0 fi else echo "You must set BACKUPUSER" exit 0 fi

if ! [ -z "$WORKDIR" ]; then

       if ! [ -d "$WORKDIR" ]; then
               echo "$WORKDIR doesnt exist"
               exit 0
       fi

else

       echo "You must set WORKDIR"
       exit 0

fi

if [ -z "$ADMINUSER" ]; then

       echo "You must set ADMINUSER"
       exit 0

fi

if [ -z "$ADMINPASS" ]; then

       echo "You must set ADMINPASS"
       exit 0

fi

if [ -z "$LDAPMASTERSERVER" ]; then

       echo "You must set LDAPMASTERSERVER"
       exit 0

fi

if [ -z "$LDAPZIMBRADN" ]; then

       echo "You must set LDAPZIMBRADN"
       exit 0

fi

if [ -z "$LDAPZIMBRAPASS" ]; then

       echo "You must set LDAPZIMBRAPASS"
       exit 0

fi

if [ -z "$LOGFILE" ]; then

       echo "You must set LOGFILE"
       exit 0

fi

  1. Criticar os parametros passados na linha de comando

case "$1" in "-f" ) if [ -z "$2" ]; then all_accounts_backup else if [ -z "$3" ]; then account_backup $2 fi echo "Incorrect parameters $@. See help."

       	show_help

fi

"-i" ) if [ -z "$2" ]; then all_accounts_incremental else if [ -z "$3" ]; then account_incremental $2 fi echo "Incorrect parameters $@. See help."

       	show_help

fi

"-l" )

       if [ -z "$2" ]; then
               list_sessions

else

               echo "Incorrect parameters $@. See help."
               show_help

fi

"-r" )

       if [ -z "$2" ]; then
               echo "Incorrect parameters $@. See help."
               show_help

else if [ -z "$4" ]; then account_restore $2 $3 else

               	echo "Incorrect parameters $@. See help."

show_help fi fi

"-restoreAccount" )

       if [ -z "$2" ]; then
               echo "Incorrect parameters $@. See help."
               show_help

else if [ -z "$3" ]; then LDAP_content_restore $2 else if [ "$3" = "--LDAPOnly" ]; then LDAP_content_restore $2 $4 else echo "Incorrect parameters $@. See help." show_help fi fi fi

  1. "--DeusMeAjude" )
  2. if ! [ -z "$2" ]; then
  3. echo "Incorrect parameters $@. See help."
  4. show_help
  5. else
  6. DeusMeAjude
  7. fi
  8. ;;
  • )

echo "Incorrect parameters $@. See help." show_help

esac exit 0

Roadmap para o zmbkpose

Os seguintes itens já estão incluídos no roadmap para versões futuras

 * Integração com o KyaPanel: A instalação e configuração do zmbkpose será feita através da interface de administração do KyaPanel
 * Log de todos os eventos para o arquivo especificado
 * Possibilidade de definir a porta para o acesso HTTP(S) SOAP
 * Restore full: restaurar todas as contas automaticamente, sem precisar especificar
 * Listar o conteúdo de cada sessão
 * Permitir recuperar itens individualmente
 * Controle de ciclos: Permitir configurar um limite para os backups, com rotacionamento, evitando esgotamento do espaço em disco
Jump to: navigation, search