Vixual / 122 posts / tags / 62 comments / feed / comments feed /
Search:

rsync - 備份伺服器

rsync 是一個遠端檔案的備份、同步程式,用 man 查 “rsync” 得到的名稱: “rsync - faster, flexible replacement for rcp“,實際上使用也確實如此。

rsync 目前由 samba 的團隊在發展 (網址: http://rsync.samba.org/),它有它自己的演算法,可以很有效率的傳輸檔案, 支援 rsh 及 ssh 加密傳輸,應該是目前最常被做為資料同步或異地備援的工具。

大部份的 Linux 應該都有安裝 rsync 了,如果沒有,就直接用 apt 或 yum 安裝即可。

本文章只有說到最基本的備份方式,如果你要知道與 MS Windows 或 ssh 有關的實作方式,目前沒有。

名詞解釋

不知是否有人會誤解下列的名詞,不過,一開始使用 rsync 我就有點誤解了,所以先說明如下:

  • 備份伺服器: 有執行rsync 服務的伺服器,等待 “Client 端” 將檔案傳輸過來做備份。
  • Client 端: 在自己的電腦執行/usr/bin/rsync,將檔案傳到 “備份伺服器” 做同步或備份。
  • 啟動備份伺服器

    在備份伺服器編輯 “/etc/xinetd.d/rsync”,找到

    disable = yes

    改為

    disable = no

    儲存後,執行

    service xinetd restart

    備份伺服器的設定檔

    rsync 服務的設定檔主要有兩個,一個是 “/etc/rsyncd.conf”,一個是自訂的密碼檔。

    rsyncd.conf 的設定格式如下:

    #中括號內的文字是自訂的備份代號,設定檔內可以有多個備份代號,每個代號之下可以有自已的設定
    #以下這一行是 log 檔的位置(非必要)
    log file = /var/log/rsync.log
    [web1]
      #備份之檔案的存放路徑 (請先建立好路徑,並且要讓下面的 uid 及 gid 可以寫入檔案)
      path = /var/backup/web1
      #驗證的用戶名稱 (此名稱只需存在於密碼檔裡面即可)
      auth users = web1
      #允許用戶的來源
      hosts allow = 192.168.1.0/24 192.168.2.0/24
      #執行程式時所使用的用戶及群組名稱,同時也會成為備份之後檔案的擁有者及擁有群組
      uid = root
      gid = root
      #密碼檔的位置
      secrets file = /etc/rsync.password
      read only = no

    (這裡有個技巧,我通常會將 “備份代號”、”存放路徑” 及 “用戶名稱” 設為 Client 端的 “電腦名稱”,這樣就很容易做為識別了)

    從 rsync.conf 內自訂的密碼檔位置為 “/etc/rsync.password”,這個密碼檔只是一個純文字檔,格式很簡單,”每一列一個用戶名稱對應一組密碼”,密碼也僅是明碼而已。我的 “rsync.password” 內容如下:

    web1:password1

    新增密碼檔之後,要將權限設為 600,否則啟動 rsync 服務時會有錯誤:

    chmod 600 /etc/rsync.password

    完成設定檔之後不須要再重新啟動 xinetd。

    Client 端

    Client 端所需要做的僅是執行 “/usr/bin/rsync”,rsync 做為同步處理時,常用的參數如下:

  • -a, –archive: archive mode, equivalent to -rlptgoD *
    最常被使用的參數,相當於同時使用 “-rlptgoD”
  • -v, –verbose: increase verbosity *
  • -R, –relative: use relative path names
    備份後,使用 Client 端完整的路徑,不加此參數,則為相對路徑
  • -H, –hard-links: preserve hard links *
  • -S, –sparse: handle sparse files efficiently *
  • -z, –compress: compress file data *
    壓縮傳輸的資料,以減少傳輸量
  • –delete: delete files that don’t exist on sender *
    進行同步時,Client 端如果刪掉檔案,則備份伺服器也同時刪除該檔案,以保持兩邊檔案的一致
  • –progress: show progress during transfer
    即時顯示檔案傳輸的進度
  • –password-file: get password from FILE *
    密碼檔的位置,如不輸入此參數,則程式執行時會詢問你
  • 上面有加 “*” 者是我每次都會使用的參數

    Client 端的密碼檔也是純文字格式,只要把正確的密碼輸入進去即可,同樣使用明碼,就是備份伺服器所設定的那個密碼。例如我的密碼檔放在 “/etc/myrsync.password”,那檔案的內容就是:

    password1

    新增密碼檔之後,同樣要將權限設為 600:

    chmod 600 /etc/myrsync.password

    再來就是進行檔案的傳輸了,rsync 指令的語法如下:

    /usr/bin/rsync [-參數] [--參數] [--password-file=Client 端的密碼檔位置] [Client 端要備份的檔案路徑] [用戶名稱@備份伺服器位址::備份代號]

    假設我要將 Client 端的 /var/www/html 下的檔案傳輸到備份伺服器 (備份伺服器的 IP 是 “192.168.1.99″),那我就執行:

    /usr/bin/rsync -avHSz --delete --password-file=/etc/myrsync.password /var/www/html web1@192.168.1.99::web1

    第一次執行時,傳輸檔案的所花費的時間會比較長,第二次執行就只會傳輸有新增或更新過的檔案,時間就會縮短很多。

    請注意 /var/www/html 的後面有沒有多一個 “/” 的結果差很多,有 “/” 的話那同步過去的會是整個 /var/www/html 的內容(/var/www/html/*),沒有 “/” 會在目標路徑建立一個 html 目錄,目錄下才是 /var/www/html 的內容。

    檔案傳輸完成之後,到備份伺服器的 /var/backup/web1 下查看,就會多出一個 html 資料夾,這就是剛剛 rsync 傳輸過去的檔案。

    將以上的指令加到系統的 crontab 就可以定時同步檔案了。

    收藏至網路書籤: These icons link to social bookmarking sites where readers can share and discover new web pages.
    • del.icio.us
    • Google
    • Live
    • YahooMyWeb
    • MyShare
    • Hemidemi
    • Funp

    您可能會對以下這些文章感興趣

    您對這篇文章的評價:
    1 Star2 Stars3 Stars4 Stars5 Stars (有 1 人給予評價)
    Loading ... Loading ...

    沒有任何留言

    發表您的評論

    (您的留言會在審核後才能公開)