rsync協議可以非常簡單地用於普通的備份/同步作業,但是它的一些更高階的特性可能會讓您感到驚訝。在本文中,我們將展示即使是最大的資料囤積者和備份愛好者如何將rsync作為一個單一的解決方案來滿足他們所有的資料冗餘需求。
如果你坐在那裡想“rsync到底是什麼?”?“或者“我只在非常簡單的任務中使用rsync”,您可能想檢視我們上一篇關於如何在Linux上使用rsync備份資料的文章,這篇文章介紹了rsync,指導您完成安裝,並展示了它的更基本的功能。一旦您牢牢掌握瞭如何使用rsync(老實說,它並沒有那麼複雜)並且熟悉了Linux終端,您就可以繼續閱讀這個高階指南了。
首先,讓我們的Windows讀者和Linux專家站在同一個頁面上。儘管rsync是為在類Unix系統上執行而構建的,但是沒有理由不讓您在Windows上使用它。Cygwin提供了一個很好的LinuxAPI,我們可以用它來執行rsync,所以請訪問他們的網站,根據您的計算機下載32位或64位版本。
安裝很簡單;在進入“選擇軟體包”螢幕之前,您可以將所有選項保持為預設值。
現在,您需要對Vim和SSH執行相同的步驟,但是當您選擇它們時,這些包看起來會有點不同,因此下面是一些螢幕截圖:
安裝Vim:
正在安裝SSH:
在選擇了這三個軟體包之後,繼續單擊next,直到完成安裝。然後你可以透過點選安裝程式放在桌面上的圖示來開啟Cygwin。
既然Windows使用者都在同一個頁面上,那麼讓我們看看一個簡單的rsync命令,並展示如何使用一些高階開關快速地使它變得複雜。
假設您有一堆需要備份的檔案—現在誰不備份呢?**行動式硬碟以便備份計算機檔案,併發出以下命令:
rsync -a /home/geek/files/ /mnt/u**/files/
或者,它在裝有Cygwin的Windows電腦上的外觀:
rsync -a /cygdrive/c/files/ /cygdrive/e/files/
非常簡單,而且在這一點上真的不需要使用rsync,因為您可以拖放檔案。但是,如果您的另一個硬碟已經有一些檔案,並且只需要更新的版本以及自上次同步以來建立的檔案,則此命令非常方便,因為它只將新資料傳送到硬碟。對於大檔案,尤其是透過網際網路傳輸檔案,這是一件大事。
將檔案備份到外部硬碟,然後將硬碟與計算機放在同一位置是一個非常糟糕的主意,因此,讓我們看看透過internet將檔案傳送到另一臺計算機(您租用的計算機、家庭成員的計算機等)需要做些什麼。
rsync -av --delete -e 'ssh -p 12345’ /home/geek/files/ [email protected]:/home/geek2/files/
上面的命令會將您的檔案傳送到IP地址為10.1.1.1的另一臺計算機。它將從目標中刪除源目錄中不再存在的無關檔案,輸出正在傳輸的檔名,以便您瞭解發生了什麼,並在埠12345上透過SSH傳輸rsync。
-a-v-e--delete開關是一些最基本和最常用的開關;如果您正在閱讀本教程,您應該已經對它們有了很多瞭解。我們來看看其他一些有時被忽略但非常有用的開關:
--progress–此開關允許我們檢視每個檔案的傳輸進度。它在透過internet傳輸大檔案時特別有用,但在透過快速網路傳輸小檔案時,它會輸出大量無意義的資訊。
正在執行以--progress開關作為備份的rsync命令:
--partial–這是另一個開關,在透過internet傳輸大型檔案時特別有用。如果rsync在檔案傳輸過程中由於任何原因被中斷,則部分傳輸的檔案將保留在目標目錄中,並且一旦再次執行rsync命令,傳輸將在停止的位置繼續。當透過internet傳輸大檔案(比如說,幾GB)時,沒有什麼比幾秒鐘的internet中斷、藍色畫面或人為錯誤導致檔案傳輸中斷而不得不重新開始更糟糕的了。
-P–這個開關結合了--progress和--partial,所以改用它,它將使rsync命令更加整潔。
-z或--compress–此開關將使rsync在傳輸檔案資料時壓縮檔案資料,從而減少必鬚髮送到目標的資料量。它實際上是一個相當常見的開關,但遠不是必要的,只是真正有利於您之間的傳輸速度慢連線,它沒有做什麼,為以下型別的檔案:7z,avi,bz2,deb,g,ziso,jpeg,jpg,mov,mp3,mp4,ogg,rpm,tbz,tgz,z,zip。
-或者——人類可讀的——如果您使用的是——progress開關,那麼您肯定也想使用這個開關。也就是說,除非您喜歡動態地將位元組轉換為兆位元組。h開關將所有輸出的數字轉換成可讀的格式,這樣您就可以真正瞭解傳輸的資料量。
-n或者——試執行——這個開關對於您第一次編寫rsync指令碼並測試它是非常重要的。它執行了一個試執行,但實際上沒有做任何更改—可能的更改仍然正常輸出,因此您可以在將指令碼轉入生產之前閱讀所有內容並確保它看起來正常。
-R或--relative–如果目標目錄不存在,則必須使用此開關。我們將在本指南的後面部分使用此選項,以便在目標計算機上建立資料夾名稱中帶有時間戳的目錄。
--exclude from–此開關用於連結到包含不希望備份的目錄路徑的排除列表。它只需要一個純文字檔案,每行有一個目錄或檔案路徑。
--include from–類似於--exclude from,但它連結到一個包含要備份的資料的目錄和檔案路徑的檔案。
--stats–無論如何都不是一個重要的交換機,但是如果您是系統管理員,瞭解每個備份的詳細統計資訊會很方便,這樣您就可以監視透過網路傳送的通訊量等。
--日誌檔案–這允許您將rsync輸出傳送到日誌檔案。對於自動備份,我們絕對建議您這樣做,因為您不必親自閱讀輸出。總是給日誌檔案一次在您的業餘時間,以確保一切正常工作。而且,它是系統管理員使用的一個關鍵開關,因此您不必擔心在讓實習生負責時備份是如何失敗的。
現在讓我們看看rsync命令,我們又添加了幾個開關:
rsync -avzhP --delete --stats --log-file=/home/geek/rsynclogs/backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/
命令仍然非常簡單,但我們仍然沒有建立一個像樣的備份解決方案。儘管我們的檔案現在位於兩個不同的物理位置,但此備份無法保護我們免受資料丟失的主要原因之一:人為錯誤。
如果您不小心刪除了一個檔案,病毒會損壞您的任何檔案,或者發生了其他不希望更改您的檔案的情況,然後您執行rsync備份指令碼,您備份的資料將被不希望更改的內容覆蓋。當發生這種情況時(不是如果,而是什麼時候),您的備份解決方案無法保護您免受資料丟失的影響。
rsync的建立者意識到了這一點,並添加了--backup和--backup dir引數,以便使用者可以執行差異備份。rsync網站上的第一個示例顯示了一個指令碼,其中每七天執行一次完整備份,然後每天將對這些檔案所做的更改備份到不同的目錄中。這種方法的問題是,要恢復檔案,必須有效地恢復七次。而且,大多數極客一天要執行幾次備份,因此在任何給定時間都可以輕鬆地擁有20多個不同的備份目錄。現在恢復檔案不僅是一件痛苦的事,而且即使只是檢視備份的資料也可能非常耗時—您必須知道檔案上次更改的時間,才能找到其最近的備份副本。最重要的是,僅每週(在某些情況下甚至更少)執行增量備份是低效的。
快照備份到救援!快照備份不過是增量備份,但它們利用硬連結保留原始源的檔案結構。一開始你可能很難理解,所以讓我們看一個例子。
假設我們有一個備份指令碼,每兩小時自動備份一次資料。每當rsync執行此操作時,它都以以下格式命名每個備份:backup month day year time。
因此,在一天結束時,我們的目標目錄中會有一個資料夾列表,如下所示:
當遍歷這些目錄時,您將看到源目錄中的每個檔案與當時的完全相同。然而,任何兩個目錄之間都不會有重複。rsync透過--link dest=DIR引數使用硬連結來實現這一點。
當然,為了擁有這些日期整潔的目錄名,我們必須對rsync指令碼進行一些增強。讓我們看一下實現這樣的備份解決方案需要什麼,然後我們將更詳細地解釋指令碼:
#!/bin/bash
#copy old time.txt to time2.txt
yes | cp ~/backup/time.txt ~/backup/time2.txt
#overwrite old time.txt file with new time
echo `date +”%F-%I%p”` > ~/backup/time.txt
#make the log file
echo “” > ~/backup/rsync-`date +”%F-%I%p”`.log
#rsync command
rsync -avzhPR --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --stats --log-file=~/backup/rsync-`date +”%F-%I%p”`.log --exclude-from '~/exclude.txt' --link-dest=/home/geek2/files/`cat ~/backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/`date +”%F-%I%p”`/
#don’t forget to scp the log file and put it with the backup
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
這將是一個典型的快照rsync指令碼。萬一我們把你丟在什麼地方了,讓我們一塊一塊地解剖一下:
我們指令碼的第一行復制了時間.txt到time2.txt。“是”管道用於確認是否要覆蓋該檔案。接下來,我們將當前時間放入時間.txt. 這些檔案稍後會派上用場。
下一行生成rsync日誌檔案,命名為rsync-日期.log(其中日期是實際日期和時間)。
現在,我們警告您的複雜rsync命令:
-avzhPR、-e、-delete、-stats、-log file、-exclude from、-link dest–只是我們前面提到的開關;如果需要重新整理,請向上滾動。
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r–這些是目標目錄的許可權。因為我們在rsync指令碼中間建立這個目錄,所以我們需要指定許可權,以便使用者可以向其中寫入檔案。
date和cat命令的使用
我們將按照date和cat命令在rsync命令中的出現順序來討論它們的每個用法。注意:我們知道還有其他方法可以實現這個功能,特別是使用宣告變數,但是為了本指南的目的,我們決定使用這個方法。
日誌檔案指定為:
~/backup/rsync-`date +”%F-%I%p”`.log
或者,我們可以將其指定為:
~/backup/rsync-`cat ~/backup/time.txt`.log
不管是哪種方式,--log file命令都應該能夠找到先前建立的帶日期的日誌檔案並對其進行寫入。
連結目標檔案指定為:
--link-dest=/home/geek2/files/`cat ~/backup/time2.txt`
這意味著--link dest命令被賦予了上一次備份的目錄。如果我們每兩小時執行一次備份,並且在執行此指令碼時已是下午4:00,那麼--link dest命令將查詢在下午2:00建立的目錄,並且只傳輸此後更改的資料(如果有)。
重申一下,這就是為什麼時間.txt在指令碼的開頭複製到time2.txt,因此--link dest命令可以在以後引用該時間。
目標目錄指定為:
[email protected]:/home/geek2/files/`date +”%F-%I%p”`
這個命令只是將原始檔放入一個標題為當前日期和時間的目錄中。
最後,我們要確保日誌檔案的副本放在備份中。
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
我們使用埠12345上的secure copy獲取rsync日誌並將其放置在適當的目錄中。要選擇正確的日誌檔案並確保它最終位於正確的位置時間.txt檔案必須透過cat命令引用。如果你想知道為什麼我們決定時間.txt不是隻使用date命令,而是因為rsync命令執行時可能會發生很多時間,所以為了確保我們有正確的時間,我們只需對之前建立的文字文件進行cat。
在Linux上使用Cron或在Windows上使用任務排程器來自動執行rsync指令碼。您必須小心的一件事是,在繼續新的rsync程序之前,確保結束當前正在執行的rsync程序。任務排程器似乎會自動關閉任何已經執行的例項,但是對於Linux,您需要更具創造性。
大多數Linux發行版都可以使用pkill命令,因此請確保在rsync指令碼的開頭新增以下內容:
pkill -9 rsync
不,我們還沒做完。我們終於有一個美妙的(和免費!)備份解決方案到位,但我們所有的檔案仍然容易被盜。希望你能把檔案備份到幾百英里外的某個地方。不管那遙遠的地方有多安全,盜竊和駭客攻擊總是個問題。
在我們的示例中,我們已經透過SSH對所有rsync通訊量進行了隧道傳輸,這意味著所有檔案在傳輸到目的地的過程中都是加密的。然而,我們需要確保目的地同樣安全。請記住,rsync只在傳輸資料時對資料進行加密,但一旦檔案到達目的地,它們就會完全開啟。
rsync最好的特性之一是它只傳輸每個檔案中的更改。如果您對所有檔案進行了加密,並進行了一次小的更改,則整個檔案將必須重新傳輸,因為加密會使任何更改後的所有資料完全隨機化。
因此,最好/最容易使用某種型別的磁碟加密,例如用於Windows的BitLocker或用於Linux的dm crypt。這樣,您的資料在發生盜竊時會受到保護,但可以使用rsync傳輸檔案,並且您的加密不會影響其效能。還有其他可用的選項與rsync類似,甚至可以實現某種形式的rsync,例如Duplicity,但是它們缺少rsync必須提供的一些特性。
在異地設定快照備份並加密源和目標硬碟驅動器後,請鼓勵自己掌握rsync並實施最簡單的資料備份解決方案。
...令安裝、更新和清理系統可用的包。APT使用一個包的本地資料庫,它告訴系統是否有可用的更新。 ...
...管你喜歡與否,每臺相機都會進行後處理。實際的感測器資料被捕獲在一個原始檔案中,但是你在你相機的液晶屏(或者你的智慧**)上看到的是你相機對原始資料的解釋——而你的相機對你的創造性視覺一無所知。你不想自己...
...3D攝像頭模式利用了一些前置智慧**攝像頭捕捉到的深度資料。因此,與傳統的平面**不同,你的快照現在可以有一個3D元素,你可以透過傾斜和扭曲**來檢視。 ...
...伽,一種更現代的形式,很大程度上依賴於呼吸和動作的同步。這五個部分的課程將帶你透過瑜伽的基本姿勢,你一定要學會在大多數課程。前兩道菜短,後三道菜長。 ...
... 如果你要點選Join按鈕,你應該知道你要把資料交給世界上最大的廣告公司之一。畢竟,Facebook****是有原因的。 ...
... 實際上,有兩種方法可以在多臺裝置上同步或共享您的Kodi媒體庫。您可以使用Emby(簡單方法)或MySQL(困難方法)。在本文中,我們將解釋簡單的方法——因為,好吧,為什麼你會選擇更困難的選擇? ...
...用rsync命令,無需手動干預即可根據需要將本地檔案自動同步到遠端伺服器。請注意,本指南確實需要訪問遠端Linux伺服器(如AWS),並且是在Ubuntu20.04下編寫的,儘管任何Linux發行版都可以正常工作。 ...
... 您應該能夠將日誌同步到雲,這意味著您可以從任何裝置檢視和訪問條目。確保用於建立數字期刊的應用程式支援您使用的平臺。 ...
...效率與其自20世紀90年代中期以來在執行檔案複製和目錄同步方面的良好記錄相結合時,rsync是從Linux命令列建立備份的完美候選。 此外,還有一些獨立的軟體程式充當rsync的前端。它們為rsync提供圖形使用者介面(gui),有些人...