Chuyển dữ liệu Zimbra sang máy chủ mới

0
2587

Việc cập nhật bản vá lỗi cho các phiên bản zimbra cũ có thể gây lỗi khó khắc phục và gây gián đoạn dịch vụ.
Đối với server zimbra đã bị hack thì việc khắc phục và cập nhật cũng rất khó khăn
Vì vậy việc lựa chọn cài đặt 1 server zimbra hoàn toàn mới và đồng bộ dữ liệu từ server zimbra cũ vẫn là phương án tối ưu nhất .

Server mail cũ : cài đặt zimbra 8.6.0
Server mail mới : cài đặt zimbra 8.8.15
Thực hiện di chuyển toàn bộ dữ liệu từ zimbra 8.6.0 sang zimbra 8.8.15
Yêu cầu : hạn chế downtime nhất có thể

 

1. Thao tác trên server cũ

 

Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”

1.2 Tạo thư mục chứa dữ liệu backup

# mkdir /migration
# mkdir -p /migration/zimbra
# chmod 777 /migration
# chmod 777 /migration/zimbra
# chown zimbra:zimbra /migration
# chown zimbra:zimbra /migration/zimbra

1.2 Xuất toàn bộ tên miền hiện có trên server mail cũ

# su - zimbra
# cd /migration/zimbra
# mkdir domains
# cd domains
# zmprov gad | tee -a domains.txt  (Xuất toàn bộ tên miền và lưu vào domains.txt)

1.3 Xuất toàn bộ tài khoản mail

# cd /migration/zimbra
# mkdir accounts
# cd accounts
# zmprov gaaa | tee -a admins.txt  ##Xuất tài khoản quản trị và lưu vào admins.txt

 

Xuất toàn bộ user thường và lưu vào users.txt

zmprov -l gaa | tee -a users.txt

###Nếu chỉ xuất user active thì dùng lệnh bên dưới:

zmprov -l sa "(zimbraAccountStatus=active)" | tee -a users.txt

1.4 Xuất thông tin user

# cd /migration/zimbra
# mkdir account_details
# cd account_details
# for user in `cat ../accounts/users.txt`; do zmprov ga $user  | grep -i Name: | tee -a $user.txt ; done

Nếu câu lệnh trên không hoạt động đúng, bạn sẽ cần gõ thủ công bằng tay

Bạn sẽ thấy màn hình xuất ra font chữ bị lỗi ( nếu là tiếng việt có dấu), tuy nhiên không cần bận tâm .

1.5 Xuất mật khẩu user

# cd /migration/zimbra
# mkdir passwords
# cd passwords
# for user in `cat ../accounts/users.txt`; do zmprov -l ga $user userPassword | grep userPassword: | awk '{ print $2}' | tee -a $user.shadow; done

1.6 Xuất distribution lists

# cd /migration/zimbra
# mkdir distribution_lists
# cd distribution_lists
# zmprov gadl | tee -a distribution_lists.txt
# for list in `cat distribution_lists.txt`; do zmprov gdlm $list > $list.txt ;echo "$list"; done

1.7 Xuất aliases

# cd /migration/zimbra
# mkdir aliases
# cd aliases
# for user in `cat ../accounts/users.txt`; do zmprov ga $user | grep zimbraMailAlias | awk '{print $2}' | tee -a $user.txt ;echo $i ;done
# find . -type f -empty | xargs -n1 rm -v    (do không phải user nào cũng có aliase , vì vậy sẽ cần xoá các file .txt không chứa dữ liệu )

 

2. Thao tác trên server mới

( Đảm bảo rẳng bạn đã rsync toàn bộ các thư mục dữ liệu vừa xuất trên server cũ sang)

Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”

2.1 Restore domain

Lưu ý : nếu trên máy chủ mới, bạn đã tạo domain thì có thể bỏ qua bước này

# su zimbra
# cd /migration/zimbra/domains
# for domain in `cat domains.txt `; do zmprov cd $domain zimbraAuthMech zimbra ;echo $domain ;done

2.2 Restore user & password

su zimbra
# cd /migration/zimbra
# mkdir scripts
# cd scripts
# vim restore_accounts.sh ##tạo script

Nội dung script :

#!/bin/bash 
PASSWDS="../passwords" 
ACCOUNT_DETAILS="../account_details" 
USERS="../accounts/users.txt" 
for i in `cat $USERS` 
do 
export LC_ALL=vi_VN.utf8    ##Giúp import ký tự Tiếng Việt không bị lỗi font
givenName=$(grep givenName: $ACCOUNT_DETAILS/$i.txt | cut -d ":" -f2) 
displayName=$(grep displayName: $ACCOUNT_DETAILS/$i.txt | cut -d ":" -f2) 
shadowpass=$(cat $PASSWDS/$i.shadow) 
zmprov ca $i "TeMpPa55^()" cn "$givenName" displayName "$displayName" givenName "$givenName" 
zmprov ma $i userPassword "$shadowpass" 
done

Phân quyền và thực thi script :

# chmod 777 restore_accounts.sh
# ./restore_accounts.sh

Lưu ý :Sau khi restore mật khẩu admin@ , sẽ là mật khẩu ở máy chủ cũ.

2.3 Restore distribution lists

# cd /migration/zimbra
# for lists in `cat distribution_lists/distribution_lists.txt`; do zmprov cdl distribution_lists/$lists ; echo "$lists -- done " ; done
# cd /migration/zimbra/distribution_lists
# vim restore_dist_lists.sh  ##tạo script

