2

Я пытаюсь использовать rsync для копирования набора файлов из одной системы в другую. Я запускаю команду как обычный пользователь (не root). В удаленной системе файлы принадлежат apache, а при копировании они, очевидно, принадлежат локальной учетной записи (fred).

Моя проблема в том, что каждый раз, когда я запускаю команду rsync, все файлы повторно синхронизируются, даже если они не изменились. Я думаю, что проблема в том, что rsync видит, что владельцы файлов отличаются, и мой локальный пользователь не имеет возможности сменить владельца на apache, но я не включаю опции -a или -o , поэтому я подумал, что это не будет проверено. , Если я запускаю команду от имени пользователя root, файлы пересылаются, принадлежащие apache, и не появляются повторно, если я снова запускаю команду. Однако я не могу запустить это как root по другим причинам. Вот команда:

/usr/bin/rsync --recursive --rsh=/usr/bin/ssh --rsync-path=/usr/bin/rsync --verbose root@server.example.com:/src/dir/ /local/dir

1 ответ1

3

Вот ответ на вашу проблему:

-c, --checksum
      This changes the way rsync checks if the files have been changed and are in need of a  transfer.   Without  this  option,
      rsync  uses  a "quick check" that (by default) checks if each file's size and time of last modification match between the
      sender and receiver.  This option changes this to compare a 128-bit checksum for each file  that  has  a  matching  size.
      Generating  the  checksums  means  that both sides will expend a lot of disk I/O reading all the data in the files in the
      transfer (and this is prior to any reading that will be done to transfer changed files), so this  can  slow  things  down
      significantly.

      The  sending  side  generates  its checksums while it is doing the file-system scan that builds the list of the available
      files.  The receiver generates its checksums when it is scanning for changed files, and will checksum any file  that  has
      the  same  size  as the corresponding sender's file:  files with either a changed size or a changed checksum are selected
      for transfer.

      Note that rsync always verifies that each transferred file was correctly reconstructed on the receiving side by  checking
      a  whole-file  checksum  that is generated as the file is transferred, but that automatic after-the-transfer verification
      has nothing to do with this option's before-the-transfer "Does this file need to be updated?" check.

      For protocol 30 and beyond (first supported in 3.0.0), the checksum used is MD5.  For older protocols, the checksum  used
      is MD4.

Итак, бегите:

/usr/bin/rsync -c --recursive --rsh=/usr/bin/ssh --rsync-path=/usr/bin/rsync --verbose root@server.example.com:/src/dir/ /local/dir

Обратите внимание, что при использовании этой опции может быть компромисс между временем и диском. Лично я бы, наверное, просто синхронизировал mtimes файла:

/usr/bin/rsync -t --recursive --rsh=/usr/bin/ssh --rsync-path=/usr/bin/rsync --verbose root@server.example.com:/src/dir/ /local/dir

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .