Что означает f +++++++++ в журналах rsync?

Я использую rsync для резервного копирования файлов моего сервера, и у меня есть два вопроса:

  1. В середине процесса мне нужно остановить и снова запустить rsync.
    Будет ли rsync начаться с того места, где он остановился, или он будет перезапущен с самого начала?

  2. В файлах журнала вижу "f+++++++++". Что это значит?

e.g.:

2010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log
2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log
2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.017a771cc19b18cd
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.01eade9d317ca79a

person GodFather    schedule 20.12.2010    source источник


Ответы (4)


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

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

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

2 - Каждый символ представляет собой код, который можно перевести, если вы прочитаете раздел для -i, --itemize-changes в man rsync

Расшифровка вашего примера файла журнала из вопроса:

>f.st......

> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different

.d..t......

. - the item is not being updated (though it might have attributes 
    that are being modified)
d - it is a directory
t - the time stamp is different

>f+++++++++

> - the item is received
f - a regular file
+++++++++ - this is a newly created item

Соответствующая часть справочной страницы rsync:

-i, --itemize-changes

Запрашивает простой подробный список изменений, которые вносятся в каждый файл, включая изменения атрибутов. Это в точности то же самое, что и указание --out-format = '% i% n% L'. Если вы повторите эту опцию, неизмененные файлы также будут выводиться, но только если принимающий rsync имеет версию не ниже 2.6.7 (вы можете использовать -vv со старыми версиями rsync, но это также включает вывод других подробных сообщений- мудрецы).

Экземпляр «% i» имеет загадочный вывод, состоящий из 11 букв. Общий формат похож на строку YXcstpoguax, где Y заменяется типом выполняемого обновления, X заменяется типом файла, а другие буквы представляют атрибуты, которые могут выводиться, если они изменяются.

Типы обновления, которые заменяют Y, следующие:

  • < означает, что файл передается на удаленный хост (отправляется).
  • > означает, что файл передается на локальный хост (получен).
  • c означает, что для элемента происходит локальное изменение / создание (например, создание каталога или изменение символической ссылки и т. Д.).
  • h означает, что элемент является жесткой ссылкой на другой элемент (требуется --hard-links).
  • . означает, что элемент не обновляется (хотя у него могут быть изменяемые атрибуты).
  • * означает, что остальная часть области вывода с разбивкой по элементам содержит сообщение (например, «удаление»).

Типы файлов, которые заменяют X: f для файла, d для каталога, L для символической ссылки, D для устройства и S для специального файла (например, именованных сокетов и FIFO).

Другие буквы в приведенной выше строке - это фактические буквы, которые будут выводиться, если связанный атрибут для элемента обновляется, или "." без изменений. Три исключения из этого: (1) вновь созданный элемент заменяет каждую букву на «+», (2) идентичный элемент заменяет точки пробелами и (3) неизвестный атрибут заменяет каждую букву на «?» (это может произойти при разговоре со старым rsync).

Атрибут, связанный с каждой буквой, выглядит следующим образом:

  • c означает, что либо у обычного файла другая контрольная сумма (требуется --checksum), либо что символическая ссылка, устройство или специальный файл имеют измененное значение. Обратите внимание, что если вы отправляете файлы в rsync до версии 3.0.1, этот флаг изменения будет присутствовать только для обычных файлов с разной контрольной суммой.
  • s означает, что размер обычного файла отличается и будет обновляться при передаче файла.
  • t означает, что время модификации другое и обновляется до значения отправителя (требуется --times). Альтернативное значение T означает, что время модификации будет установлено равным времени передачи, что происходит, когда файл / символическая ссылка / устройство обновляется без --times и когда символическая ссылка изменяется, и получатель не может установить ее время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо правильного флага T для этого сбоя установки времени.)
  • p означает, что разрешения разные и обновляются до значения отправителя (требуется --perms).
  • o означает, что владелец другой и обновляется до значения отправителя (требуются привилегии --владелец и суперпользователь).
  • g означает, что группа отличается и обновляется до значения отправителя (требуется --group и права доступа для установки группы).
  • Слот u зарезервирован для использования в будущем.
  • a означает, что информация ACL изменилась.
  • x означает, что информация расширенного атрибута изменилась.

Возможен еще один вывод: при удалении файлов «% i» будет выводить строку «* deleting» для каждого удаляемого элемента (при условии, что вы разговариваете с достаточно свежим rsync, чтобы он регистрировал удаления, а не выводил их как подробное сообщение).

person mit    schedule 20.08.2012
comment
Этот пост / ответ сейчас очень старый, но мне пришлось написать об этом комментарий. Это один из лучших ответов, которые я когда-либо видел о rsync. Спасибо, спасибо - person Jorge; 25.07.2020

Некоторое время назад мне нужно было понять rsync вывод сценария, который я писал. В процессе написания этого сценария я поискал в Google и пришел к тому, что @mit написал выше. Я использовал эту информацию, а также документацию из других источников, чтобы создать свой собственный учебник по битовым флагам и как заставить rsync выводить битовые флаги для всех действий (по умолчанию этого не происходит).

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

С комбинацией флага --itemize-changes и флага -vvv rsync дает нам подробный вывод обо всех изменениях файловой системы, которые были идентифицированы в исходном каталоге, по сравнению с целевым каталогом. Битовые флаги, созданные rsync, затем можно декодировать, чтобы определить, что изменилось. Чтобы расшифровать значение каждого бита, используйте следующую таблицу.

