F +++++++++ có nghĩa là gì trong nhật ký rsync?


116

Tôi đang sử dụng rsyncđể tạo bản sao lưu các tệp máy chủ của mình và tôi có hai câu hỏi:

  1. Ở giữa quá trình, tôi cần dừng lại và bắt đầu rsynclại.
    Sẽ rsyncbắt đầu từ điểm mà nó đã dừng lại hay nó sẽ khởi động lại từ đầu?

  2. Trong các tệp nhật ký tôi thấy "f+++++++++". Nó có nghĩa là gì?

ví dụ:

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

Câu trả lời:


196

Hãy cùng xem cách hoạt động của rsync và hiểu rõ hơn về các dòng kết quả khó hiểu:

1 - Một ưu điểm rất lớn của rsync là sau khi bị gián đoạn, lần sau nó vẫn tiếp tục trơn tru.

Lệnh gọi rsync tiếp theo sẽ không chuyển lại các tệp mà nó đã được chuyển, nếu chúng không được thay đổi trong thời gian chờ đợi. Nhưng nó sẽ bắt đầu kiểm tra lại tất cả các tệp từ đầu để tìm hiểu, vì nó không biết rằng nó đã bị gián đoạn.

2 - Mỗi ký tự là một mã có thể được dịch nếu bạn đọc phần -i, --itemize-changestrongman rsync

Giải mã tệp nhật ký mẫu của bạn từ câu hỏi:

> 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

Phần có liên quan của trang người đàn ông rsync:

-i, --itemize-thay đổi

Yêu cầu một danh sách được chia thành từng mục đơn giản về những thay đổi đang được thực hiện cho mỗi tệp, bao gồm cả những thay đổi thuộc tính. Điều này hoàn toàn giống với việc chỉ định --out-format = '% i% n% L'. Nếu bạn lặp lại tùy chọn, các tệp không thay đổi cũng sẽ được xuất ra, nhưng chỉ khi rsync nhận ít nhất là phiên bản 2.6.7 (bạn có thể sử dụng -vv với các phiên bản rsync cũ hơn, nhưng điều đó cũng bật đầu ra của mes- hiền nhân).

Lối thoát "% i" có đầu ra khó hiểu dài 11 chữ cái. Định dạng chung giống như chuỗi YXcstpoguax, trong đó Y được thay thế bằng loại cập nhật đang được thực hiện, X được thay thế bằng loại tệp và các chữ cái khác đại diện cho các thuộc tính có thể được xuất ra nếu chúng đang được sửa đổi.

Các loại cập nhật thay thế Y như sau:

  • A <có nghĩa là một tệp đang được chuyển đến máy chủ lưu trữ từ xa (đã gửi).
  • A >có nghĩa là một tệp đang được chuyển đến máy chủ cục bộ (đã nhận).
  • A ccó nghĩa là một thay đổi / tạo cục bộ đang xảy ra cho mục (chẳng hạn như tạo thư mục hoặc thay đổi liên kết tượng trưng, ​​v.v.).
  • A hcó nghĩa là mục đó là một liên kết cứng đến một mục khác (yêu cầu - liên kết cứng).
  • A .có nghĩa là mặt hàng không được cập nhật (mặc dù nó có thể có các thuộc tính đang được sửa đổi).
  • A *có nghĩa là phần còn lại của khu vực đầu ra được chia thành từng khoản chứa một thông báo (ví dụ: "xóa").

Các loại tệp thay thế cho X là: fcho tệp, a dcho thư mục, Lcho liên kết tượng trưng, Dcho thiết bị và Scho một tệp đặc biệt (ví dụ: các ổ cắm có tên và năm mươi).

Các chữ cái khác trong chuỗi ở trên là các chữ cái thực tế sẽ được xuất ra nếu thuộc tính liên quan cho mặt hàng đang được cập nhật hoặc dấu "." không thay đổi. Ba ngoại lệ cho điều này là: (1) một mục mới được tạo thay thế mỗi chữ cái bằng dấu "+", (2) một mục giống nhau thay thế các dấu chấm bằng dấu cách và (3) một thuộc tính không xác định thay thế mỗi chữ cái bằng một "?" (điều này có thể xảy ra khi nói chuyện với rsync cũ hơn).

