Debian
使用 tar.gz 和 rsync 創建備份
我正在嘗試使用此 bash 腳本創建 tar.gz 文件並將其發送到我的備份伺服器,由於某種原因它似乎沒有複製它,是否有更好的解決方案來解決我正在嘗試做的事情?
我寧願在通過網路發送之前對其進行壓縮
#!/bin/bash #################################### # # Backup to NFS mount script. # #################################### # What to backup. backup_files="/home/amp/.ampdata/instances/Towny/" # Where to backup to. dest="/home/amp/Backups" # Create archive filename. day=$(date +%A) time=$(date +%H-%M) file=$(file) archive_file="$file-$day-$time.tgz" # Print start status message. echo "Backing up $backup_files to $dest/$archive_file" date echo # Backup the files using tar. tar czf $dest/$archive_file $backup_files rsync $archive_file killbots@192.168.2.54:~/backup # Print end status message. echo echo "Backup finished" date
在腳本中的任何地方,您都將其
$dest/$archive_file
稱為要創建和複製的文件,除了rsync
應該將其複製到其他主機的命令中。修復呼叫並重rsync
試。
您需要向我們展示實際發生的事情讓您相信“它不會複製它”。
話雖如此,兩者
tar
和rsync
一起使用是不尋常的。rsync
通常會在文件樹本身上使用,它只會複製它需要複製的內容,同時考慮到已經存在的內容(僅發送差異)。您不想這樣做:您只想每次都發送這個 tar.gz 文件。所以我質疑使用
rsync
.您腳本中的這一行是錯誤的:
file=$(file)
它正在執行命令
file
並將輸出放入名為 file 的變數中。就其本身而言,這將是 stderr 上的錯誤輸出,而 stdout 上沒有任何內容,因此$file
保持為空。為了取得進展,我假設這個變數被設置為字元串“file”。一旦我們解析了變數的內容,您的腳本就會這樣做:
tar czf /home/amp/Backups/file-Thursday-21-39 /home/amp/.ampdata/instances/Towny/ rsync file-Thursday-21-39 killbots@192.168.2.54:~/backup
因此,如前所述,您不需要同時使用
tar
和rsync
。您tar
用於在本地儲存檔案,然後將其發送到遠端主機。為什麼要保留本地檔案?您將如何防止它們填滿您的本地儲存空間?您可以直接
tar
通過 SSH 連接:# tar zcvf - /home/amp/.ampdata/instances/Towny/ | \ ssh killbots@192.168.2.54 'cat > backup/file-Thursday-21-39.tar.gz'
其他一些評論:
- 在我看來,“Dayname-HH-MM”不是一個很好的格式。考慮一些更明顯和可排序的東西,比如 YYYY-MM-DD-HHMMSS.tar.gz。
- 預設情況下,SSH 沒有被壓縮,但這沒關係,因為您的
tar
命令使用了 gzip 壓縮。您可以考慮tar
使用其他壓縮格式,如 XZ、bzip2、zstd 等。- 已經製作了完整的備份程序來進行壓縮、重複數據刪除、可靠的備份。自己做飯並不總是值得的。您可能會考慮研究 borgbackup 或 restic 或類似的。