使用 rsync
和 scp
的備份
1. 為什麼備份這麼重要?
今天我們來聊聊對所有 IT 和程式世界裡工作的人來說,最重要的任務之一——數據備份。如果你曾因硬碟故障或意外失誤而丟失過重要資料,那麼你一定很清楚這有多重要。如果還沒有經歷過——我們在這裡就是為了幫助避免這種情況!
想像一下:你辛辛苦苦做的專案工作了好幾個月,結果有一天你的硬碟決定罷工了。這感覺就像在 SQL 查詢的結尾忘記加分號一樣令人抓狂,但嚴重一千倍!系統會崩壞,人會犯錯,文件會消失。備份是應對這種意外的最好準備。
在 Linux 中,有幾個非常強大的工具可以用來備份。今天,我們要認識其中兩個:rsync
和 scp
。
2. 命令 rsync
:快速又聰明的數據複製工具
rsync
是最受歡迎的數據複製和同步工具之一。它的主要優勢在於速度和效率。不像直接複製所有文件,rsync
僅複製更改過的檔案。這使其非常適合用於定期備份大量數據。
rsync
的語法
以下是基本的命令格式:
rsync [選項] 來源 目標
這裡:
來源
— 要複製的檔案或目錄的路徑。目標
— 要將這些數據儲存在哪裡。
主要參數及其功能
以下是一些常用的選項:
-a
(archive): 包含所有的元數據(權限、時間戳等)。-v
(verbose): 顯示詳細輸出,讓你可以看到正在進行的操作。--progress
: 顯示複製的進度(如果在處理大檔案時非常有用)。--delete
: 刪除目標端不再存在於來源端的文件,對於完全同步非常實用。-z
(compress): 傳輸前壓縮數據,加速操作(特別是在進行網絡操作時很重要)。
範例:本地數據複製
我們先創建一個目錄 /backup
來儲存備份。
mkdir /backup
將目錄 /home
的內容複製到 /backup
:
rsync -av /home /backup
解釋這個範例:
-a
保存了文件的結構和權限。-v
提供了操作進度的信息。
如果你再次執行這個命令,它只會複製更改過的或者是新的文件。
範例:遠程備份
現在假設你想將備份傳輸到遠程服務器。為此,rsync
支持使用 SSH。
rsync -av /backup user@remote_server:/remote_backup
這裡:
user
— 遠程服務器上的用戶名。remote_server
— 你的遠程服務器的地址(例如 IP 地址或域名)。/remote_backup
— 服務器上的路徑,用來存儲數據。
如果你有一個 SSH 密鑰來進行授權,傳輸會更加簡單(也更安全)。
3. scp
指令:簡單又高效
scp
(Secure Copy Protocol) —— 這是一個用於在本地與遠端機器之間複製文件的工具。它比 rsync
簡單一些,適合那些不需要完整同步的情況。
scp
語法
以下是該指令的基本格式:
scp [選項] 來源 目的地
其中:
來源
—— 是您想複製的文件的路徑。目的地
—— 是目標地址,文件需傳送至此。
主要選項及其功能
以下是一些有用的選項:
-r
: 遞歸複製整個目錄。-C
: 在傳輸之前壓縮文件。-P
: 指定非預設的 SSH 端口(預設為 22)。
範例:將文件傳到遠端機器
假如您想將某個文件從本地電腦傳送到伺服器,該文件名為 document.txt
。
scp document.txt user@remote_server:/remote_folder
如果文件位於目錄 /home/user/documents
,指令將如下所示:
scp /home/user/documents/document.txt user@remote_server:/remote_folder
現在該文件將可在遠端機器的目錄 /remote_folder
中訪問。
範例:從伺服器下載文件到本地機器
這個過程也可以反向操作:
scp user@remote_server:/remote_folder/document.txt /home/user/documents
這樣 document.txt
文件就會出現在您的本地目錄中。
4. rsync
和 scp
的區別
雖然兩個命令都可以用來複製文件,但它們有各自的特點。
特點 | rsync | scp |
---|---|---|
速度 | 僅傳輸已更改的數據,對於大容量檔案更快 | 全部複製,即使文件未更改 |
同步 | 完全支持同步 | 不支持同步 |
數據壓縮 | 支持 -z |
支持 -C |
使用簡單性 | 配置較為複雜 | 操作界面簡單 |
所以,如果你只是需要快速傳輸文件——用 scp
。但如果是關於例行同步和大數據量——一定用 rsync
。
5. 真實範例:設置備份
這是一個實際的任務:你想要設置一個完整的備份流程,將你的專案備份到遠程伺服器上。
假設你的專案檔案存放在資料夾
/home/user/project
中。你希望它們被備份到伺服器backup.server.com
中的資料夾/backups/project
。為了加速拷貝過程,我們會使用
rsync
。
設置備份腳本
建立一個檔案 backup.sh
:
#!/bin/bash
SOURCE="/home/user/project"
DESTINATION="user@backup.server.com:/backups/project"
# 使用 rsync 進行備份
rsync -av --delete "$SOURCE" "$DESTINATION"
# 顯示完成訊息
echo "備份完成!"
讓檔案變為可執行:
chmod +x backup.sh
現在你可以手動執行這個腳本:
./backup.sh
或者將它新增到 cron
中以自動執行(我們會在課程稍後部分談論 cron)。
6. 常見錯誤及如何避免
命令行中的路徑不正確。 如果指定了錯誤的文件路徑,
rsync
或scp
什麼都不會複製。使用ls
或pwd
命令來確保路徑的正確性。缺少授權密鑰。 如果在使用 SSH 時沒有設置密鑰,系統會不斷要求輸入密碼。設置 SSH 密鑰 來簡化此過程。
備份中斷。 如果網絡不穩定,
rsync
在下次啟動時仍然會完成數據傳輸。但scp
則需要重新開始。
使用 rsync
和 scp
,你可以自信地將數據在本地電腦和遠程服務器之間複製和同步。這些工具是保護重要文件時的可靠助手。
GO TO FULL VERSION