ngăn chặn cảnh báo rsync: một số tệp biến mất trước khi chúng có thể được chuyển


14

Tôi nhận được vô số cảnh báo khi sao lưu các tệp máy chủ Postfix và Courier đang chạy của mình như:

file has vanished: /var/kunden/mail/username/name@mymail.de/tmp/courier.lock

Làm cách nào để loại bỏ những cảnh báo đó rsynckhi chạy nó từ Cron /usr/bin/rsnapshot hourly?

Tôi có thể bằng cách nào đó loại trừ những dirs?

/var/kunden/mail/*/*/tmp/

các tmpthư mục có thể được sâu sắc hơn là tốt, ví dụ:

file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/courier.lock

Câu trả lời:


6

Bạn có thể sử dụng rsynccông tắc loại trừ ( --exclude):

$ rsync -avz --exclude '**/tmp/' source/ destination/

Được chỉ định theo cách --exclude '**/tmp/'này sẽ bỏ qua bất kỳ đường dẫn nào bao gồm chuỗi /tmp/. Bạn có thể cung cấp các mẫu cho các đối số này là tốt.

Thí dụ

$ rsync -avz --exclude '/path/to/*/tmp/' source/ destination/

Sẽ loại trừ trên các đường dẫn của mẫu : /path/to/*/tmp/.


vậy tôi có phải cố gắng rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ không?
rubo77

@ rubo77 - nó sẽ bỏ qua mọi thư mục có /tmp/trong đó như tôi đã viết. Nếu bạn muốn rõ ràng hơn thì có, bạn có thể chỉ định nó như bạn đã viết.
slm

@ rubo77 --exclude='/tmp/'chỉ loại trừ thư mục được gọi tmpở thư mục gốc của bản sao. Để loại trừ tất cả các thư mục con được gọi ở tmpbất cứ đâu, hãy sử dụng --exclude='**/tmp/'.
Gilles 'SO- ngừng trở nên xấu xa'

1
... hoặc sử dụng một hệ thống tệp có ảnh chụp nhanh ... có vẻ như rất khó để khôi phục bản sao lưu khi các tệp biến mất giữa chừng ... trừ khi chúng không quan trọng, trong trường hợp đó, vâng, có lẽ chúng nên bị loại trừ ...
Erk

19

Thật không may, không giống như những gì được mô tả trong giải pháp SWdream, --ignore-missing-argskhông có tác động đến các tập tin biến mất. Nó chỉ đơn giản là bỏ qua các đối số nguồn không tồn tại.

Xem man rsync:

  --ignore-missing-args
          When rsync is first processing the explicitly  requested  source
          files  (e.g. command-line arguments or --files-from entries), it
          is normally an error if the file cannot be found.   This  option
          suppresses  that  error,  and does not try to transfer the file.
          This does not affect subsequent vanished-file errors if  a  file
          was initially found to be present and later is no longer there.

Cách "chính thức" bỏ qua tệp biến mất là sử dụng tập lệnh này từ kho lưu trữ nguồn rsync chính thức: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- biến mất; hb = ĐẦU

rất giống với những gì @kenorb và @ gilles-quenot nói.


13

Lý do là các tệp này đã tồn tại trong khi rsync đang xây dựng danh sách các tệp cần chuyển nhưng chúng bị xóa trước khi chuyển.

Đó là một massage cảnh báo, không phải là một lỗi. Tuy nhiên, bạn nên cố gắng tìm hiểu tại sao những tập tin này bị xóa, nó có thể quan trọng.

Để bỏ qua cảnh báo này, bạn có thể sử dụng tùy chọn --exclude như câu hỏi trên hoặc sử dụng -ignore-missing-args tùy chọn rsync, nó làm cho rsync bỏ qua các tập tin biến mất: --ignore-missing-args ignore missing source args without error nó có thể giúp ích.


Điều này có vẻ tốt hơn so với việc kiểm tra mã trả lại cụ thể và ghi đè lên 0.
Tẩy chay SE cho Monica Cellio

Trừ những trường hợp hiếm hoi, các tệp biến mất trong quá trình sao lưu trực tiếp là hoàn toàn bình thường (rất nhiều ứng dụng tạo các tệp tạm thời có thời gian ngắn). Điều này đặc biệt đúng trong trường hợp máy chủ thư, trong đó các tệp chứa thư e-mail liên tục được chuyển từ thư mục này sang thư mục khác, vì vậy IMHO câu trả lời này phù hợp hơn so với OP được chấp nhận.
MoonSweep

1
Thật không may, tùy chọn này không tồn tại trong tất cả các phiên bản của rynsc. Đặc biệt, 3.0.6, xuất
xưởng

