rsync - что означает f+++++++++ в журналах rsync?
Я использую rsync
для резервного копирования файлов моего сервера, и у меня есть два вопроса:
-
В середине процесса мне нужно остановить и снова запустить rsync
.
Запустится ли rsync
с того места, где он остановился, или перезапустится с самого начала?
-
В файлах журнала я вижу "f+++++++++"
. Что это значит?
например:
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
Ответы
Ответ 1
Посмотрим, как работает 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
> е +++++++++
> - 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, но это также включает вывод других подробных mes-
мудрецы).
У "% i" escape есть загадочный вывод длиной 11 букв. Общий формат похож на строку YXcstpoguax, где Y заменяется типом выполняемого обновления, X заменяется файловым типом, а остальные буквы представляют собой атрибуты, которые могут выводиться, если они изменяются.
Типы обновлений, которые заменяют Y, следующие:
- A
<
означает, что файл передается удаленному хосту (отправлен).
- A
>
означает, что файл передается на локальный хост (полученный).
- A
c
означает, что для элемента происходит локальное изменение/создание (например, создание каталога или изменение символической ссылки и т.д.).
- A
h
означает, что элемент является жесткой ссылкой на другой элемент (требуется --hard-links).
- A
.
означает, что элемент не обновляется (хотя он может иметь атрибуты, которые изменяются).
- A
*
означает, что в остальной части области выделенного вывода есть сообщение (например, "удаление" ).
Типы файлов, которые заменяют X: f
для файла, d
для каталога, L
для символической ссылки, d
для устройства и S
для специальный файл (например, названные сокеты и fifos).
Другими буквами в строке выше являются фактические буквы, которые будут выводиться, если ассоциированный атрибут для элемента обновляется или "." без изменений. Три исключения из этого: (1) вновь созданный элемент заменяет каждую букву "+", (2) идентичный элемент заменяет точки пробелами и (3) неизвестный атрибут заменяет каждую букву "?", (это может произойти при разговоре с более старым rsync).
Атрибут, связанный с каждой буквой, выглядит следующим образом:
- A
c
означает, что обычный файл имеет другую контрольную сумму (требуется --checkum) или что символическая ссылка, устройство или специальный файл имеет измененное значение. Обратите внимание, что если вы отправляете файлы в rsync до 3.0.1, этот флаг изменения будет присутствовать только для обычных файлов с контрольной суммой.
- A
S
означает, что размер обычного файла отличается и будет обновляться путем передачи файла.
- A
t
означает, что время модификации отличается и обновляется до значения отправителей (требуется - время). Альтернативное значение T означает, что время модификации будет установлено на время передачи, которое происходит, когда файл/символьная ссылка/устройство обновляется без: - и когда символическая ссылка изменяется, а приемник не может установить свое время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s, объединенный с t вместо правильного флага T для этого сбоя установки времени.)
- A
p
означает, что разрешения разные и обновляются до значения отправителей (требуется -perms).
-
o
означает, что владелец отличается и обновляется до значения отправителей (требуется - привилегии владельца и суперпользователя).
- A
g
означает, что группа отличается и обновляется до значения отправителей (требуется группа и полномочия для установки группы).
- Слот
u
зарезервирован для использования в будущем.
-
a
означает, что информация ACL изменилась.
-
x
означает, что расширенная информация об атрибутах изменилась.
возможен другой выход: при удалении файлов "% i" выводит строку "* удаление" для каждого элемента, который удаляется (при условии, что вы говорите с недавним достаточно rsync, что он регистрирует удаления вместо выводя их в виде подробного сообщения).
Ответ 2
Некоторое время назад мне нужно было понять вывод rsync
для script, который я писал. Во время написания этого script я искал googled и пришел к тому, что @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), поэтому мы можем выделить только строки, содержащие битовые флаги.
Обработка захваченного вывода:
Содержимое переменной может быть зарегистрировано для последующего использования или сразу же повторено для интересующих предметов. Я использую эту точную тактику в script, которую я написал, исследуя больше о rsync
. Вы можете посмотреть script (https://github.com/jmmitchell/movestough) для примеров последующей обработки захваченного вывода, чтобы изолировать новые файлы, дублировать файлы (одинаковые имя, то же содержимое), конфликты файлов (одно и то же имя, другое содержимое), а также изменения в структурах подкаталогов.
Ответ 3
1) Wodin,
это не совсем так.
Если используется --partial или -P тег (такой же, как --partial --progress)
rsync возобновляет прерванные переводы.
2) Именно этот общий вывод для тега --itemize-changes.
Ответ 4
1.) Он "перезапустит синхронизацию", но не будет передавать файлы с одинаковым размером и временной меткой и т.д. Сначала он создает список файлов для передачи, и на этом этапе он увидит, что он уже передал некоторые файлы и пропустит их. Вы должны указать rsync для сохранения временных меток и т.д. (Например, с помощью rsync -a ...
)
Пока rsync передает файл, он будет называть его чем-то вроде .filename.XYZABC
вместо filename
. Затем, когда он закончит передачу этого файла, он переименует его. Итак, если вы убьете rsync, когда он переносит большой файл, вам придется использовать опцию --partial, чтобы продолжить передачу, а не начинать с нуля.
2.) Я не знаю, что это такое. Можете ли вы вставить несколько примеров?
EDIT: согласно http://ubuntuforums.org/showthread.php?t=1342171 эти коды определены в man-странице rsync в разделе для параметра -i, --itemize-changes
.
Исправлена часть, если мой ответ основан на