Apa arti f +++++++++ dalam log rsync?

116

Saya menggunakan rsyncuntuk membuat cadangan file server saya, dan saya punya dua pertanyaan:

  1. Di tengah proses, saya harus berhenti dan mulai rsynclagi.
    Akan rsyncdimulai dari titik berhenti atau akan dimulai ulang dari awal?

  2. Di file log yang saya lihat "f+++++++++". Apa artinya?

misalnya:

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
Ayah baptis
sumber

Jawaban:

197

Mari kita lihat cara kerja rsync dan lebih memahami baris hasil samar:

1 - Keuntungan besar dari rsync adalah bahwa setelah gangguan, waktu berikutnya berlanjut dengan lancar.

Pemanggilan rsync berikutnya tidak akan mentransfer file lagi, yang telah ditransfer, jika tidak diubah untuk sementara. Tetapi itu akan mulai memeriksa semua file lagi dari awal untuk mengetahuinya, karena tidak menyadari bahwa itu telah terputus.

2 - Setiap karakter adalah kode yang dapat diterjemahkan jika Anda membaca bagian untuk -i, --itemize-changesdiman rsync

Mendekode file log contoh Anda dari pertanyaan:

> 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

Bagian yang relevan dari halaman manual rsync:

-i, --itemize-changes

Meminta daftar perincian sederhana dari perubahan yang dibuat untuk setiap file, termasuk perubahan atribut. Ini persis sama dengan menentukan --out-format = '% i% n% L'. Jika Anda mengulangi opsi, file yang tidak diubah juga akan menjadi output, tetapi hanya jika rsync penerima paling tidak versi 2.6.7 (Anda dapat menggunakan -vv dengan versi rsync yang lebih lama, tetapi itu juga mengaktifkan output dari pesan verbose lainnya- orang bijak).

Escape "% i" memiliki keluaran samar sepanjang 11 huruf. Format umum adalah seperti string YXcstpoguax, di mana Y diganti dengan jenis pembaruan yang sedang dilakukan, X diganti dengan tipe file, dan huruf lain mewakili atribut yang mungkin dihasilkan jika diubah.

Jenis pembaruan yang menggantikan Y adalah sebagai berikut:

  • A <berarti bahwa file sedang ditransfer ke host jarak jauh (dikirim).
  • Sebuah >cara yang file sedang ditransfer ke host lokal (diterima).
  • A cberarti bahwa perubahan / pembuatan lokal sedang terjadi untuk item tersebut (seperti pembuatan direktori atau perubahan symlink, dll.).
  • A hberarti item tersebut adalah hard link ke item lain (membutuhkan --hard-links).
  • A .berarti bahwa item tersebut tidak diperbarui (meskipun mungkin memiliki atribut yang sedang dimodifikasi).
  • A *berarti bahwa sisa area keluaran yang diperinci berisi pesan (misalnya "menghapus").

Jenis file yang menggantikan X adalah: funtuk file, a duntuk direktori, Luntuk symlink, a Duntuk perangkat, dan a Suntuk file khusus (misalnya bernama soket dan fifos).

Huruf lain dalam string di atas adalah huruf sebenarnya yang akan dihasilkan jika atribut terkait untuk item tersebut diperbarui atau "." tidak ada perubahan. Tiga pengecualian untuk ini adalah: (1) item yang baru dibuat mengganti setiap huruf dengan "+", (2) item identik menggantikan titik dengan spasi, dan (3) atribut yang tidak diketahui menggantikan setiap huruf dengan "?" (ini dapat terjadi saat berbicara dengan rsync lama).

