Использование Rsync для перемещения и синхронизации больших объемов данных в одном направлении

Детализация подходаuniq-из комментариев выше:

$ tr ',' '\t' < temp/testfile | uniq -f 1 | tr '\t' ','
1,ed23,jon,doe,director,usa
3,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india

Использование \tв качестве разделителя, чтобы не забиваться пробелами в ваших данных.

uniqсохранит первую из найденных уникальных строк. Если вам абсолютно необходимо сохранить «последние» записи, вам нужно работать с конца до начала вашего файла. Вы можете сделать это, используяtac:

$ tac temp/testfile|tr ',' '\t' | uniq -f 1 | tr '\t' ','|tac
2,ed23,jon,doe,director,usa
4,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india

0
22.09.2021, 19:16
1 ответ

В вашем решении есть две основные проблемы, поэтому создание каждой копии занимает так много времени:

  • Вы не копируете время файла, поэтому rsyncне может определить и пропустить уже скопированные файлы. Поэтому каждый вызов будет копировать все
  • Вы копируете из того, что rsyncсчитает одной частью локальной файловой системы, в другую. В этом случае вы не получаете добавочные копии, но любое изменение в файле приводит к полному копированию всего этого
  • .

Исправления

  • Включите либо --times(-t), либо --archive(-a), чтобы захватить большую часть метаданных за одно обращение. Сделайте это, даже если вам придется продолжать использовать NFS
  • Не используйте NFS, вместо этого используйте sshтранспорт на сервер NFS(remoteHostв моем примере)
  • Сжимайте сетевой трафик с помощью--compress(-z)

Пример

rsync -az /archive/images/ remoteHost:/mnt/backup/archive/images

Я обычно включаю--partial --progress --verbose(-Pv)и при работе в интерактивном режиме

При первом запуске этой измененной команды в вашей ситуации вы обнаружите, что ее выполнение по-прежнему занимает много времени. Это связано с тем, что rsyncне имеет быстрого способа определить, какие файлы обновлены -, и он делает это со временем и размером файлов -, поэтому он должен сравнивать каждую пару файлов (источник и место назначения ), чтобы обнаружить только метаданные разные. После этого rsyncбудет рассматривать файл для копирования только в том случае, если его размер или время отличаются, поэтому неизмененные файлы будут пропущены.

1
23.09.2021, 07:00

Теги

Похожие вопросы