Rsync günlüklerinde f +++++++++ ne anlama geliyor?


116

rsyncSunucu dosyalarımın yedeğini almak için kullanıyorum ve iki sorum var:

  1. Sürecin ortasında durup rsyncyeniden başlamam gerekiyor .
    Durduğu rsyncnoktadan mı başlayacak yoksa baştan mı başlayacak?

  2. Günlük dosyalarında görüyorum "f+++++++++". Bu ne demek?

Örneğin:

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

Yanıtlar:


197

Rsync'in nasıl çalıştığına bir göz atalım ve şifreli sonuç satırlarını daha iyi anlayalım:

1 - rsync'in büyük bir avantajı, bir kesintiden sonra bir dahaki sefere sorunsuz şekilde devam etmesidir.

Bir sonraki rsync çağrısı, bu arada değiştirilmediyse, zaten aktarılmış olan dosyaları tekrar aktarmayacaktır. Ancak, kesintiye uğradığının farkında olmadığı için tüm dosyaları baştan kontrol etmeye başlayacaktır.

2 - Her karakter, içindeki bölümü okursanız çevrilebilecek bir koddur -i, --itemize-changes.man rsync

Örnek günlük dosyanızı sorudan çözme:

> 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 sayfasının ilgili bölümü:

-i, --itemize-changes

Öznitelik değişiklikleri de dahil olmak üzere her dosyada yapılan değişikliklerin basit bir ayrıntılı listesini ister. Bu, --out-format = '% i% n% L' belirtmekle tamamen aynıdır. Seçeneği tekrar ederseniz, değiştirilmemiş dosyalar da çıkacaktır, ancak yalnızca alıcı rsync en az 2.6.7 sürümüyse (rsync'in eski sürümlerinde -vv kullanabilirsiniz, ancak bu aynı zamanda diğer ayrıntılı mesajların çıktısını da açar) bilgeleri).

"% İ" kaçışının 11 harf uzunluğunda şifreli bir çıktısı var. Genel biçim, YXcstpoguax dizesi gibidir; burada Y, yapılan güncellemenin türü ile değiştirilir, X, dosya türü ile değiştirilir ve diğer harfler, değiştiriliyorlarsa çıktısı alınabilecek öznitelikleri temsil eder.

Y'nin yerini alan güncelleme türleri aşağıdaki gibidir:

  • A <, bir dosyanın uzak ana bilgisayara aktarıldığı (gönderildiği) anlamına gelir.
  • A >, bir dosyanın yerel ana bilgisayara aktarıldığı (alındığı) anlamına gelir.
  • A c, öğe için yerel bir değişikliğin / yaratmanın (bir dizinin oluşturulması veya bir sembolik bağın değiştirilmesi vb.) Gerçekleştiği anlamına gelir.
  • A h, öğenin başka bir öğeye sabit bağlantı olduğu anlamına gelir (--hard-link gerektirir).
  • A ., öğenin güncellenmediği anlamına gelir (ancak değiştirilmekte olan özniteliklere sahip olabilir).
  • A *, maddelere ayrılmış çıktı alanının geri kalanının bir mesaj içerdiği anlamına gelir (örneğin, "silme").

X'in yerini alan dosya türleri şunlardır: fbir dosya diçin, bir dizin Liçin, bir sembolik bağ Diçin, bir aygıt Siçin ve bir özel bir dosya için (örn. Adlandırılmış soketler ve fifos).

Yukarıdaki dizedeki diğer harfler, öğe için ilişkilendirilmiş öznitelik güncelleniyorsa veya bir "" çıktısı alınacak gerçek harflerdir. değişiklik yok. Bunun üç istisnası şunlardır: (1) yeni oluşturulmuş bir öğe her harfi bir "+" ile değiştirir, (2) özdeş bir öğe noktaları boşluklarla değiştirir ve (3) bilinmeyen bir öznitelik her harfi bir "?" İle değiştirir. (bu, daha eski bir rsync ile konuşurken meydana gelebilir).

Her harfle ilişkilendirilen nitelik aşağıdaki gibidir:

  • A c, normal bir dosyanın farklı bir sağlama toplamına sahip olduğu (--checksum gerektirir) veya bir sembolik bağ, aygıt veya özel dosyanın değişen bir değere sahip olduğu anlamına gelir. Dosyaları 3.0.1'den önce bir rsync'e gönderiyorsanız, bu değişiklik işaretinin yalnızca sağlama toplamı farklı olan normal dosyalar için mevcut olacağını unutmayın.
  • Bu s, normal bir dosyanın boyutunun farklı olduğu ve dosya aktarımı ile güncelleneceği anlamına gelir.
  • A t, değişiklik zamanının farklı olduğu ve gönderenin değerine göre güncellendiği anlamına gelir (- kez gerektirir). T'nin alternatif bir değeri, değiştirme süresinin, bir dosya / sembolik bağ / aygıtın - kez olmadan güncellendiğinde ve bir sembolik bağ değiştirildiğinde ve alıcı zamanını ayarlayamadığında gerçekleşen transfer süresine ayarlanacağı anlamına gelir. (Not: bir rsync 3.0.0 istemcisi kullanırken, bu zaman ayarı hatası için uygun T bayrağı yerine t ile birleştirilmiş s bayrağını görebilirsiniz.)
  • A p, izinlerin farklı olduğu ve gönderenin değerine göre güncellendiği anlamına gelir (--perms gerektirir).
  • Bir o, sahibin farklı olduğu ve gönderenin değerine göre güncellenmekte olduğu anlamına gelir (- sahip ve süper kullanıcı ayrıcalıkları gerektirir).
  • A g, grubun farklı olduğu ve gönderenin değerine göre güncellendiği anlamına gelir (--group ve grubu ayarlama yetkisi gerektirir).
  • uYuva ileride kullanılmak üzere ayrılmıştır.
  • aAraçlarının ACL bilgileri değişti.
  • xGenişletilmiş özellik bilgileri değişmiş demektir.

Başka bir çıktı da mümkündür: Dosyaları silerken, "% i", kaldırılan her öğe için "* silme" dizesini çıkaracaktır (yeterince yeni bir rsync ile konuştuğunuzu varsayarsak, silmeleri şu şekilde çıkarmak yerine günlüğe kaydeder) ayrıntılı bir mesaj).


