2013-07-02 30 views
0

好的,所以我需要創建一個文件結構的副本,但是結構非常龐大(數百萬個文件),我正在尋找最快的方法來複制它。整個文件結構的cp -l的替代速度更快?

我目前使用cp -lR "$original" "$copy"但是,即使這是非常緩慢(需要幾個小時)。

我想知道是否有更快的方法可以使用?我知道rsync --link-dest,但這不是更快,但我真的希望它更快,因爲我想每小時創建這些快照或等。

另一種方法是僅將更改(我可以快速找到)複製到每個文件夾中,然後在需要釋放空間時將它們「展平」(rsync將較舊的文件夾放入較舊的文件夾,直到達到最後一個完整快照)真的寧願每個文件夾都是自己的完整快照。

+1

考慮使用本地支持快照的文件系統,如btrfs或zfs。他們可以在幾秒鐘內以最少的磁盤成本快照。 –

回答

-1

根據文件,您可以通過壓縮實現的性能提升:

cd "$original && tar zcf - . | (cd "$copy" && tar zxf -) 

這就造成了「原」目錄的壓縮包,將數據發送到標準輸出,然後切換到「複製」目錄(必須存在)並將輸入流解壓縮。

對於提取,您可能希望觀察進度:tar zxvf -

+0

你能解釋爲什麼tar,gzip,gunzip,untar應該比簡單地複製文件更快嗎? – jgb

+0

@glenn我不知道這怎麼可能比'cp -lR'更快,它只創建硬鏈接並且實際上不會複製任何東西(創建新目錄除外)?在我的情況下開銷似乎是層次結構的大小,所以你沒有錯,事先將它減少到單個文件可能是一個選項,但不幸的是,這並不意味着我將tar同樣巨大的層次結構和整體浪費空間。 – Haravikk

0

你爲什麼要放棄鏈接DEST?我使用這個選項的腳本,並經常拍攝快照,性能非常好。

在你動心的情況下,這裏是我使用的腳本:https://github.com/alvaroreig/varios/blob/master/incremental_backup.sh

+0

哦,我不是說這是一個糟糕的選擇,但如果這就是我所做的一切,那麼'cp -lR'應該比'rsync'少開銷,我只是想知道是否有更快的方法,結構甚至'cp -lR'可能會非常緩慢。 rsync的主要優點是你可以用一個命令同時做其他的事情,比如複製更新的文件,除了連接其他的東西。 – Haravikk

0

如果您已經安裝pax,你可以使用它。把它看作tar或cpio,但是標準的,每個POSIX。

#!/bin/sh 

# Move "somedir/tree" to "$odir/tree". 
itree=$1 
odir=$2 
base_tree=$(basename "$itree") 
pax -rw "$itree" -s "#$itree#$base_tree#g" "$odir" 

-s replstr是一個不幸的必要性(你會得到$ odir/$ itree其他方式),但它工作得很好,它已經比CP快大型結構迄今。

如果您沒有像一個人已經建議的pax一樣,tar當然是另一種選擇。