thay thế nhanh hơn cho cp -a


9

Đối với việc chuyển / nhà đơn giản sang đĩa khác, tôi sử dụng cp -amột cách cực kỳ chậm. Nên biết một cách hiệu quả hơn để hoàn thành nhiệm vụ. Tôi có / nhà được gắn dưới dạng âm lượng hợp lý, nhưng đĩa đích không phải là hệ thống LVM


4
Nếu cpchậm, các phương pháp khác cũng sẽ chậm. Trừ khi nó không sao chép theo định hướng tệp
daisy

Cố gắng chẩn đoán nút cổ chai của bạn, điều đó phụ thuộc vào thiết lập cụ thể của bạn. Bạn có thể muốn thử noatimetùy chọn gắn kết để giảm ghi không cần thiết, đặc biệt là hệ thống tệp nguồn.
Elias Torres Arroyo

Câu trả lời:


16

Hãy thử tar, pax, cpio, với một cái gì đó đệm.

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

Tôi đề nghị bsdtarthay tarvì bởi vì ít nhất trên một số bản phân phối Linux tarlà GNU tar trái với bsdtar(từ libarchive) không xử lý việc bảo tồn các thuộc tính mở rộng hoặc thuộc tính ACL hoặc linux.

pvsẽ đệm tới 500M dữ liệu để có thể điều chỉnh tốt hơn các dao động về tốc độ đọc và ghi trên hai hệ thống tệp (mặc dù trong thực tế, có thể bạn sẽ có một đĩa chậm hơn và cơ chế ghi lại của HĐH sẽ thực hiện việc đệm như tốt vì vậy nó có thể sẽ không làm cho nhiều sự khác biệt). Các phiên bản cũ hơn pvkhông hỗ trợ -a(để báo cáo tốc độ trung bình), bạn có thể sử dụng pv -B 200Mmột mình ở đó.

Trong mọi trường hợp, những cái đó sẽ không có giới hạn cp, đó là đọcviết tuần tự. Ở đây, chúng tôi có hai hoạt tarđộng đồng thời, vì vậy một người có thể đọc một FS trong khi người kia đang bận chờ đợi FS khác hoàn thành việc viết.

Đối với ext4 và nếu bạn đang sao chép vào một phân vùng lớn nhất bằng nguồn, hãy xem phần clone2fsnào hoạt động như thế ntfsclone, đó là sao chép các khối được phân bổ duy nhất và tuần tự, do đó, lưu trữ xoay có thể sẽ hiệu quả nhất.

partclone khái quát rằng với một vài hệ thống tập tin khác nhau.

Bây giờ một vài điều cần xem xét khi nhân bản một hệ thống tập tin.

Nhân bản sẽ sao chép tất cả các thư mục, tệp và nội dung của chúng ... và mọi thứ khác. Bây giờ mọi thứ khác thay đổi từ hệ thống tập tin để hệ thống tập tin. Ngay cả khi chúng tôi chỉ xem xét các tính năng phổ biến của các hệ thống tệp Unix truyền thống, chúng tôi phải xem xét:

  • liên kết: liên kết tượng trưng và liên kết cứng. Đôi khi, chúng ta sẽ phải xem xét phải làm gì với các liên kết tượng trưng hoặc liên kết tuyệt đối chỉ ra khỏi hệ thống tệp / thư mục để sao chép
  • lần sửa đổi, truy cập và thay đổi lần cuối: chỉ có thể sao chép hai lần đầu tiên bằng API hệ thống tập tin (cp, tar, rsync ...)
  • thưa thớt: bạn đã có tệp thưa thớt 2TB đó là hình ảnh đĩa VM chỉ chiếm 3 GB dung lượng đĩa, phần còn lại thưa thớt, thực hiện một bản sao ngây thơ sẽ lấp đầy ổ đĩa đích.

Sau đó, nếu bạn xem xét ext4và hầu hết các hệ thống tệp Linux, bạn sẽ phải xem xét:

  • ACL và các thuộc tính mở rộng khác (như các thuộc tính được sử dụng cho SELinux)
  • Các thuộc tính Linux như cờ không thay đổi hoặc chỉ nối thêm

