Що означає f +++++++++ у журналах rsync?


116

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

  1. У середині процесу мені потрібно зупинитися і почати rsyncзаново.
    Почнеться rsyncз того місця, де він зупинився, або він перезапуститься з початку?

  2. У файлах журналів я бачу "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

Відповіді:


196

Давайте подивимось, як працює 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 man:

-i, --поміркувати-змінювати

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

Втеча "% i" має виразний вихід, який становить 11 літер. Загальний формат схожий на рядок YXcstpoguax, де Y замінюється типом оновлення, яке робиться, X замінюється типом файлу, а інші букви представляють атрибути, які можуть бути виведені, якщо вони змінюються.

Типи оновлень, які замінюють Y, наступні:

  • Це <означає, що файл передається віддаленому хосту (надсилається).
  • Це >означає, що файл передається локальному хосту (отримано).
  • Це cозначає, що для елемента відбувається локальна зміна / створення (наприклад, створення каталогу або зміна символьної посилання тощо).
  • Це hозначає, що елемент є твердим посиланням на інший елемент (вимагає - тверді посилання).
  • Це .означає, що елемент не оновлюється (хоча він може мати атрибути, які змінюються).
  • Це *означає, що в решті області деталізованого виводу міститься повідомлення (наприклад, "видалення").

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

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

Атрибут, який асоціюється з кожною буквою, такий:

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

Можливий і інший вихід: при видаленні файлів "% i" видасть рядок "* видалення" для кожного видаленого елемента (якщо припустити, що ви говорите з досить недавним rsync, що він записує видалення замість виведення їх як багатослівне повідомлення).


Цей пост / відповідь зараз дуже старий, але мені довелося написати про це коментар. Це одна з найкращих відповідей, яку я коли-небудь бачив про rsync. Спасибі mit
Хорхе

101

Деякий час назад мені потрібно було зрозуміти rsyncвихід для сценарію, який я писав. Під час написання цього сценарію я погуглився і дійшов до того, що написав @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 ) на прикладі післяобробки захопленого виводу, щоб виділити нові файли, дублікати файлів (те саме ім’я, те саме вміст), зіткнення файлів (те саме ім’я, різні вмісту), а також зміни в структурах підкаталогів.


1
дуже корисний! що таке -T у вихідному журналі?
Пол Галлен

Pol, ти питаєш про - прапор T для rsync?
Джон Марк Мітчелл

Pol, якщо я правильно розумію ваше запитання, t у журналі rsync означає, що два порівняні файли мають різні часові позначки. Це означає, що вони були створені або модифіковані в різні часи.
Джон Марк Мітчелл

3
Я вважаю, що "T" у висновку означає, що час було оновлено до поточного часу, "<f..T ...... Rise.mp3". Принаймні, це те, що я спостерігаю. "t" - це час локального файлу.
К. Келлі

1
Я запізнююся на пару років, але "t" vs "T" пояснюється на сторінці man: A t означає, що час модифікації відрізняється і оновлюється до значення відправника (вимагає - разів). Альтернативне значення T означає, що час модифікації буде встановлено на час передачі, що відбувається, коли файл / symlink / пристрій оновлюється без - times і коли симпосилання змінюється і приймач не може встановити свій час. (Примітка. При використанні клієнта rsync 3.0.0 ви можете побачити прапор s в поєднанні з t замість відповідного прапора T для цього невдалого встановлення часу.)
user187557

2

1) Водін, це не зовсім вірно. Якщо використовується --partial або -P тег (такий же, як --partial --progress), rsync поновлює перервані передачі.

2) Точно, це загальний вихід для тегу --itemize-changes.


2

1.) Він "перезапустить синхронізацію", але не передасть файли однакового розміру та часової позначки і т. Д. Він спочатку створює список файлів для передачі, і на цьому етапі він побачить, що вже передав деякі файли і пропустить їх. Ви повинні сказати rsync для збереження часових міток тощо (наприклад, використання rsync -a ...)

Поки rsync передає файл, він буде називати його як-небудь .filename.XYZABCзамість filename. Потім, коли він закінчить передачу цього файлу, він перейменує його. Отже, якщо ви вбиваєте rsync під час передачі великого файлу, вам доведеться скористатися опцією --partial, щоб продовжити передачу, а не починати з нуля.

2.) Я не знаю, що це. Чи можете ви вставити кілька прикладів?

EDIT: Відповідно до http://ubuntuforums.org/showthread.php?t=1342171 ці коди визначені на сторінці чоловіка rsync у розділі для -i, --itemize-changesпараметра.

Виправлена ​​частина, якщо моя відповідь заснована на Жаоа


Я приклав кілька прикладів журналу вище. Дякую.
GodFather

Я оновив свою відповідь. Коди пояснюються на сторінці man.
Водін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.