Sao lưu các thư mục, tập tin nội bộ với Unison

0
426
(Last Updated On: Th9 19, 2018)

Unison là công cụ đồng bộ hóa dữ liệu hoạt động trên nhiều nền tảng (Windows, Linux, OSX,…) và cho phép bạn đồng bộ hóa dữ liệu ngay cả giữa Windows và Linux với nhau. Đặc biệt Unison và miễn phí, khả năng tùy biến cao cho nên hôm nay mình muốn giới thiệu với các bạn cũng như cách cài đặt và sử dụng.

Trong khuôn khổ bài viết ngày hôm nay mình xin đề cập đến việc đồng bộ các tập tin và thư mục trong một máy chủ nội bộ. Có vẻ ý tưởng này hơi thừa thải nhưng nếu bạn nào đang tò mò trong vấn đề này các bạn có thể tham khảo. Hy vọng giúp ích được cho các bạn. Nếu các bạn muốn có thông tin nhiều hơn cũng như ủng hộ cho dự án Unison các bạn có thể truy cập trang web: https://www.cis.upenn.edu/~bcpierce/unison/.

Bây giờ chúng ta tiến hành cài đặt Unison trên máy chủ Ubuntu 16.04 qua PPA.

Đầu tiên chúng ta thêm repository Unison thông qua PPA:

add-apt-repository ppa:eugenesan/ppa

Tiếp tục cập nhật:

apt-get update

Bây giờ thì tiến hành cài đặt:

apt-get install unison

Sau khi cài đặt, bạn có thể kiểm tra và xem hướng dẫn cú pháp với dòng lệnh:

unison -help

Theo như mình nói ở trên, trong khuôn khổ của bài viết mình chỉ đề cập tới việc đồng bộ dữ liệu trong các thư mục nội bộ trong 1 hệ thống. Việc đồng bộ giữa các máy chủ với nhau bạn có thể sử dụng công cụ trực quan hơn là Syncthing bạn có thể tìm kiếm bài viết trên trang VnGeek.

Giả sử mình có thư mục /home/phantlq/vngeek và một thư mục 
/home/phantlq/vngeek-backup. Trong thư mục /home/phantlq/vngeek mình có 1 file là note.txt. Mình muốn đồng bộ với unison đơn giản chỉ cần dùng một dòng lệnh:

unison /home/phantlq/uns/vngeek /home/phantlq/uns/vngeek-backup
Chương trình sẽ thông báo là có 1 tập tin note.txt bên trái – thư mục vngeek có muốn được đồng bộ sang bên phải – thư mục vngeek-backup hay không? (Bấm f để follow, tức là bạn đồng ý với việc đồng bộ).
Tập tin note.txt đã được đồng bộ.

Dĩ nhiên đây là cách sử dụng bằng tay, nếu bạn muốn công việc diễn ra một cách tự động trong tương lai, chúng ta cần thiết lập cho Unison bằng tập tin default.prf. Tập tin này nằm ở

/root/.unison/default.prf

Bên trong tập tin này là những thiết lập tự động mà bạn có thể cấu hình theo ý mình, thay vì hỏi bạn từng bước (như đồng bộ tập tin mới xuất hiện, các tập tin xung đột) thì Unison sẽ tự động đồng bộ theo thiết lập cho trước – như một quy tắc mà chính bạn đặt ra và mong muốn Unison hoạt động như vậy. Bây giờ chúng ta ngắm nghía tập tin này một chút nào:

Ồ bên trong chẳng có gì đặc biệt cả. Thôi thì tự cấu hình vậy.

Dưới đây là tập tin cấu hình mà mình đã tạo ra sau khi tham khảo trang hướng dẫn từ UnisonHowToForge:

# Roots of the synchronization
    root = /home/phatnlq/uns/vngeek
    root = /home/phatnlq/uns/vngeek-backup
#          When set to true, this flag causes the user interface to skip
#          asking for confirmations on non-conflicting changes.
    auto=true

#Names and paths to ignore:
#ignore = Name temp.*
#ignore = Name *~
#ignore = Name .*~
#ignore = Path */pilot/backup/Archive_*
#ignore = Name *.o
#ignore = Name *.tmp

batch=true

#          !When this is set to true, Unison will request an extra
#          confirmation if it appears that the entire replica has been
#          deleted, before propagating the change. If the batch flag is
#          also set, synchronization will be aborted. When the path
#          preference is used, the same confirmation will be requested for
#          top-level paths. (At the moment, this flag only affects the
#          text user interface.) See also the mountpoint preference.
confirmbigdel=true

#          When this preference is set to true, Unison will use the
#          modification time and length of a file as a `pseudo inode
#          number' when scanning replicas for updates, instead of reading
#          the full contents of every file. Under Windows, this may cause
#          Unison to miss propagating an update if the modification time
#          and length of the file are both unchanged by the update.
#          However, Unison will never overwrite such an update with a
#          change from the other replica, since it always does a safe
#          check for updates just before propagating a change. Thus, it is
#          reasonable to use this switch under Windows most of the time
#          and occasionally run Unison once with fastcheck set to false,
#          if you are worried that Unison may have overlooked an update.
#          The default value of the preference is auto, which causes
#          Unison to use fast checking on Unix replicas (where it is safe)
#          and slow checking on Windows replicas. For backward
#          compatibility, yes, no, and default can be used in place of
#          true, false, and auto. See the section "Fast Checking" for more
#          information.
fastcheck=true

#          When this flag is set to true, the group attributes of the
#          files are synchronized. Whether the group names or the group
#          identifiers are synchronizeddepends on the preference numerids.
group=true

#          When this flag is set to true, the owner attributes of the
#          files are synchronized. Whether the owner names or the owner
#          identifiers are synchronizeddepends on the preference
#          extttnumerids.
owner=true

#          Including the preference -prefer root causes Unison always to
#          resolve conflicts in favor of root, rather than asking for
#          guidance from the user. (The syntax of root is the same as for
#          the root preference, plus the special values newer and older.)
#          This preference is overridden by the preferpartial preference.
#          This preference should be used only if you are sure you know
#          what you are doing!
prefer=newer

#          When this preference is set to true, the textual user interface
#          will print nothing at all, except in the case of errors.
#          Setting silent to true automatically sets the batch preference
#          to true.
silent=true

#          When this flag is set to true, file modification times (but not
#          directory modtimes) are propagated.
times=true

Bây giờ mình chạy lại lệnh unison mà không cần thêm các flag đằng sau vì mình đã thiết lập xong tập tin /root/.unison/default.prf:

unison
Không có thông báo gì cả vì mình có thiết lập -silent (print nothing except error messages) tức là không hiện gì nếu không có lỗi nào. Vậy là yên tâm rồi.

Bây giờ mình thử Test một chút bằng cách tạo một tập tin trong thư mục vngeek xem sao và sau khi chạy lệnh unison thì có được đồng bộ sang thư mục vngeek-backup hay không. Xin mời các bạn xem video ở dưới:

Vậy là thành công rồi.

Bây giờ mình tạo một Cronjob để Unison tự động chạy và đồng bộ dữ liệu cho mình:

crontab -e
*/1 * * * * /usr/bin/unison &> /dev/null

Như vậy cấu hình xong trông thế này:

Đừng quên lưu lại nhé các bạn.

Chúc các bạn thành công nhé!

Bình luận