Nội dung script :

#!/bin/bash
for list in `cat distribution_lists.txt`
do
    for mbmr in `grep -v '#' ./$list.txt | grep '@'`
    do
        zmprov adlm $list $mbmr
        echo " $mbmr has been added to $list"
    done
done

Phân quyền và thực thi:

# chmod 777 restore_dist_lists.sh
# ./restore_dist_lists.sh

2.4 Restore aliases

# cd /migration/zimbra/aliases
# vim restore_aliases.sh  ##tạo script

Nội dung script :

#!/bin/bash
echo "Processing User accounts"
for user in `cat ../accounts/users.txt`
do
    echo $user
    if [ -f "./$user.txt" ]; then
        for alias in `grep '@' ./$user.txt`
        do
            zmprov aaa $user $alias
            echo "$user ALIAS $alias - Restored"
        done
     fi
done

echo "Processing Admin accounts"
for user in `cat ../accounts/admins.txt`
do
    echo $user
    if [ -f "./$user.txt" ]; then
        for alias in `grep '@' ./$user.txt`
        do
            zmprov aaa $user $alias
            echo "$user ALIAS $alias - Restored"
        done
    fi
done

Phân quyền và thực thi :

# chmod 777 restore_aliases.sh
# ./restore_aliases.sh

Tiến hành khởi động lại dịch vụ :

# zmcontrol restart

Tới đây , bạn có thể trỏ lại DNS , cấu hình DKIM…. sang IP của server mới
Người dùng lúc này sẽ có thể gửi và nhận mail trên server mới
Đây mới chỉ là bước đồng bộ tài khoản , vì vậy nếu user muốn truy cập và xem dữ liệu email , có thể truy cập server mail cũ theo địa chỉ https://IP-servermail cũ

3. Migrating mailbox data

Bước này sẽ mất khá nhiều thời gian tuỳ thuộc vào dữ liệu email của bạn
Để thao tác không bị ngắt quãng do mất mạng, bạn nên thực hiện trong chế độ “screen”

3.1 Tại máy chủ mail cũ 

3.1.1 Xuất dữ liệu hòm thư người dùng:

# su - zimbra
# cd /migration/zimbra 
# mkdir mailbox_data
# cd mailbox_data
# for user in `cat ../accounts/users.txt`; do echo "Exporting mailbox $user" ; zmmailbox -z -m $user getRestURL '/?fmt=tgz' > ./$user.tgz ; done

3.1.2 Xuất dữ liệu bộ lọc mail

# mkdir /migration/zimbra/filters
# cd /migration/zimbra/filters
# vim export_filters.sh  ##tạo script

Nội dung script :

#!/bin/bash

clear

echo "Retrieve zimbra user name..."

USERS=`su - zimbra -c 'zmprov -l gaa | sort'`;

for ACCOUNT in $USERS; do
NAME=`echo $ACCOUNT`;
filter=`su - zimbra -c "zmprov ga $NAME zimbraMailSieveScript" > /tmp/$NAME`

sed -i -e "1d" /tmp/$NAME
sed 's/zimbraMailSieveScript: //g' /tmp/$NAME > /migration/zimbra/filters/$NAME
rm /tmp/$NAME
echo "Export filter for $NAME..."
done
echo "All filter has been export successfully"
Phân quyền và thực thi :

# chmod 777 export_filters.sh 
# ./export_filters.sh   ##Lưu ý : thực thi với quyền user root

 

3.2 Tại mảy chủ mới

Đảm bảo rằng bạn đã rsync dữ liệu mailbox_data từ máy chủ cũ sang

3.2.1 Nhập dữ liệu mailbox

# su zimbra
# cd /migration/zimbra/mailbox_data
# for mailbox in `cat ../accounts/users.txt`; do zmmailbox -z -m $mailbox postRestURL "/?fmt=tgz&resolve=skip" ./$mailbox.tgz ; echo "$mailbox - done "; done

3.2.2 Nhập dữ liệu bộ lọc

# cd /migration/zimbra/filter 
# vim import_filters.sh  ##tạo script

 

Nội dung script:

for file in /migration/zimbra/filters/*
do
StrFilter=`cat "$file"`
Acc=`echo $file | cut -d "/" -f5`
su - zimbra -c "zmprov ma $Acc zimbraMailSieveScript '$StrFilter'"
echo "Process filter $Acc"
done
echo "All filter has been import successfully"

Phân quyền và thực thi

# chmod 777 import_filters.sh
# ./import_filters.sh

4. Đồng bộ lại trạng thái user

Đối với các tài khoản user ở trạng thái Locked , khi đồng bộ sẽ đều chuyển thành Active
Để khắc phục bạn thao tác thêm các bước sau :

4.1 Trên máy chủ cũ

Xuất list user đang trong trạng thái Locked :

# cd /migration/zimbra
# mkdir account_status
# cd account_status
# zmprov -l sa “(zimbraAccountStatus=locked)” > user_locked.txt

4.2 Trên máy chủ mới

Đảm bảo rằng bạn đã rsync dữ liệu /migration/zimbra/account_status sang

# cd /migration/zimbra/account_status
# for user in $(cat user_locked.txt) ; do zmprov modifyAccount $user zimbraAccountStatus locked ; done

Hoàn tất quá trình đồng bộ dữ liệu , tiến hành khởi động lại dịch vụ, sau đó kiểm tra hoạt động của server mới

# su zimbra
# zmcontrol restart

Leave a Reply

avatar
  Subscribe  
Notify of