Không phải tất cả các công cụ đều hỗ trợ tất cả những công cụ đó hoặc khi chúng hoạt động, bạn phải kích hoạt nó một cách rõ ràng như --sparse, --acls... tùy chọn rsync, tar... Và khi sao chép vào một hệ thống tệp khác, bạn phải xem xét trường hợp chúng không hỗ trợ bộ tính năng tương tự.

Bạn cũng có thể phải xem xét các thuộc tính của chính hệ thống tệp như UUID, không gian dành riêng cho root, tần số fsck, hành vi nhật ký, định dạng của thư mục ...

Sau đó, có các hệ thống tệp phức tạp hơn, nơi bạn thực sự không thể sao chép dữ liệu bằng cách sao chép tệp. Xem xét ví dụ zfshoặc btrfskhi bạn có thể chụp ảnh nhanh các subvolume và tách chúng ra ... Chúng sẽ có các công cụ chuyên dụng riêng để sao chép dữ liệu.

Bản sao byte sang byte của thiết bị khối (hoặc ít nhất là các khối được phân bổ khi có thể) thường an toàn nhất nếu bạn muốn đảm bảo rằng bạn sao chép mọi thứ. Nhưng hãy cẩn thận với sự cố xung đột UUID và điều đó ngụ ý rằng bạn đang sao chép vào một thứ gì đó lớn hơn (mặc dù bạn có thể thay đổi kích thước bản sao chụp nhanh của nguồn trước khi sao chép).


1
GNU tar có --aclstùy chọn, để lưu trữ ACL vào kho lưu trữ. Và tôi sẽ ngạc nhiên nếu một công cụ ngoài hành tinh (thuộc loại) thích bsdtarxử lý nó tốt hơn công cụ bản địa (về cơ bản) ...
vonbrand

@vonbrand. Tar của bạn phải được vá cho điều đó (tôi nghĩ RedHat có một bản vá cho GNU tar cho ACL), vì phiên bản mới nhất của GNU tar không hỗ trợ tùy chọn như vậy. Có tồn tại một số triển khai của tarcho Linux ( star, bsdtar, tar), tôi không nhận thức được rằng GNU tar là bất kỳ tốt hơn so với những người khác. Sự lựa chọn cho các công cụ GNU thường mang tính chính trị nhiều hơn là kỹ thuật (xem ví dụ bash).
Stéphane Chazelas

1
Sử dụng các công cụ GNU có thể là một lựa chọn chính trị, tuy nhiên nó vẫn là lựa chọn mặc định. Và vì họ là nhiều phổ biến hơn các lựa chọn thay thế, đó cũng là nhiều nhà phát triển (và khác) nhân lực phía sau họ.
vonbrand

cảm ơn, lần sau tôi sẽ sử dụng pv và tar thay vì cp
Yurij73

@ StéphaneChazelas Hiện tại GNU tar không hỗ trợ--acls
Ploni

4

Tôi khuyên bạn nên rsync, ví dụ:

rsync -av --progress --stats dest orig

Hoặc, để chuyển với nén:

rsync -avz --progress --stats dest orig

1
rsyncnói chung là chậm hơn rất nhiều so với cphoặctar|tar
Stéphane Chazelas

Cảm ơn thông tin này :) nhưng tôi chưa bao giờ so sánh hai ...
Victor Aurélio


Tôi sẽ không tin bài báo đó quá nhiều. Tôi sử dụng rsync khá thường xuyên và sao chép thường xuyên với tốc độ 130-170 MB / giây.
laebshade

9
rsyncPhần lớn hiệu quả là bạn đã có sẵn một phần dữ liệu nguồn trên ổ đĩa đích vì nó sẽ chỉ truyền dữ liệu bị thiếu / thay đổi. Tôi sẽ không sử dụng nó cho một "bản sao đầu tiên" nhanh chóng.
Totor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.