Завдяки чудовій відповіді Скотта Пака (я раніше не знав, як це зробити з ssh), я можу запропонувати це вдосконалення (якщо bash
це ваша оболонка). Це додасть паралельне стиснення, показник прогресу та перевірку цілісності через мережеве посилання:
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
це хороша програма перегляду прогресу для вашої труби і pigz
є паралельною програмою gzip, яка використовує стільки потоків, скільки у вашому процесорі за замовчуванням (я вважаю, що до 8 макс.). Ви можете налаштувати рівень стиснення, щоб краще відповідати співвідношенню процесора до пропускної здатності мережі та замінити його, pxz -9e
і pxz -d
якщо у вас набагато більше процесора, ніж пропускна здатність. Вам потрібно лише переконатися, що дві суми відповідають після завершення.
Цей варіант корисний для дуже великого обсягу даних, а також для мереж з високою затримкою, але не дуже корисний, якщо посилання нестабільне і перепадає. У цих випадках rsync - це, мабуть, найкращий вибір, оскільки він може відновитись.
Вибірка зразка:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Для блокових пристроїв:
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
'
Очевидно, переконайтеся, що вони однакового розміру чи обмеження з count =, пропустіть =, шукайте = тощо.
Коли я копіюю файлові системи таким чином, я часто спочатку dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
нулю більшість невикористаного простору, що прискорює xfer.