Grâce à la réponse merveilleuse de Scott Pack (je ne savais pas comment faire cela avec ssh auparavant), je peux offrir cette amélioration (si bash
c'est votre shell). Cela ajoutera une compression parallèle, un indicateur de progression et vérifiera l’intégrité sur le lien réseau:
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
est un bon programme de visualisation de progrès pour votre pipe et pigz
est un programme gzip parallèle qui utilise autant de threads que votre CPU en a par défaut (je crois jusqu’à 8 max). Vous pouvez ajuster le niveau de compression afin de mieux adapter le ratio processeur à bande passante réseau et le remplacer avec pxz -9e
et pxz -d
si vous avez beaucoup plus de CPU que de bande passante. Il vous suffit de vérifier que les deux sommes correspondent à la fin.
Cette option est utile pour les très grandes quantités de données et les réseaux à latence élevée, mais elle n’est pas très utile si le lien est instable et tombe. Dans ces cas, rsync est probablement le meilleur choix car il peut reprendre.
Exemple de sortie:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Pour les périphériques en mode bloc:
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
'
Évidemment, assurez-vous qu'ils ont la même taille ou la même limite avec count =, skip =, seek =, etc.
Lorsque je copie les systèmes de fichiers de cette façon, je vais souvent d'abord mettre dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
à zéro la majeure partie de l'espace inutilisé, ce qui accélère le xfer.