suppress rsync warning: beberapa file hilang sebelum ditransfer

14

Saya mendapat banyak peringatan ketika mencadangkan file server Postfix dan Courier saya yang sedang berjalan seperti:

file has vanished: /var/kunden/mail/username/[email protected]/tmp/courier.lock

Bagaimana cara saya menekan peringatan itu dari rsyncsaat menjalankannya dari Cron /usr/bin/rsnapshot hourly?

Bisakah saya mengecualikan dir itu?

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

yang tmpfolder bisa lebih dalam juga, misalnya:

file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/courier.lock
rubo77
sumber

Jawaban:

6

Anda dapat menggunakan rsyncsakelar kecualikan ( --exclude):

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

Ditentukan dengan cara ini --exclude '**/tmp/'akan mengabaikan jalur apa pun yang termasuk string /tmp/. Anda dapat memberikan pola untuk argumen ini juga.

Contoh

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

Akan mengecualikan di jalan dalam bentuk: /path/to/*/tmp/.

slm
sumber
jadi saya harus coba rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77
@ rubo77 - ini akan mengabaikan direktori apa pun yang termasuk /tmp/di dalamnya ketika saya menulisnya. Jika Anda ingin lebih eksplisit maka ya Anda bisa menentukannya seperti yang Anda tulis.
slm
@ rubo77 --exclude='/tmp/'mengecualikan hanya direktori yang dipanggil tmppada akar salinan. Untuk mengecualikan semua subdirektori yang dipanggil di tmpmana saja, gunakan --exclude='**/tmp/'.
Gilles 'SANGAT berhenti menjadi jahat'
1
... atau menggunakan sistem file dengan snapshot ... sepertinya bermasalah untuk mengembalikan cadangan di mana file menghilang di tengah jalan ... kecuali mereka tidak penting, dalam hal ini, ya, mereka mungkin harus dikecualikan ...
Erk
19

Sayangnya, tidak seperti apa yang dijelaskan dalam solusi SWdream, --ignore-missing-argstidak berdampak pada file yang hilang. Ini hanya akan mengabaikan argumen sumber yang tidak ada.

Lihat 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.

Cara "resmi" mengabaikan file yang hilang adalah dengan menggunakan skrip ini dari repositori sumber rsync resmi: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- menghilang; hb = KEPALA

yang sangat mirip dengan apa yang dikatakan @kenorb dan @ gilles-quenot.

Benoit Jacquemont
sumber
13

Alasannya adalah file-file ini ada saat rsync sedang membangun daftar file untuk ditransfer tetapi mereka dihapus sebelum mentransfer.

Itu adalah pijatan peringatan, bukan kesalahan. Namun, Anda harus mencoba mencari tahu mengapa file ini dihapus, mungkin penting.

Untuk mengabaikan peringatan ini, Anda dapat menggunakan opsi --exclude seperti pertanyaan di atas atau menggunakan -ignore-missing-argsopsi rsync, itu membuat rsync mengabaikan file yang hilang: --ignore-missing-args ignore missing source args without error mungkin membantu.

SWdream
sumber
Ini tampaknya jelas lebih baik daripada memeriksa kode pengembalian spesifik dan menimpanya menjadi 0.
Boikot SE untuk Monica Cellio
Kecuali dalam kasus yang jarang terjadi, file yang hilang selama live backup sangat normal (banyak aplikasi membuat file sementara yang berumur pendek). Ini terutama benar dalam kasus server surat, di mana file yang berisi pesan email terus-menerus dipindahkan dari satu direktori ke direktori lain, jadi IMHO jawaban ini lebih memadai daripada yang diterima oleh OP.
MoonSweep
1
Sayangnya opsi ini tidak ada di semua versi rynsc. Secara khusus, 3.0.6, yang dikirimkan dengan CentOS 6.
jph
3
opsi ini hanya mempengaruhi file yang disebutkan dalam argumen, yang ditemukan selama pencarian rekursif masih diperingatkan.
Jasen
6

Kesalahan berarti bahwa rsynctidak dapat menemukan file lagi yang ada saat membangun daftar untuk ditransfer. Kesalahan file lenyap ini terjadi ketika file awalnya ditemukan dan kemudian tidak ada lagi. Dalam beberapa kasus itu juga terjadi ketika file sumber rusak atau memiliki karakter yang tidak valid dalam nama ( fsckdisarankan).

Pada dasarnya ini adalah peringatan, bukan kesalahan, jadi tidak ada yang perlu dikhawatirkan, karena keadaan setiap file tujuan mencerminkan keadaan yang terkait dengan file sumber selama menjalankan.

Jika menyebabkan masalah karena nilai keluar adalah nol, ini dapat diselesaikan dengan skrip wrapper berikut ( sumber ):

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

atau dengan skrip solusi ( sumber ) berikut:

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

yang pada dasarnya ada dengan kode kesalahan yang sama dengan rsync jika rsync gagal.

Ini lebih lanjut dibahas dalam: Bug 3653 - Kurangi perlunya peringatan "file yang hilang"

kenorb
sumber
6

Atau sederhananya (dengan modern ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret
Gilles Quenot
sumber
1
Bukankah itu akan menekan peringatan semua jenis file yang berisi string vanisheddi dalamnya juga?
rubo77
Tentu, posting diedit sesuai
Gilles Quenot
2

Jawaban saya mungkin kasus penggunaan khusus tetapi saya merasa itu layak dicatat, jadi orang tidak kehilangan data jika mereka berada dalam kasus ini.

Saya mendapatkan pesan itu untuk beberapa file sambil melakukan backup rutin drive melalui rsync.

Saya melakukan Pemeriksaan Sistem pada disk dan ternyata ada masalah dengan drive (alokasi / file korupsi dll) dan merekomendasikan cadangan + mengembalikan + memformat ulang.

Jadi sebelum Anda menekan atau mengabaikan pesan secara langsung, mungkin sebaiknya Anda menjalankan pemeriksaan kesehatan pada drive Anda hanya untuk aman.

Francis
sumber
Kegagalan drive tidak akan secara selektif hanya terjadi di tmpdirektori.
0

Coba pasang disk cadangan Anda dengan nosuid,nodev,nofail,x-gvfs-showopsi.

Tidak yakin sistem mana yang Anda gunakan tetapi saya yakin ini terkait dengan opsi pemasangan disk Anda. Di Linux ini terjadi jika saya mengatur opsi mount ke User Session Default. Itu teratasi ketika saya menonaktifkannya dan rsync selesai tanpa kesalahan.

masukkan deskripsi gambar di sini

Maks
sumber
0

Gunakan parameter ini:

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

untuk meletakkan daftar dalam file. Dalam file exclude.ini tulis sesuatu seperti:

Cache
cache2/*
*.lock
/temp

Dimana:

  1. mengecualikan SEMUA folder bernama "Cache" dan kontennya;
  2. mengecualikan konten dari semua folder "cache2" bernama tetapi sertakan hierarki folder sehingga Anda akan mendapatkan semua subfolder kecuali kosong;
  3. mengecualikan semua file yang diakhiri dengan .lock (mis. beberapa file kunci Firefox dan turunannya);
  4. tidak termasuk konten folder / temp.

Ingatlah bahwa jika sistem file tergantung pada kasus, Anda mungkin harus bertanggung jawab untuk ini.

nicolap8
sumber