Использование rsync для резервного копирования удаленного компьютера по обратной ссылке ssh

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

Установка немного сложна. У меня есть удаленный компьютер за брандмауэром, и мне нужно обмениваться файлами с этим компьютером с домашнего компьютера. Домашний компьютер не имеет постоянного IP-адреса, поэтому я использую noip для передачи обратного ssh на текущий IP-адрес моего домашнего компьютера. Обратная команда ssh, на которой работает мой удаленный компьютер:

autossh -g -R 45678: localhost: 22 me@noip.net

На моем домашнем компьютере я запускаю программу noip2, которая сообщает noip.net о переадресации порта 45678 на мой домашний компьютер.

На моем домашнем компьютере я могу синхронизировать папку с документами на удаленном компьютере, используя:

rsync -navzu --stats -e "ssh -p 45678" --delete / home / me / Documents / me @ localhost: / home / me / Documents

Это отлично работает. Передаются только новые или обновленные документы, а удаленный компьютер обновляется.

Однако, когда я пытаюсь отменить это, чтобы обновить домашний домашний компьютер с удаленного компьютера следующим образом, это не работает:

rsync -navzu --stats -e "ssh -p 45678" - удалить меня @ localhost: / home / me / Documents / / home / me / Documents

rsync не видит ни одного файла в Documents на моем домашнем компьютере и пытается передать каждый файл в пробном режиме.

Есть идеи, что здесь не так?

1 ответ

Ну, похоже, я нашел ответ на свой вопрос, хотя проблема не в том, что я думал.

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

Таким образом, решение для исправления этой проблемы заключается в использовании сенсорного ввода правильных меток времени в удаленной системе. Я не очень знаком с оболочкой Linux, поэтому, возможно, есть более элегантное решение, но вот что сработало для меня:

1: монтировать удаленную файловую систему локально:

sshfs -p 45678 me @ localhost: /./mntpt/

2: поместите следующий скрипт оболочки в удаленную файловую систему и запустите его:

#!/bin/bash
find * -newermt "2014-04-22" ! -newermt "2014-04-23" | while read f; 
do
 touch "$f" -c -m -r "/home/me/Documents/$f"
done

Вышеперечисленное все еще требует много времени для запуска, но почти наверняка не так долго, как попытка выполнить резервное копирование всех файлов через довольно медленное соединение. Я пробовал различные однострочные командные решения оболочки вместо скрипта, но не нашел способа дважды ссылаться на список файлов в сенсорной команде.

Другие вопросы по тегам