11 使用 RSync 複製檔案 #
當今時代,使用者通常都會有數部電腦:家用機器和辦公機器、筆記型電腦、智慧型電話或平板電腦。因而,在多個裝置之間保持檔案和文件同步的任務就變得越發重要。
您在開始使用同步工具之前,應該先熟悉其特性和功能。請務必備份您的重要檔案。
11.1 概念綜覽 #
對於要透過慢速網路連接同步大量資料的情況,Rsync 提供了可靠的方法來僅傳輸檔案中的變更。此方法不僅適用於文字檔案,還適用於二進位檔案。為了偵測檔案之間的差異,Rsync 將檔案分為多個區塊,並計算它們的檢查總數。
偵測變更對運算能力有一定的要求。因此,請確定兩端的機器均具有足夠的資源,包括 RAM。
當需要定期傳輸大量僅包含微小變更的資料時,Rsync 特別實用。進行備份時就常常用到該工具。Rsync 也非常適合用來鏡像預備伺服器,此類伺服器將 Web 伺服器的完整目錄樹儲存到 DMZ 內的某部 Web 伺服器中。
Rsync 並不是同步工具,雖然它的名字看上去有些像。Rsync 工具一次只能在一個方向複製資料。它不會也不能反向複製資料。如果您需要既能同步來源又能同步目標的雙向工具,請使用 Csync。
11.2 基本語法 #
Rsync 是一個指令行工具,基本語法如下:
rsync [OPTION] SOURCE [SOURCE]... DEST
您可以在任何本地或遠端機器上使用 Rsync,前提是您擁有相應的存取權限和寫入權限。可以有多個 SOURCE 項目。SOURCE 和 DEST 預留位置可以是路徑和/或 URL。
下面介紹一些最常用的 Rsync 選項:
-v
輸出較詳細的文字
-a
歸檔模式;以遞迴方式複製檔案並保留時間戳記、使用者/群組擁有權、檔案權限和符號連結
-z
壓縮傳輸的資料
使用 Rsync 時,應特別注意結尾斜線。目錄後面的結尾斜線表示目錄的內容。沒有結尾斜線表示目錄自身。
11.3 在本地複製檔案和目錄 #
下面的描述假設目前的使用者擁有 /var/backup
目錄的寫入權限。若要將單個檔案從機器上的一個目錄複製到另一個路徑,請使用以下指令:
tux >
rsync
-avz backup.tar.xz /var/backup/
檔案 backup.tar.xz
會複製到 /var/backup/
,絕對路徑是 /var/backup/backup.tar.xz
。
請勿忘記在 /var/backup/
目錄後面加上結尾斜線!如果不插入斜線,檔案 backup.tar.xz
會複製到 /var/backup
(檔案) 中,而不是 /var/backup/
目錄中!
複製目錄與複製單個檔案相似。下面的範例將目錄 tux/
及其內容複製到 /var/backup/
目錄中:
tux >
rsync
-avz tux /var/backup/
在絕對路徑 /var/backup/tux/
中可找到副本。
11.4 從遠端複製檔案和目錄 #
兩部機器上都需要有 Rsync 工具。若要從遠端目錄複製檔案或將檔案複製到遠端目錄,需要提供 IP 位址或網域名稱。如果本地機器和遠端機器上目前的使用者名稱相同,則可以不指定使用者名稱。
若要使用相同的使用者 (在本地和遠端主機上) 將檔案 file.tar.xz
從本地主機複製到遠端主機 192.168.1.1
,請使用以下指令:
tux >
rsync
-avz file.tar.xz tux@192.168.1.1:
依據您的個人偏好,也可以使用下面的指令,它們的作用相同:
tux >
rsync
-avz file.tar.xz 192.168.1.1:~tux >
rsync
-avz file.tar.xz 192.168.1.1:/home/tux
在所有使用標準組態的情況下,系統會提示您輸入遠端使用者的密碼片語。此指令會將 file.tar.xz
複製到使用者 tux
的主目錄 (通常為 /home/tux
)。
從遠端複製目錄與在本地複製目錄相似。下面的範例將目錄 tux/
及其內容複製到 192.168.1.1
主機上的遠端目錄 /var/backup/
:
tux >
rsync
-avz tux 192.168.1.1:/var/backup/
假設您在主機 192.168.1.1
上擁有寫入權限,便可在絕對路徑 /var/backup/tux
中找到副本。
11.5 設定和使用 Rsync 伺服器 #
Rsync 可做為在預設連接埠 873 上監聽內送連接的精靈 (rsyncd
) 執行。此精靈可以接收「複製目標」。
下面的描述介紹如何在 jupiter
上建立具有備份目標的 Rsync 伺服器。此目標可用於儲存您的備份。若要建立 Rsync 伺服器,請執行以下操作:
在 jupiter 上,建立用於儲存您所有備份檔案的目錄。在此範例中,我們使用
/var/backup
:root #
mkdir
/var/backup指定擁有權。在此範例中,該目錄為
使用者
群組中的使用者tux
所擁有:root #
chown
tux.users /var/backup設定 rsyncd 精靈。
我們將組態檔案分割成一個主檔案,和一些用於存放您的備份目標的「模組」。如此,以後便可更輕鬆地新增其他目標。全域值可以儲存在
/etc/rsyncd.d/*.inc
檔案中,而模組放置在etc/rsyncd.d/*.conf
檔案中:建立目錄
/etc/rsyncd.d/
:root #
mkdir
/etc/rsyncd.d/在主組態檔案
/etc/rsyncd.conf
中,新增以下幾行:# rsyncd.conf main configuration file log file = /var/log/rsync.log pid file = /var/lock/rsync.lock &merge /etc/rsyncd.d 1 &include /etc/rsyncd.d 2
在檔案
/etc/rsyncd.d/backup.conf
中透過以下幾行建立您的模組 (您的備份目標):# backup.conf: backup module [backup] 1 uid = tux 2 gid = users 2 path = /var/backup 3 auth users = tux 4 secrets file = /etc/rsyncd.secrets 5 comment = Our backup target
建立包含以下內容的
/etc/rsyncd.secrets
檔案,並取代 PASSPHRASE:# user:passwd tux:PASSPHRASE
確認該檔案只有
root
使用者可讀取:root #
chmod
0600 /etc/rsyncd.secrets
透過以下指令啟動並啟用 rsyncd 精靈:
root #
systemctl
enable rsyncdroot #
systemctl
start rsyncd測試是否可存取 Rsync 伺服器:
tux >
rsync
jupiter::您應該會看到類似如下的回應:
backup Our backup target
若非如此,請檢查您的組態檔案、防火牆和網路設定。
上述步驟建立了 Rsync 伺服器,現在可以使用它來儲存備份。本範例也建立了監聽所有連接的記錄檔。這個檔案是儲存在 /var/log/rsyncd.log
。如果您要對傳輸進行除錯,此檔案非常實用。
若要列出備份目標的內容,請使用以下指令:
tux >
rsync -avz jupiter::backup
此指令會列出伺服器上 /var/backup
目錄中存在的所有檔案。這個要求也會記錄在 /var/log/rsyncd.log
記錄檔中。若要開始實際傳輸,請提供來源目錄。請使用 .
來代表目前的目錄。例如,下面的指令會將目前的目錄複製到 Rsync 備份伺服器:
tux >
rsync -avz . jupiter::backup
依預設,Rsync 不會在執行時刪除檔案和目錄。若要允許刪除,必須另外指定選項 --delete
。若要確保不會刪除較新的檔案,則可以改用 --update
選項。任何產生的衝突都必須手動解決。
11.6 更多資訊 #
- Csync
雙向檔案同步工具,請參閱 https://csync.org/。
- RSnapshot
建立增量備份,請參閱 https://rsnapshot.org。
- Unison
與 CSync 類似的檔案同步工具,但具有圖形介面,請參閱 https://www.seas.upenn.edu/~bcpierce/unison/。
- Rear
一個災難復原架構,請參閱《SUSE Linux Enterprise High Availability Extension 管理指南》中的「使用 Rear (Relax-and-Recover) 進行災難復原」一章。