Presetup -------- [root@zimbra ~]# mkdir /opt/backups/zmigrate [root@zimbra ~]# chown zimbra.zimbra /opt/backups/zmigrate [root@zimbra ~]# su - zimbra Find All Domain ---------------- zimbra@zimbra:~$ cd /opt/backups/zmigrate zimbra@zimbra:/opt/backups/zmigrate$ zmprov gad > domains.txt Find all admin accounts ------------------------ zimbra@zimbra:/opt/backups/zmigrate$ zmprov gaaa > admins.txt Find all email accounts ----------------------- zimbra@zimbra:/opt/backups/zmigrate$ zmprov -l gaa > emails.txt Get all distribution lists -------------------------- zimbra@zimbra:/opt/backups/zmigrate$ zmprov gadl > distributinlist.txt Get all members in distribution lists ------------------------------------- mkdir /opt/backups/zmigrate/distributinlist_members for i in `cat /opt/backups/zmigrate/distributinlist.txt`; do zmprov gdlm $i > /opt/backups/zmigrate/distributinlist_members/$i.txt ;echo "$i"; done Jika didalam folder /opt script nya jadi begini : ------------------------------------------------- for i in `cat /opt/backups/zmigrate/distributinlist.txt`; do zmprov gdlm $i > /opt/backups/zmigrate/distributinlist_members/$i.txt ;echo "$i"; done Find all email account’s passwords ----------------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir userpass for i in `cat emails.txt`; do zmprov -l ga $i userPassword | grep userPassword: | awk '{ print $2}' > userpass/$i.shadow; done Find All Mail Forwarding zimbraPrefMailForwardingAddress -------------------------------------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir forwarding for i in `cat emails.txt`; do zmprov -l ga $i zimbraPrefMailForwardingAddress | grep zimbraPrefMailForwardingAddress: | awk '{ print $2}' > forwarding/$i.forward; done zimbra@zimbra:/opt/backups/zmigrate$ find forwarding/ -type f -empty | xargs -n1 rm -v Backup all user names, Display names and Given Names ----------------------------------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir userdata zimbra@zimbra:/opt/backups/zmigrate$ for i in `cat emails.txt`; do zmprov ga $i | grep -i Name: > userdata/$i.txt ; done Backup All Mailbox Email ------------------------- zimbra@zimbra:/opt/backups/zmigrate$ for email in `cat /opt/backups/zmigrate/emails.txt`; do zmmailbox -z -m $email getRestURL '/?fmt=tgz' > $email.tgz ; echo $email ; done Backup alias -------------------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir -p alias/ zimbra@zimbra:/opt/backups/zmigrate$ for i in `cat emails.txt`; do zmprov ga $i | grep zimbraMailAlias |awk '{print $2}' > alias/$i.txt ;echo $i ;done zimbra@zimbra:/opt/backups/zmigrate$ find alias/ -type f -empty | xargs -n1 rm -v Backup all email signatures ---------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir signature for i in `cat emails.txt`; do zmprov ga $i zimbraPrefMailSignatureHTML > /tmp/signature; sed -i -e "1d" /tmp/signature ; sed 's/zimbraPrefMailSignatureHTML: //g' /tmp/signature > signatures/$i.signature ; rm -rf /tmp/signature; `zmprov ga $i zimbraSignatureName > /tmp/name` ; sed -i -e "1d" /tmp/name ; sed 's/zimbraSignatureName: //g' /tmp/name > signatures/$i.name ; rm -rf /tmp/name ; done Backup all email account filters --------------------------------- zimbra@zimbra:/opt/backups/zmigrate$ mkdir filter/ for i in `cat emails.txt`; do zmprov ga $i zimbraMailSieveScript > /tmp/filter sed -i -e "1d" /tmp/filter sed 's/zimbraMailSieveScript: //g' /tmp/filter > filter/$i.filter rm -f /tmp/filter echo "Filter downloaded for .... $i" done Rsync folder to new server -------------------------- /opt/backups/zmigrate – Have all the backups stored /opt/backups/zmigrate/domains.txt – Contains the domains names /opt/backups/zmigrate/emails.txt – Contains the list of email accounts /opt/backups/zmigrate/distributinlist.txt – Contains the distribution lists /opt/backups/zmigrate/distributinlist_members – Contains the members in each of your distributions /opt/backups/zmigrate/userpass – Contains the encrypted password of your email accounts /opt/backups/zmigrate/userdata – containts the email accounts user informations /opt/backups/zmigrate/alias – Contains all the aliases of your email accounts ---------------- ON New SERVER ---------------- root@newserver # rsync -avp -e 'ssh -p 22' root@old-server-ip:/opt/backups/zmigrate /backups/ [root@zimbra ~]# su - zimbra Restore all domains ------------------- [zimbra@zimbra zmigrate]$ for i in `cat /opt/backups/zmigrate/domains.txt `; do zmprov cd $i zimbraAuthMech zimbra ;echo $i ;done Create email accounts and set the old password ---------------------------------------------- #!/bin/bash #Scrit for creating the email accounts createacct.sh USERPASS="/opt/backups/zmigrate/userpass" USERDDATA="/opt/backups/zmigrate/userdata" USERS="/opt/backups/zmigrate/emails.txt" for i in `cat $USERS` do givenName=$(grep givenName: $USERDDATA/$i.txt | cut -d ":" -f2) displayName=$(grep displayName: $USERDDATA/$i.txt | cut -d ":" -f2) shadowpass=$(cat $USERPASS/$i.shadow) tmpPass="CHANGEme" zmprov ca $i CHANGEme cn "$givenName" displayName "$displayName" givenName "$givenName" zmprov ma $i userPassword "$shadowpass" done Restore Mailbox Email ----------------------- [zimbra@zimbra zmigrate]$ for i in `cat /opt/backups/zmigrate/emails.txt`; do zmmailbox -z -m $i postRestURL "/?fmt=tgz&resolve=skip" /opt/backups/zmigrate/$i.tgz ; echo "$i -- finished "; done Note: If any error like this “ERROR: zclient.IO_ERROR (Read timed out) (cause: java.net.SocketTimeoutException Read timed out”. Solution is add parameter -t 0. for i in `cat /opt/backups/zmigrate/emails.txt`; do zmmailbox -z -m -t 0 $i postRestURL "/?fmt=tgz&resolve=skip" /opt/backups/zmigrate/$i.tgz ; echo "$i -- finished "; done Restore distribution lists -------------------------- [zimbra@zimbra zmigrate]$ for i in `cat distributinlist.txt`; do zmprov cdl $i ; echo "$i -- done " ; done Restore the Member distribution lists ------------------------------------- [zimbra@zimbra zmigrate]$ cat restoredist.sh #!/bin/bash # add all memebers to each of these distribution lists for i in `cat distributinlist.txt` do for j in `grep -v '#' distributinlist_members/$i.txt |grep '@'` do zmprov adlm $i $j echo " $j member has been added to list $i" done done Restore Alias accounts ---------------------- [zimbra@zimbra zmigrate]$ cat restorealias.sh #!/bin/bash for i in `cat /opt/backups/zmigrate/emails.txt` do if [ -f "alias/$i.txt" ]; then for j in `grep '@' /opt/backups/zmigrate/alias/$i.txt` do zmprov aaa $i $j echo "$i HAS ALIAS $j --- Restored" done fi done Restore Signature ---------------------- [zimbra@zimbra zmigrate]$ cat signature.sh #!/bin/bash for i in `cat emails.txt`; do zmprov ma $i zimbraSignatureName "`cat signatures/$i.name`"; zmprov ma $i zimbraPrefMailSignatureHTML "`cat signatures/$i.signature`"; zmprov ga $i zimbraSignatureId > /tmp/firmaid; sed -i -e "1d" /tmp/firmaid; firmaid=`sed 's/zimbraSignatureId: //g' /tmp/firmaid`; zmprov ma $i zimbraPrefDefaultSignatureId "$firmaid"; zmprov ma $i zimbraPrefForwardReplySignatureId "$firmaid"; rm -rf /tmp/firmaid; echo $i "done!"; done Restore Mail Forwarding ----------------------- [zimbra@zimbra zmigrate]$ cat mailforward.sh #!/bin/bash for i in `cat emails.txt`; do zmprov ma $i zimbraPrefMailForwardingAddress "`cat forwarding/$i.forward`"; echo "Forward Restore for account ... $i"; done