Atribut yang terkait dengan setiap huruf adalah sebagai berikut:

  • A cberarti file biasa memiliki checksum yang berbeda (memerlukan --checksum) atau symlink, perangkat, atau file khusus memiliki nilai yang berubah. Perhatikan bahwa jika Anda mengirim file ke rsync sebelum 3.0.1, tanda perubahan ini hanya akan ada untuk file biasa yang berbeda checksum.
  • A sberarti ukuran file biasa berbeda dan akan diperbarui dengan transfer file.
  • A tberarti waktu modifikasi berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --times). Nilai alternatif T berarti bahwa waktu modifikasi akan diatur ke waktu transfer, yang terjadi ketika file / symlink / perangkat diperbarui tanpa --times dan ketika symlink diubah dan penerima tidak dapat mengatur waktunya. (Catatan: saat menggunakan klien rsync 3.0.0, Anda mungkin melihat flag s digabungkan dengan t alih-alih flag T yang tepat untuk kegagalan pengaturan waktu ini.)
  • A pberarti izinnya berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --perms).
  • Sebuah ocara pemilik berbeda dan sedang diperbarui untuk nilai pengirim (membutuhkan --owner dan hak super-user).
  • A gberarti grup tersebut berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --group dan otoritas untuk mengatur grup).
  • The uSlot dicadangkan untuk penggunaan masa depan.
  • The aberarti bahwa informasi ACL berubah.
  • The xberarti bahwa informasi atribut diperpanjang berubah.

Satu keluaran lain dimungkinkan: saat menghapus file, "% i" akan mengeluarkan string "* menghapus" untuk setiap item yang sedang dihapus (dengan asumsi bahwa Anda sedang berbicara dengan rsync yang cukup baru yang mencatat penghapusan daripada mengeluarkannya sebagai pesan verbose).

mit
sumber
Posting / jawaban ini sudah sangat tua sekarang, tetapi saya harus menulis komentar tentang itu. Adalah salah satu jawaban terbaik yang pernah saya lihat tentang rsync. Terima kasih mit
Jorge
101

Beberapa waktu yang lalu, saya perlu memahami rsyncoutput untuk skrip yang saya tulis. Selama proses penulisan skrip itu, saya mencari-cari di Google dan sampai pada apa yang telah ditulis @mit di atas . Saya menggunakan informasi itu, serta dokumentasi dari sumber lain, untuk membuat primer saya sendiri pada bendera bit dan bagaimana cara mendapatkan rsynckeluaran bendera bit untuk semua tindakan (tidak melakukan ini secara default).

Saya memposting informasi itu di sini dengan harapan dapat membantu orang lain yang (seperti saya) tersandung di halaman ini melalui pencarian dan membutuhkan penjelasan yang lebih baik rsync.

Dengan kombinasi dari --itemize-changesbendera dan para -vvvbendera, rsyncmemberi kita rinci output dari semua perubahan file sistem yang diidentifikasi dalam direktori source jika dibandingkan dengan direktori target. Bendera bit yang dihasilkan oleh rsynckemudian dapat diterjemahkan untuk menentukan apa yang berubah. Untuk memecahkan kode arti setiap bit, gunakan tabel berikut.

Penjelasan setiap posisi bit dan nilai dalam rsyncoutput:

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

Beberapa contoh keluaran dari rsync untuk berbagai skenario:

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

Menangkap rsynckeluaran (difokuskan pada tanda bit):

Dalam eksperimen saya, baik --itemize-changesbendera dan para -vvvbendera yang diperlukan untuk mendapatkan rsyncoutput entri untuk semua perubahan sistem file. Tanpa -vvvflag triple verbose ( ), saya tidak melihat perubahan direktori, tautan, dan perangkat terdaftar. Perlu bereksperimen dengan versi rsync Anda untuk memastikan bahwa itu mengamati dan mencatat semua yang Anda harapkan.

Salah satu kegunaan praktis dari teknik ini adalah menambahkan --dry-runflag ke perintah dan mengumpulkan daftar perubahan, seperti yang ditentukan oleh rsync, ke dalam variabel (tanpa membuat perubahan apa pun) sehingga Anda dapat melakukan pemrosesan sendiri pada daftar. Sesuatu seperti berikut ini akan menangkap keluaran dalam variabel:

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

