Điểm:0

Nén Tar và 7z trên Linux - sự khác biệt là gì?

lá cờ tr

Tôi có một vấn đề! Tôi có một tập lệnh sao lưu trong python. Nó sao lưu tất cả các thư mục trong /var/www/ thành .tar.7z khác nhau cho mỗi thư mục bên trong /var/www/

Vấn đề là thời gian nén rất chậm. Và đối với các thư mục lớn 4GB, đôi khi nó dừng nén ở mức 1G, đôi khi ở mức 1,5 GB.

Đây là hàng cho lần nén này:

os.system("tar cf - -C %s . 2>/dev/null 3>/dev/null | 7za a -p%s -si %s 1>/dev/null 2>/dev/null 3> /dev/null" % (cf, self.config.get(jn, "archpass"), tên tệp))

Khi tôi cố gắng tar -cf nén-dir.tar /var/www/bigsite.com/ thư mục 4GB, nó chạy tạo .tar cực kỳ nhanh trong vài phút là xong.

Tuy nhiên, trong tập lệnh python, tệp tạm thời được tạo ngay khi .tar bắt đầu được tạo, tăng kích thước rất chậm. Sau khoảng 10 phút, nó đạt khoảng 1GB ...và ngay sau đó nó ngừng tăng, không hiển thị bất kỳ lỗi nào trong bảng điều khiển.

Có cách nào để tôi có thể mô phỏng điều tương tự đang xảy ra ở đây không: tar cf - -C %s . 2>/dev/null 3>/dev/null trực tiếp trong bash? Bởi vì rõ ràng nó không giống như tar -cf nén-dir.tar /var/www/bigsite.com/ vì nó chạy nhanh hơn nhiều.

Có thể nếu tôi chạy tar trực tiếp trong bash thì có thể xuất hiện lỗi. Tất nhiên nếu bạn có bất kỳ ý tưởng nào khác, xin vui lòng cho tôi biết.

lá cờ in
Hầu hết các phiên bản tar đều hỗ trợ nén gzip tích hợp sẵn bằng cách thêm tùy chọn `z`. Gzip không hiệu quả bằng 7zip về kích thước nén nhưng có thể nhanh hơn một chút. Đối với sự cố 7zip, tôi nghi ngờ phiên bản 7zip cũ hoặc bị lỗi vì 7zip sẽ không gặp sự cố với các tệp lớn.Bạn cũng không nhất thiết phải sử dụng 7zip, các trình nén khác như bzip2 cũng có thể được sử dụng. Và bằng cách sử dụng các tham số nhất định, bạn có thể giảm hiệu quả nén để tăng tốc quá trình sao lưu.
Điểm:1
lá cờ ar

Tar không tự nén. Điều đó có nghĩa là thông lượng gần như hoàn toàn bị giới hạn bởi khả năng IO. Ổ đĩa cứng có thể dễ dàng xử lý 100 MB/giây, do đó, 4GB R/W có thể thực hiện được trong 80 giây hoặc lâu hơn - 4GB đọc và 4GB ghi. SSD có thể thực hiện hàng trăm megabyte mỗi giây trở lên.

Tuy nhiên, 7z không nén. Nén về cơ bản là giới hạn CPU, không giới hạn bộ nhớ.

Để benchmark 7z, bạn có thể chạy 7z b. Trên máy tính xách tay tôi đang sử dụng để viết bài này, 7z có thể xử lý 20MB/s. Bộ lưu trữ NVMe của tôi có thể xử lý 2GB/giây. Đó là hai bậc độ lớn trong sự khác biệt! Nén 4GB sẽ mất 200 giây; chỉ cần nhét nó vào tarball sẽ mất 2 giây!

Các thuật toán nén khác nhau có sự đánh đổi khác nhau. 7z có thể được cấu hình để sử dụng mức độ nén khác nhau, trong 10 bước.

Bạn nên thử nghiệm với các cấp độ khác nhau để tìm ra sự đánh đổi kích thước tốc độ chính xác cho ứng dụng của mình.

Có cách nào để tôi có thể mô phỏng điều tương tự đang xảy ra ở đây không: tar cf - -C %s . 2>/dev/null 3>/dev/null trực tiếp trong bash? Bởi vì rõ ràng nó không giống tar -cf nén-dir.tar /var/www/bigsite.com/ vì nó chạy nhanh hơn nhiều.

Chắc chắn, đó là một lệnh shell. os.system() chỉ cần chạy các lệnh được chỉ định. Lệnh tar trong ví dụ của bạn thêm %S vào một tarball và xuất kết quả ra tiêu chuẩn. Trong ví dụ đầy đủ bạn cung cấp đó là 7z.

Nhưng như tôi đã nói ở trên: không phải tar chậm. Đó là 7z.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.