Dzięki cudownej odpowiedzi Scott Pack (wcześniej nie wiedziałem, jak to zrobić z ssh), mogę zaoferować to ulepszenie (jeśli bash
jest to twoja powłoka). Spowoduje to dodanie kompresji równoległej, wskaźnika postępu i sprawdzenie integralności w łączu sieciowym:
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
jest ładnym programem do przeglądania postępu dla twojego potoku i pigz
jest równoległym programem gzip, który domyślnie wykorzystuje tyle wątków, ile ma procesor (wierzę, że maksymalnie 8). Można dostosować poziom kompresji, aby lepiej dopasować stosunek CPU do sieci przepustowość i zamieniać go z pxz -9e
a pxz -d
jeśli masz dużo więcej niż przepustowość procesora. Musisz tylko sprawdzić, czy obie sumy są zgodne po zakończeniu.
Ta opcja jest przydatna w przypadku bardzo dużych ilości danych, a także sieci o dużych opóźnieniach, ale nie jest bardzo pomocna, jeśli łącze jest niestabilne i spada. W takich przypadkach rsync jest prawdopodobnie najlepszym wyborem, ponieważ można go wznowić.
Przykładowe dane wyjściowe:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
W przypadku urządzeń blokowych:
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
'
Oczywiście, upewnij się, że mają ten sam rozmiar lub limit z count =, skip =, seek = itd.
Kiedy dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
kopiuję systemy plików w ten sposób, często najpierw zeruję większość nieużywanego miejsca, co przyspiesza xfer.