Dalam contoh di atas, output (stdout) dari rsyncdialihkan ke grep(melalui stdin) sehingga kita hanya dapat mengisolasi baris yang berisi flag bit.

Memproses keluaran yang ditangkap:

Isi variabel kemudian dapat dicatat untuk digunakan nanti atau segera diulang untuk item yang menarik. Saya menggunakan taktik yang tepat ini dalam skrip yang saya tulis selama meneliti lebih lanjut rsync. Anda dapat melihat skrip ( https://github.com/jmmitchell/movestough ) untuk contoh pasca-pemrosesan output yang ditangkap untuk mengisolasi file baru, file duplikat (nama yang sama, konten yang sama), benturan file (nama yang sama, berbeda konten), serta perubahan struktur subdirektori.

John Mark Mitchell
sumber
1
sangat berguna! apa itu -T dalam keluaran log?
Pol Hallen
Pol, apakah Anda bertanya tentang - T flag untuk rsync?
John Mark Mitchell
Pol, jika saya memahami pertanyaan Anda dengan benar, t di log rsync berarti kedua file yang dibandingkan memiliki cap waktu yang berbeda. Artinya mereka dibuat atau dimodifikasi pada waktu yang berbeda.
John Mark Mitchell
3
Saya percaya "T" dalam output berarti waktu diperbarui ke waktu sekarang, "<f..T ...... Rise.mp3". Setidaknya inilah yang saya amati. "t" akan menjadi waktu file lokal.
C. Kelly
1
Saya terlambat beberapa tahun, tetapi "t" vs "T" dijelaskan di halaman manual: A t berarti waktu modifikasi berbeda dan sedang diperbarui ke nilai pengirim (memerlukan --times). Nilai alternatif T berarti bahwa waktu modifikasi akan diatur ke waktu transfer, yang terjadi ketika file / symlink / perangkat diperbarui tanpa --times dan ketika symlink diubah dan penerima tidak dapat mengatur waktunya. (Catatan: saat menggunakan klien rsync 3.0.0, Anda mungkin melihat flag s dikombinasikan dengan t alih-alih flag T yang tepat untuk kegagalan pengaturan waktu ini.)
user187557
2

1) Wodin, itu tidak sepenuhnya benar. Jika menggunakan --pihak atau -P tag (sama seperti --pihak --progress) rsync melanjutkan transfer yang terputus.

2) Tepatnya, itu adalah keluaran umum untuk tag --itemize-changes.

Joao Figueiredo
sumber
2

1.) Ini akan "memulai ulang sinkronisasi", tetapi tidak akan mentransfer file dengan ukuran dan stempel waktu yang sama, dll. Pertama-tama membuat daftar file yang akan ditransfer dan selama tahap ini akan terlihat bahwa ia telah mentransfer beberapa file dan akan melewatkannya. Anda harus memberi tahu rsync untuk mempertahankan stempel waktu dll. (Mis. Menggunakan rsync -a ...)

Saat rsync mentransfer file, itu akan menyebutnya seperti itu, .filename.XYZABCbukan filename. Kemudian setelah selesai mentransfer file itu, itu akan mengganti namanya. Jadi, jika Anda mematikan rsync saat sedang mentransfer file besar, Anda harus menggunakan opsi --pihak untuk melanjutkan transfer alih-alih memulai dari awal.

2.) Saya tidak tahu apa itu. Bisakah Anda menempelkan beberapa contoh?

EDIT: Sesuai http://ubuntuforums.org/showthread.php?t=1342171 kode-kode tersebut ditentukan di halaman manual rsync di bagian -i, --itemize-changesopsi.

Memperbaiki bagian jika jawaban saya berdasarkan Joao

Wodin
sumber
Saya menaruh beberapa contoh log di atas. Terima kasih.
GodFather
Saya telah memperbarui jawaban saya. Kode dijelaskan di halaman manual.
Wodin