Nhờ câu trả lời tuyệt vời của Scott Pack (tôi không biết làm thế nào với ssh trước đây), tôi có thể cung cấp cải tiến này (nếu bash
là vỏ của bạn). Điều này sẽ thêm nén song song, chỉ báo tiến trình và kiểm tra tính toàn vẹn trên liên kết mạng:
tar c file_list |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
tar xC /directory/to/extract/to
'
pv
là một chương trình xem tiến trình tốt đẹp cho đường ống của bạn và pigz
là một chương trình gzip song song sử dụng nhiều luồng như CPU của bạn theo mặc định (tôi tin tối đa 8 tối đa). Bạn có thể điều chỉnh mức độ nén để phù hợp hơn với tỷ lệ của CPU với băng thông mạng và trao đổi nó với pxz -9e
và pxz -d
nếu bạn có nhiều CPU hơn băng thông. Bạn chỉ phải xác minh rằng hai khoản tiền khớp với nhau khi hoàn thành.
Tùy chọn này hữu ích cho số lượng rất lớn dữ liệu cũng như mạng có độ trễ cao, nhưng không hữu ích nếu liên kết không ổn định và bị rớt. Trong những trường hợp đó, rsync có lẽ là sự lựa chọn tốt nhất vì nó có thể tiếp tục.
Đầu ra mẫu:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Đối với thiết bị khối:
dd if=/dev/src_device bs=1024k |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
dd of=/dev/src_device bs=1024k
'
Rõ ràng, hãy đảm bảo rằng chúng có cùng kích thước hoặc giới hạn với số đếm =, bỏ qua =, tìm kiếm =, v.v.
Khi tôi sao chép các hệ thống tệp theo cách này, trước tiên tôi sẽ thường dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
sử dụng hầu hết không gian không sử dụng, giúp tăng tốc độ xfer.