Bu gönderi / cevap artık çok eski, ancak bunun hakkında bir yorum yazmam gerekiyordu. Rsync hakkında gördüğüm en iyi cevaplardan biri. Teşekkürler mit
Jorge

101

Bir süre önce, yazdığım rsyncbir senaryonun çıktısını anlamam gerekiyordu . O senaryoyu yazma sürecinde Google'da dolaştım ve @mit'in yukarıda yazdığı şeye geldim . Bu bilgileri ve diğer kaynaklardan gelen belgeleri, bit bayrakları üzerinde kendi primerimi oluşturmak ve rsynctüm eylemler için bit bayraklarının nasıl çıktılacağını öğrenmek için kullandım (bunu varsayılan olarak yapmaz).

Bu bilgiyi burada, (benim gibi) arama yoluyla bu sayfaya rastlayan ve daha iyi bir açıklamaya ihtiyaç duyan diğerlerine yardımcı olması umuduyla yayınlıyorum rsync.

Kombinasyonu ile --itemize-changesbayrak ve-vvv bayrak, rsyncbize hedef dizine karşılaştırıldığında kaynak dizininde tespit edildiği tüm dosya sistemi değişiklikleri ayrıntılı çıkış verir. Tarafından üretilen bit bayrakları rsync, neyin değiştiğini belirlemek için daha sonra çözülebilir. Her bitin anlamını çözmek için aşağıdaki tabloyu kullanın.

Her bit konumunun ve rsyncçıkışındaki değerin açıklaması :

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")

Çeşitli senaryolar için rsync'den bazı örnek çıktılar:

>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Çıktının yakalanması (bit bayraklarına odaklanmış):

Benim deneyler, her iki --itemize-changesbayrak ve-vvv bayrak almak için gerekli olan rsyncçıkış için bir giriş , tüm dosya sistemi değişiklikleri. Üçlü verbose ( -vvv) bayrağı olmadan, listelenen dizin, bağlantı ve aygıt değişikliklerini görmüyordum. Beklediğiniz her şeyi gözlemlediğinden ve not ettiğinden emin olmak için rsync sürümünüzü denemeye değer.