Thuộc tính được liên kết với mỗi chữ cái như sau:

  • A ccó nghĩa là tệp thông thường có tổng kiểm tra khác (yêu cầu --checksum) hoặc liên kết biểu tượng, thiết bị hoặc tệp đặc biệt có giá trị đã thay đổi. Lưu ý rằng nếu bạn đang gửi tệp đến một rsync trước 3.0.1, cờ thay đổi này sẽ chỉ hiển thị cho các tệp thông thường khác nhau về tổng kiểm tra.
  • A scó nghĩa là kích thước của một tệp thông thường khác và sẽ được cập nhật bằng cách chuyển tệp.
  • A tcó nghĩa là thời gian sửa đổi khác nhau và đang được cập nhật giá trị của người gửi (yêu cầu --times). Giá trị thay thế của T có nghĩa là thời gian sửa đổi sẽ được đặt thành thời gian truyền, điều này xảy ra khi tệp / liên kết biểu tượng / thiết bị được cập nhật mà không có --times và khi liên kết biểu tượng được thay đổi và người nhận không thể đặt thời gian của nó. (Lưu ý: khi sử dụng ứng dụng khách rsync 3.0.0, bạn có thể thấy cờ s kết hợp với t thay vì cờ T thích hợp cho lỗi cài đặt thời gian này.)
  • A pcó nghĩa là các quyền khác nhau và đang được cập nhật giá trị của người gửi (yêu cầu --perms).
  • An ocó nghĩa là chủ sở hữu khác và đang được cập nhật giá trị của người gửi (yêu cầu đặc quyền - chủ sở hữu và siêu người dùng).
  • A gcó nghĩa là nhóm khác và đang được cập nhật giá trị của người gửi (yêu cầu --group và quyền thiết lập nhóm).
  • Các ukhe được dành riêng để sử dụng trong tương lai.
  • anghĩa là thông tin ACL đã thay đổi.
  • xnghĩa là thông tin thuộc tính mở rộng đã thay đổi.

Có thể có một đầu ra khác: khi xóa tệp, "% i" sẽ xuất chuỗi "* xóa" cho mỗi mục đang bị xóa (giả sử rằng bạn đang nói chuyện với một rsync đủ gần đây để nó ghi lại các xóa thay vì xuất chúng dưới dạng một tin nhắn dài).


Bài đăng / câu trả lời này bây giờ rất cũ, nhưng tôi đã phải viết một bình luận về nó. Là một trong những câu trả lời hay nhất mà tôi từng thấy về rsync. Cảm ơn mit
Jorge

101

Một thời gian trở lại đây, tôi cần hiểu rsyncđầu ra cho một kịch bản mà tôi đang viết. Trong quá trình viết script đó, tôi đã tìm kiếm xung quanh và tìm đến những gì @mit đã viết ở trên . Tôi đã sử dụng thông tin đó, cũng như tài liệu từ các nguồn khác, để tạo mồi của riêng tôi về cờ bit và cách lấy rsynccờ bit đầu ra cho tất cả các hành động (nó không thực hiện điều này theo mặc định).

Tôi đăng thông tin đó ở đây với hy vọng rằng nó sẽ giúp những người khác (như tôi) tình cờ tìm kiếm được trên trang này và cần được giải thích rõ hơn rsync.

Với sự kết hợp của --itemize-changeslá cờ những -vvvlá cờ, rsynccho chúng ta kết quả chi tiết của tất cả các thay đổi hệ thống tập tin đó đã được xác định trong thư mục nguồn khi so sánh với các thư mục đích. Các cờ bit được tạo ra rsyncsau đó có thể được giải mã để xác định những gì đã thay đổi. Để giải mã ý nghĩa của từng bit, hãy sử dụng bảng sau.

Giải thích về vị trí và giá trị của từng bit trong rsyncđầu ra của:

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

Một số ví dụ đầu ra từ rsync cho các tình huống khác nhau:

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

Bắt rsyncđầu ra của (tập trung vào các cờ bit):

Trong thử nghiệm của tôi, cả hai --itemize-changeslá cờ những -vvvlá cờ là cần thiết để có được rsyncđầu ra một mục nhập cho tất cả các thay đổi hệ thống tập tin. Nếu không có -vvvcờ ba tiết ( ), tôi không thấy các thay đổi về thư mục, liên kết và thiết bị được liệt kê. Bạn nên thử nghiệm với phiên bản rsync của mình để đảm bảo rằng nó đang quan sát và ghi nhận tất cả những gì bạn mong đợi.

Một cách sử dụng hữu ích của kỹ thuật này là thêm --dry-runcờ vào lệnh và thu thập danh sách thay đổi, như được xác định bởi rsync, vào một biến (mà không cần thực hiện bất kỳ thay đổi nào) để bạn có thể tự thực hiện một số xử lý trên danh sách. Một cái gì đó như sau sẽ nắm bắt đầu ra trong một biến:

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