Объяснение каждой битовой позиции и значения в выводе rsync:

YXcstpoguax  path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
||              changed value (for symlinks, devices, and special files)
|╰---------- the file type:
|            f: for a file,
|            d: for a directory,
|            L: for a symlink,
|            D: for a device,
|            S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
             <: file is being transferred to the remote host (sent)
             >: file is being transferred to the local host (received)
             c: local change/creation for the item, such as:
                - the creation of a directory
                - the changing of a symlink,
                - etc.
             h: the item is a hard link to another item (requires 
                --hard-links).
             .: the item is not being updated (though it might have
                attributes that are being modified)
             *: means that the rest of the itemized-output area contains
                a message (e.g. "deleting")

Пример вывода rsync для различных сценариев:

>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt 
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/

Получение вывода rsync (сосредоточено на битовых флагах):

В моих экспериментах и ​​флаг --itemize-changes , и флаг -vvv необходимы, чтобы rsync выводила запись для всех изменений файловой системы. Без тройного подробного (-vvv) флага я не видел в списке изменений каталогов, ссылок и устройств. Стоит поэкспериментировать с вашей версией rsync, чтобы убедиться, что она соблюдает и отмечает все, что вы ожидали.

Один из удобных способов использования этого метода - добавить к команде флаг --dry-run и собрать список изменений, определенный rsync, в переменную (без внесения каких-либо изменений), чтобы вы могли выполнить некоторую обработку списка самостоятельно. Что-то вроде следующего будет фиксировать вывод в переменной:

file_system_changes=$(rsync --archive --acls --xattrs \
    --checksum --dry-run \
    --itemize-changes -vvv \
    "/some/source-path/" \
    "/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')

В приведенном выше примере вывод (stdout) из rsync перенаправляется на grep (через stdin), поэтому мы можем изолировать только строки, содержащие битовые флаги.

Обработка захваченного вывода:

Затем содержимое переменной можно регистрировать для дальнейшего использования или сразу же перебирать для интересующих элементов. Я использую эту точную тактику в сценарии, который написал во время исследования rsync. Примеры сообщений можно найти в скрипте (https://github.com/jmmitchell/movestough). -обработка захваченного вывода для изоляции новых файлов, дубликатов файлов (одно и то же имя, одно и то же содержимое), конфликтов файлов (одно и то же имя, другое содержимое), а также изменений в структурах подкаталогов.

person John Mark Mitchell    schedule 25.04.2016
comment
очень полезный! что такое -T в выводе журнала? - person Pol Hallen; 12.09.2017
comment
Пол, вы спрашиваете о флаге -T для rsync? - person John Mark Mitchell; 13.09.2017
comment
Pol, если я правильно понимаю ваш вопрос, t в журнале rsync означает, что два сравниваемых файла имеют разные временные метки. Это означает, что они были созданы или изменены в разное время. - person John Mark Mitchell; 15.09.2017
comment
Джон, так что -T и -t одно и то же? - person Pol Hallen; 15.09.2017
comment
Я считаю, что T в выводе означает, что время было обновлено до текущего времени, ‹f..T ...... Rise.mp3. По крайней мере, это то, что я наблюдаю. t будет временем локального файла. - person C. Kelly; 07.02.2018
comment
Я опоздал на пару лет, но t vs T объясняется на странице руководства: t означает, что время модификации другое и обновляется до значения отправителя (требуется --times). Альтернативное значение T означает, что время модификации будет установлено равным времени передачи, что происходит, когда файл / символическая ссылка / устройство обновляется без --times и когда символическая ссылка изменяется, и получатель не может установить свое время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо правильного флага T для этого сбоя установки времени.) - person user187557; 23.03.2020

1) Wodin, это не совсем так. Если используется тег --partial или -P (такой же, как --partial --progress), rsync возобновляет прерванные передачи.

2) Точно, это обычный вывод для тега --itemize-changes.

person Joao Figueiredo    schedule 18.01.2011

1.) Он «перезапустит синхронизацию», но не будет передавать файлы с одинаковым размером и отметкой времени и т. Д. Сначала он составляет список файлов для передачи, и на этом этапе он увидит, что он уже передал некоторые файлы. и пропустит их. Вы должны указать rsync, чтобы он сохранял отметки времени и т. Д. (Например, используя rsync -a ...)

Пока rsync передает файл, он будет называть его как-то вроде .filename.XYZABC вместо filename. Затем, когда он завершит передачу этого файла, он переименует его. Итак, если вы завершите работу rsync во время передачи большого файла, вам придется использовать параметр --partial, чтобы продолжить передачу, а не начинать с нуля.

2.) Я не знаю, что это такое. Вы можете вставить несколько примеров?

РЕДАКТИРОВАТЬ: Согласно http://ubuntuforums.org/showthread.php?t=1342171 эти коды определены на странице руководства rsync в разделе для параметра -i, --itemize-changes.

Исправлена ​​часть, если мой ответ основан на

person Wodin    schedule 20.12.2010
comment
Я привел несколько примеров логов выше. Спасибо. - person GodFather; 21.12.2010
comment
Я обновил свой ответ. Коды объяснены на странице руководства. - person Wodin; 21.12.2010