Bu tekniğin kullanışlı bir kullanımı --dry-run, komuta bayrağı eklemek ve rsync tarafından belirlenen değişiklik listesini bir değişkene toplamaktır (herhangi bir değişiklik yapmadan), böylece listede bazı işlemleri kendiniz yapabilirsiniz. Aşağıdakine benzer bir şey, çıktıyı bir değişkende yakalar:

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

Yukarıdaki örnekte, rsyncöğesinin (stdout) çıkışı grep(stdin aracılığıyla) öğesine yeniden yönlendirilir, böylece yalnızca bit bayrakları içeren satırları izole edebiliriz.

Yakalanan çıktının işlenmesi:

Değişkenin içeriği daha sonra daha sonra kullanılmak üzere kaydedilebilir veya ilgilenilen öğeler için hemen yinelenebilir. Hakkında daha fazla araştırma yaparken yazdığım senaryoda tam olarak bu taktiği kullanıyorum rsync. Sen komut (bakabilirsiniz https://github.com/jmmitchell/movestough örnekleri için) yeni dosyalar, çift dosyaları (aynı isim, aynı içeriği), dosya çarpışmalar (aynı adı izole etmek yakalanan çıkışı sonrası işleme, farklı içerik) ve alt dizin yapılarındaki değişiklikler.


1
çok kullanışlı! log çıktısında -T nedir?
Pol Hallen

Pol, rsync için - T bayrağını mı soruyorsun?
John Mark Mitchell

Pol, sorunuzu doğru anlarsam, rsync günlüğündeki t değeri, karşılaştırılan iki dosyanın farklı zaman damgalarına sahip olduğu anlamına gelir. Farklı zamanlarda oluşturuldukları veya değiştirildikleri anlamına gelir.
John Mark Mitchell

3
Çıktıdaki "T" nin zamanın geçerli zamana güncellendiği anlamına geldiğine inanıyorum, "<f..T ...... Rise.mp3". En azından gözlemlediğim şey bu. "t" yerel dosyanın zamanı olacaktır.
C. Kelly

1
Birkaç yıl geciktim, ancak "t" ve "T" man sayfasında açıklanıyor: A t, değişiklik zamanının farklı olduğu ve gönderenin değerine göre güncellendiği anlamına gelir (- kez gerektirir). T'nin alternatif bir değeri, değiştirme süresinin, bir dosya / sembolik bağ / aygıtın - kez olmadan güncellendiğinde ve bir sembolik bağ değiştirildiğinde ve alıcı zamanını ayarlayamadığında gerçekleşen transfer süresine ayarlanacağı anlamına gelir. (Not: bir rsync 3.0.0 istemcisi kullanırken, bu zaman ayarı hatası için uygun T bayrağı yerine t ile birleştirilmiş s bayrağını görebilirsiniz.)
user187557

2

1) Wodin, bu tamamen doğru değil. --Partial veya -P etiketi kullanılıyorsa (--partial --progress ile aynı) rsync, kesintiye uğramış aktarımları sürdürür.

2) Kesinlikle, bu --itemize-changes etiketi için ortak çıktı.


2

1.) "Senkronizasyonu yeniden başlatır", ancak aynı boyut ve zaman damgası olan dosyaları aktarmaz. İlk önce aktarılacak dosyaların bir listesini oluşturur ve bu aşamada bazı dosyaları zaten aktardığını görür. ve onları atlayacak. Rsync'e zaman damgalarını vb. Korumasını söylemelisiniz (örneğin kullanarak rsync -a ...)

Rsync bir dosya aktarırken, onun .filename.XYZABCyerine gibi bir şey çağıracaktır filename. Ardından, bu dosyayı aktarmayı bitirdiğinde yeniden adlandıracaktır. Bu nedenle, büyük bir dosya aktarırken rsync'i öldürürseniz, aktarmaya sıfırdan başlamak yerine --partial seçeneğini kullanmanız gerekecektir.

2.) Bunun ne olduğunu bilmiyorum. Birkaç örnek yapıştırabilir misin?

DÜZENLEME: http://ubuntuforums.org/showthread.php?t=1342171 uyarınca bu kodlar, -i, --itemize-changesseçenek için bölümdeki rsync man sayfasında tanımlanmıştır .

Cevabım Joao'ya göre belirlendiğinde düzeltilen kısım


Yukarıya bazı günlük örnekleri koydum. Teşekkürler.
GodFather

Cevabımı güncelledim. Kodlar man sayfasında açıklanmıştır.
Wodin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.