Trong ví dụ trên, đầu ra (stdout) từ rsyncđược chuyển hướng đến grep(thông qua stdin) để chúng ta chỉ có thể cô lập các dòng có chứa cờ bit.

Xử lý đầu ra đã chụp:

Nội dung của biến sau đó có thể được ghi lại để sử dụng sau này hoặc ngay lập tức được lặp lại cho các mục quan tâm. Tôi sử dụng chiến thuật chính xác này trong kịch bản tôi đã viết trong quá trình nghiên cứu thêm rsync. Bạn có thể xem script ( https://github.com/jmmitchell/movestough ) để biết các ví dụ về xử lý hậu kỳ đầu ra đã chụp để cô lập các tệp mới, các tệp trùng lặp (cùng tên, cùng nội dung), xung đột tệp (cùng tên, khác nội dung), cũng như những thay đổi trong cấu trúc thư mục con.


1
rất hữu ích! -T trong đầu ra nhật ký là gì?
Pol Hallen

Pol, bạn đang hỏi về cờ - T cho rsync?
John Mark Mitchell

Pol, nếu tôi hiểu câu hỏi của bạn một cách chính xác, chữ t trong nhật ký rsync có nghĩa là hai tệp được so sánh có dấu thời gian khác nhau. Có nghĩa là chúng được tạo hoặc sửa đổi vào những thời điểm khác nhau.
John Mark Mitchell

3
Tôi tin rằng "T" trong đầu ra có nghĩa là thời gian đã được cập nhật thành thời điểm hiện tại, "<f..T ...... Rise.mp3". Ít nhất đây là những gì tôi đang quan sát. "t" sẽ là thời gian của tệp cục bộ.
C. Kelly

1
Tôi đã trễ vài năm, nhưng "t" vs "T" được giải thích trong trang người đàn ông: A t có nghĩa là thời gian sửa đổi khác nhau và đang được cập nhật giá trị của người gửi (yêu cầu --times). Giá trị thay thế của T có nghĩa là thời gian sửa đổi sẽ được đặt thành thời gian truyền, điều này xảy ra khi tệp / liên kết biểu tượng / thiết bị được cập nhật mà không có --times và khi liên kết biểu tượng được thay đổi và người nhận không thể đặt thời gian của nó. (Lưu ý: khi sử dụng ứng dụng khách rsync 3.0.0, bạn có thể thấy cờ s kết hợp với t thay vì cờ T thích hợp cho lỗi cài đặt thời gian này.)
user187557

2

1) Wodin, điều đó không hoàn toàn đúng. Nếu sử dụng thẻ --partial hoặc -P (giống như --partial --progress), rsync sẽ tiếp tục quá trình truyền bị gián đoạn.

2) Chính xác, đó là đầu ra phổ biến cho thẻ --itemize-changes.


2

1.) Nó sẽ "khởi động lại quá trình đồng bộ hóa", nhưng nó sẽ không chuyển các tệp có cùng kích thước và dấu thời gian, v.v. Trước tiên, nó xây dựng một danh sách các tệp để chuyển và trong giai đoạn này, nó sẽ thấy rằng nó đã chuyển một số tệp và sẽ bỏ qua chúng. Bạn nên yêu cầu rsync lưu giữ dấu thời gian, v.v. (ví dụ: sử dụng rsync -a ...)

Trong khi rsync đang chuyển một tệp, nó sẽ gọi nó là một cái gì đó giống như .filename.XYZABCthay vì filename. Sau đó, khi nó hoàn tất việc chuyển tệp đó, nó sẽ đổi tên nó. Vì vậy, nếu bạn giết rsync trong khi nó đang truyền một tệp lớn, bạn sẽ phải sử dụng tùy chọn --partial để tiếp tục chuyển thay vì bắt đầu từ đầu.

2.) Tôi không biết đó là gì. Bạn có thể dán một số ví dụ?

CHỈNH SỬA: Theo http://ubuntuforums.org/showthread.php?t=1342171 những mã này được định nghĩa trong trang người đàn ông rsync trong phần cho -i, --itemize-changestùy chọn.

Đã sửa một phần nếu câu trả lời của tôi dựa trên Joao's


Tôi đặt một số ví dụ nhật ký ở trên. Cảm ơn.
GodFather

Tôi đã cập nhật câu trả lời của mình. Các mã được giải thích trong trang người đàn ông.
Wodin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.