Cp

cp -a 的更快替代方案

  • September 16, 2015

對於我使用的 /home 到另一個磁碟的簡單傳輸,cp -a這在我看來是一種極其緩慢的方式。應該想知道更高效的方式來完成任務。我將 /home 掛載為邏輯卷,但目標磁碟不是 LVM 系統

嘗試tar, pax, cpio, 有緩衝的東西。

(cd /home && bsdtar cf - .) |
 pv -trab -B 500M |
 (cd /dest && bsdtar xpSf -)

我建議bsdtar不要這樣做,tar因為至少在某些 Linux 發行版tar上是 GNU tar,與bsdtar(from libarchive) 相反,它不處理保留擴展屬性或 ACL 或 linux 屬性。

pv將緩衝多達 500M 的數據,因此可以更好地適應兩個文件系統上讀寫速度的波動(儘管實際上,您的磁碟可能會比另一個磁碟慢,並且作業系統的回寫機制將緩衝作為好吧,所以它可能不會有太大的不同)。舊版本的pv不支持-a(用於平均速度報告),您可以pv -B 200M在那裡單獨使用。

在任何情況下,它們都不會受到限制cp,即按順序進行讀取和*寫入。*這裡我們有兩個tar同時工作,所以一個可以讀取一個 FS,而另一個正忙於等待另一個 FS 完成寫入。

對於 ext4,如果您要復製到至少與源一樣大的分區上,另請參閱clone2fswhich works like ntfsclone,即僅按順序複製分配的塊,因此旋轉儲存可能是最有效的。

partclone將其推廣到幾個不同的文件系統。

現在複製文件系統時需要考慮一些事項。

複製將複製所有目錄、文件及其內容……以及其他所有內容。現在其他一切都因文件系統而異。即使我們只考慮傳統 Unix 文件系統的共同特徵,我們也不得不考慮:

  • 連結:符號連結和硬連結。有時,我們必須考慮如何處理絕對符號連結或指向要複製的文件系統/目錄的符號連結
  • 最後修改、訪問和更改時間:只能使用文件系統 API(cp、tar、rsync…)複製前兩個
  • 稀疏性:你有一個 2TB 的稀疏文件,它是一個只佔用 3GB 磁碟空間的 VM 磁碟映像,其餘的都是稀疏的,做一個簡單的複制會填滿目標驅動器。

然後,如果您考慮ext4和大多數 Linux 文件系統,您將不得不考慮:

  • ACL 和其他擴展屬性(如用於 的屬性SELinux
  • Linux 屬性,如不可變或僅附加標誌

並非所有工具都支持所有這些,或者當它們支持時,您必須像 , … 的--sparse, --acls… 選項一樣顯式啟用它rsynctar並且當複製到不同的文件系統時,您必須考慮它們不支持的情況支持相同的功能集。

您可能還必須考慮文件系統本身的屬性,例如 UUID、為 root 保留的空間、fsck 頻率、日誌行為、目錄格式……

然後是更複雜的文件系統,你不能通過複製文件來真正複製數據。例如,考慮一下,zfs或者btrfs您何時可以拍攝子卷的快照並將它們分支出來……那些將擁有自己的專用工具來複製數據。

如果您想確保複製所有內容,則塊設備(或至少是分配的塊,如果可能)的字節到字節的副本通常是最安全的。但請注意 UUID 衝突問題,這意味著您要復製到更大的東西上(儘管您可以在複製之前調整源的快照副本的大小)。

引用自:https://unix.stackexchange.com/questions/66647