cp -a 的更快替代方案
對於我使用的 /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
(fromlibarchive
) 相反,它不處理保留擴展屬性或 ACL 或 linux 屬性。
pv
將緩衝多達 500M 的數據,因此可以更好地適應兩個文件系統上讀寫速度的波動(儘管實際上,您的磁碟可能會比另一個磁碟慢,並且作業系統的回寫機制將緩衝作為好吧,所以它可能不會有太大的不同)。舊版本的pv
不支持-a
(用於平均速度報告),您可以pv -B 200M
在那裡單獨使用。在任何情況下,它們都不會受到限制
cp
,即按順序進行讀取和*寫入。*這裡我們有兩個tar
同時工作,所以一個可以讀取一個 FS,而另一個正忙於等待另一個 FS 完成寫入。對於 ext4,如果您要復製到至少與源一樣大的分區上,另請參閱
clone2fs
which works likentfsclone
,即僅按順序複製分配的塊,因此旋轉儲存可能是最有效的。partclone將其推廣到幾個不同的文件系統。
現在複製文件系統時需要考慮一些事項。
複製將複製所有目錄、文件及其內容……以及其他所有內容。現在其他一切都因文件系統而異。即使我們只考慮傳統 Unix 文件系統的共同特徵,我們也不得不考慮:
- 連結:符號連結和硬連結。有時,我們必須考慮如何處理絕對符號連結或指向要複製的文件系統/目錄的符號連結
- 最後修改、訪問和更改時間:只能使用文件系統 API(cp、tar、rsync…)複製前兩個
- 稀疏性:你有一個 2TB 的稀疏文件,它是一個只佔用 3GB 磁碟空間的 VM 磁碟映像,其餘的都是稀疏的,做一個簡單的複制會填滿目標驅動器。
然後,如果您考慮
ext4
和大多數 Linux 文件系統,您將不得不考慮:
- ACL 和其他擴展屬性(如用於 的屬性
SELinux
)- Linux 屬性,如不可變或僅附加標誌
並非所有工具都支持所有這些,或者當它們支持時,您必須像 , … 的
--sparse
,--acls
… 選項一樣顯式啟用它rsync
,tar
並且當複製到不同的文件系統時,您必須考慮它們不支持的情況支持相同的功能集。您可能還必須考慮文件系統本身的屬性,例如 UUID、為 root 保留的空間、fsck 頻率、日誌行為、目錄格式……
然後是更複雜的文件系統,你不能通過複製文件來真正複製數據。例如,考慮一下,
zfs
或者btrfs
您何時可以拍攝子卷的快照並將它們分支出來……那些將擁有自己的專用工具來複製數據。如果您想確保複製所有內容,則塊設備(或至少是分配的塊,如果可能)的字節到字節的副本通常是最安全的。但請注意 UUID 衝突問題,這意味著您要復製到更大的東西上(儘管您可以在複製之前調整源的快照副本的大小)。