Làm cách nào để tăng tốc các thao tác trên các tệp thưa thớt bằng tar, gzip, rsync?


9

Tôi có một tập tin thưa thớt. ( du -hbáo cáo 3G và du -h --apparent-sizebáo cáo 100G.) Cho đến nay, rất tốt.

Bây giờ, khi tôi muốn nén tệp bằng cách sử dụng tarhoặc gửi nó qua mạng bằng cách sử dụng rsync, nó sẽ cần nhiều thời gian như 3G. Có vẻ như các công cụ này đọc tất cả các số không.

Tôi nghĩ rằng các lỗ được đánh dấu bằng cách nào đó và những công cụ này bằng cách nào đó có thể bỏ qua chúng?

Có khả năng không có vấn đề với tập tin của tôi?

Đây có phải là một tính năng bị thiếu trong tarrsynckhông tìm kiếm các tệp thưa thớt? Tôi đã sử dụng tartham số --sparse, nhưng điều đó không tăng tốc mọi thứ. Không rsynctham số --sparse.

Có cách nào để tăng tốc các công cụ này trên các tệp thưa thớt không?

Câu trả lời:


7

bsdtar(ít nhất là từ libarchive3.1.2) có thể phát hiện các phần thưa thớt bằng cách sử dụng FS_IOC_FIEMAPioctl trên các hệ thống tệp hỗ trợ nó (mặc dù nó cũng hỗ trợ một số API khác), tuy nhiên, ít nhất là trong thử nghiệm của tôi, thật kỳ lạ, đó là không thể xử lý các tartệp mà nó tự tạo (trông giống như một lỗi).

Tuy nhiên, sử dụng GNU tarđể giải nén chúng hoạt động, nhưng sau đó GNU tar không thể xử lý một số thuộc tính mở rộng mà bsdtar hỗ trợ.

Vì thế

bsdtar cf - sparse-files | (cd elsewhere && tar xpf -)

hoạt động miễn là các tệp không có thuộc tính hoặc cờ mở rộng.

Nó vẫn không hoạt động đối với các tệp hoàn toàn thưa thớt (chỉ là số không) vì FS_IOC_FIEMAPioctl sau đó trả về 0 mức và có vẻ như bsdtarkhông xử lý đúng cách (một lỗi khác?).

star( Schily tar ) là một triển khai tar mã nguồn mở khác có thể phát hiện các tệp thưa thớt (sử dụng -sparsetùy chọn) và không có các lỗi đó bsdtar(nhưng không được đóng gói bởi nhiều hệ thống).


2

Bài viết này có một số gợi ý hữu ích cho rsyncít nhất:

Các vấn đề

Sử dụng rsync --sparse works, nhưng gây ra một lượng lớn đĩa ghi không cần thiết. Thay đổi 10 byte trên 50 GB dài (sử dụng 1GB) chỉ khiến một hoặc hai khối được viết, điều này khiến 1GB bị ghi. Điều này là chậm và có thể không tốt cho tuổi thọ của đĩa.

Sử dụng rsync --inplacecác tác phẩm, nhưng tạo ra các tệp không thưa thớt.

Bạn không thể sử dụng --spzzy và --inplace cùng một lúc :-( điều này không được phép bởi rsync. Rsync: --spzzy không thể được sử dụng với --inplace

Giải pháp

Nếu bạn sử dụng --inplace để cập nhật một tệp thưa thớt có sẵn, tệp sẽ vẫn còn thưa thớt và chỉ có một số lượng nhỏ các khối được viết. Chỉ khi rsync --inplace tạo một tệp mà nó làm cho nó không thưa thớt.

Vì vậy, giải pháp là tạo một tệp tương ứng, có độ dài chính xác, trống, thưa thớt trên máy đích cho mọi tệp trên máy nguồn - nếu tệp chưa xuất hiện trên máy đích.

Sau đó, rsync --inplace sẽ hoạt động như dự định, để lại các tệp thưa thớt và chỉ ghi các khối đã thay đổi vào đĩa.

Vì vậy, nếu tôi đọc chính xác, trước tiên bạn muốn tạo một tệp thưa thớt trống rỗng trên mục tiêu. Bạn có thể làm điều này với

truncate -s 3G filename

Sau đó bạn có thể sử dụng rsync --inplaceđể sao chép các tập tin qua. Điều này chỉ cần thiết một lần.


Các bài viết cùng gợi ý sử dụng Virtsync đó là

một công cụ dòng lệnh Linux thương mại $ 49 để đồng bộ hóa nội dung của các tệp lớn (như hình ảnh và cơ sở dữ liệu đĩa máy ảo).

Đây có thể là giải pháp tốt nhất nếu bạn sẵn sàng trả tiền vì nó dường như được viết riêng cho loại tình huống này.

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.