3
tùy chọn này chỉ có hiệu lực với các tệp có tên trong các đối số, những tệp được tìm thấy trong quá trình tìm kiếm đệ quy vẫn được cảnh báo.
Jasen

6

Lỗi có nghĩa là rsynckhông thể tìm thấy các tệp đã tồn tại trong khi xây dựng danh sách để chuyển. Những lỗi tệp biến mất này xảy ra khi một tệp ban đầu được tìm thấy có mặt và sau đó không còn ở đó nữa. Trong một số trường hợp, điều này cũng xảy ra khi các tệp nguồn bị hỏng hoặc có các ký tự không hợp lệ trong tên (vì vậy fscknên sử dụng).

Về cơ bản, đây là một cảnh báo, không phải là lỗi, vì vậy không có gì phải lo lắng, vì trạng thái của mỗi tệp đích phản ánh trạng thái của các tệp nguồn tương ứng trong quá trình chạy.

Nếu nó gây ra vấn đề vì giá trị thoát là khác không, điều này có thể được giải quyết bằng tập lệnh bao bọc sau ( nguồn ):

#!/bin/bash
(rsync "$@"; if [ $? == 24 ]; then exit 0; else exit $?; fi) 2>&1 | grep -v 'vanished'

hoặc theo kịch bản giải pháp sau ( nguồn ):

#!/bin/sh
OUT=`/usr/bin/snapback2 2>&1`
RET=$?
if [ "$RET" != "23" -a "$RET" != "0" -a "$RET" != 24 ]; then
    echo "$OUT"
    exit $RET
fi

về cơ bản tồn tại với các mã lỗi tương tự như rsync nếu rsync không thành công.

Điều này được thảo luận thêm trong: Bug 3653 - Giảm nhu cầu cảnh báo "tập tin biến mất"


6

Hoặc đơn giản (với hiện đại ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret

1
Sẽ không ngăn chặn cảnh báo của tất cả các loại tệp có chứa chuỗi vanishedtrong đó chứ?
rubo77

Chắc chắn, bài được chỉnh sửa phù hợp
Gilles Quenot

2

Câu trả lời của tôi có thể là một trường hợp sử dụng đặc biệt nhưng tôi cảm thấy nó đáng chú ý, vì vậy mọi người không bị mất dữ liệu nếu họ rơi vào trường hợp này.

Tôi đã nhận được thông báo đó cho một số tệp trong khi thực hiện sao lưu thường xuyên các ổ đĩa thông qua rsync.

Tôi đã thực hiện Kiểm tra hệ thống trên đĩa và hóa ra có vấn đề với ổ đĩa (phân bổ / hỏng tệp, v.v.) và đề xuất sao lưu + khôi phục + định dạng lại.

Vì vậy, trước khi bạn loại bỏ thông điệp hoặc bỏ qua tin nhắn hoàn toàn, có lẽ nên khôn ngoan khi kiểm tra sức khỏe trên ổ đĩa của bạn để đảm bảo an toàn.


Lỗi ổ đĩa sẽ không chọn lọc chỉ xảy ra trong các tmpthư mục.

0

Hãy thử gắn đĩa sao lưu của bạn với nosuid,nodev,nofail,x-gvfs-show các tùy chọn.

Không chắc chắn hệ thống nào bạn đang sử dụng nhưng tôi tin rằng điều này có liên quan đến các tùy chọn gắn kết của đĩa của bạn. Trên Linux, điều này xảy ra nếu tôi đặt các tùy chọn gắn kết thành User Session Default. Nó giải quyết khi tôi vô hiệu hóa nó và rsync hoàn thành mà không có bất kỳ lỗi nào.

nhập mô tả hình ảnh ở đây


0

Sử dụng tham số này:

--exclude-from="./exclude.ini"

để đặt danh sách trong một tập tin. Trong tệp Elim.ini, hãy viết một cái gì đó như:

Cache
cache2/*
*.lock
/temp

Ở đâu:

  1. không bao gồm TẤT CẢ các thư mục có tên "Cache" và nội dung của anh ấy;
  2. không bao gồm nội dung của tất cả các thư mục có tên "cache2" nhưng bao gồm phân cấp thư mục để bạn sẽ nhận được tất cả các thư mục con nhưng trống;
  3. loại trừ tất cả các tệp kết thúc bằng .lock (ví dụ: một số tệp khóa của Firefox và các dẫn xuất);
  4. không bao gồm nội dung của thư mục / temp.

Hãy nhớ rằng nếu hệ thống tệp là trường hợp nhúng, bạn có thể phải tính đến việc này.

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.