Как точно rsync решает, что синхронизировать?

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

Сценарий: я rsync -av --progress /dir/a /dir/b и это делает свою вещь.

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

Я добавляю новые файлы к/dir/a и переименовываю некоторые файлы в/dir/b и возможно удаляю некоторых также.

Если я работаю rsync -av --progress /dir/a /dir/b снова, что будет скопировано? Просто новые файлы, потому что это знает то, что это ранее скопировало, или файлы, которые были переименованы/удалены также, потому что они больше не присутствуют.

И в качестве награды, если ранее скопированные файлы копируются снова, там способ предотвратить это, так, чтобы только новые дополнения к/dir/a были скопированы?

В данный момент я - счастливые вещи проверки вручную, но поскольку данные становятся больше, я испытываю необходимость в большем количестве автоматизации для выполнения этой задачи.

14
задан 29 October 2017 в 19:24

3 ответа

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

Нет, это не знает то, что это сделало в предыдущем выполнении. Это выдерживает сравнение, данные по стороне получения с данными, чтобы быть отправляют. С достаточно маленькими данными это не будет очевидно, но когда у Вас будут достаточно большие каталоги, время потратило сравнение перед копированием на самом деле, запуски легко чувствуют.

Проверка по умолчанию в течение времени изменения файла и размеров. От man rsync:

-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.

И:

-u, --update
      This  forces  rsync  to  skip  any  files  which  exist  on  the
      destination  and  have  a  modified  time that is newer than the
      source  file.   (If  an  existing   destination   file   has   a
      modification time equal to the source file’s, it will be updated
      if the sizes are different.)

Обратите внимание, что они не подразумеваются опциями, которые Вы использовали. -a :

-a, --archive               archive mode; same as -rlptgoD (no -H)
-r, --recursive             recurse into directories
-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
    --devices               preserve device files (super-user only)
    --specials              preserve special files
-D                          same as --devices --specials
-t, --times                 preserve times
17
ответ дан 23 November 2019 в 02:57

Общее

Если я правильно понимаю, rsync -av не имеет памяти, поэтому он будет копировать файлы, которые также были переименованы / удалены, поскольку они присутствуют в источнике, но больше не присутствуют в цели.

Советы

  • Используйте опцию -n, «пробный запуск», чтобы проверить, что происходит перед запуском командной строки rsync.

  • Обратите внимание на особое значение косой черты после исходного каталога и просмотрите разницу между

    rsync -av --progress dir/a/ dir/b
    

    и

    rsync -av --progress dir/a dir/b
    

    , которая описана в руководстве [ 116].

    [+1121]

Пример

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

Но вы можете удалить его из исходного каталога или поместить имя файла в файл excluded и использовать опцию --exclude-from=excluded (для многих файлов) или просто --exclude=PATTERN для одного или нескольких файлов.

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2

sent 103 bytes  received 25 bytes  256.00 bytes/sec
total size is 13  speedup is 0.10 (DRY RUN)

$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
              6 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
file-2
              7 100%    6.84kB/s    0:00:00 (xfr#2, to-chk=0/3)

sent 196 bytes  received 57 bytes  506.00 bytes/sec
total size is 13  speedup is 0.05

$ echo textx-3>./dir/a/file-3

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 121 bytes  received 22 bytes  286.00 bytes/sec
total size is 21  speedup is 0.15 (DRY RUN)

$ rm dir/b/file-1 
rm: ta bort normal fil 'dir/b/file-1'? y

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 104 bytes  received 22 bytes  252.00 bytes/sec
total size is 15  speedup is 0.12 (DRY RUN)

Альтернатива: unison

Вы можете протестировать инструмент unison , который является синхронизирующим инструментом . Он предоставляет визуальный метод для выявления особых случаев и решения, что делать. Существует версия с графическим интерфейсом ( unison-gtk ).

6
ответ дан 23 November 2019 в 02:57

Это только копирует новые файлы в/dir/a. Независимо от того, что Вы выполняете,/dir/b будет проигнорирован, если Вы не будете использовать - удаляют опцию. В этом случае переименованные файлы в/dir/b будут удалены. Это вынудит/dir/b стать точно как/dir/a.

О премии Вы имеете в виду как в случае переименования файлов в/dir/a, и затем rsyncing к/dir/b? Я не думаю, что существует способ предотвратить rsync от просто копирования файлов снова в этом случае.

1
ответ дан 23 November 2019 в 02:57

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

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