rsync uyarısını bastır: bazı dosyalar aktarılmadan önce kayboldu


15

Çalışan Postfix ve Courier sunucu dosyalarımı yedeklerken bir sürü uyarı alıyorum:

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

Bu uyarıları rsyncCron'dan çalıştırırken nasıl engelleyebilirim /usr/bin/rsnapshot hourly?

Bu dirsekleri bir şekilde dışlayabilir miyim?

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

tmpKlasör örneğin, derin de olabilir:

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

Yanıtlar:


7

Adlı kullanıcının rsyncexclude anahtarını ( --exclude) kullanabilirsiniz:

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

Bu şekilde belirtildiğinde --exclude '**/tmp/', dizeyi içeren tüm yollar göz ardı edilir /tmp/. Bu argümanlara da kalıplar sağlayabilirsiniz.

Misal

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

Formun yollarında hariç tutar: /path/to/*/tmp/.


denemek zorunda rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ mıyım?
rubo77

@ rubo77 - /tmp/ben yazarken onları içeren dizinleri görmezden gelecektir . Daha açık olmak istiyorsanız, evet yazarken belirtebilirsiniz.
slm

@ rubo77 --exclude='/tmp/'yalnızca tmpkopyanın kök dizininde çağrılan dizini hariç tutar . Herhangi bir tmpyerde çağrılan tüm alt dizinleri hariç tutmak için kullanın --exclude='**/tmp/'.
Gilles 'SO- kötü olmayı kes'

1
... veya anlık görüntüleri olan bir dosya sistemi kullanın ... dosyaların yarıya kadar kaybolduğu bir yedeklemeyi geri yüklemek sorunlu görünüyor ... önemsiz olmadıkları sürece, evet, muhtemelen hariç tutulmalıdır ...
Erk

19

Ne yazık ki, SWdream çözümünde açıklanandan farklı olarak --ignore-missing-args, yok olan dosyalar üzerinde hiçbir etkisi yoktur. Sadece varolmayan kaynak argümanlarını görmezden gelir.

Bakınız 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.

Yok olan dosyayı görmezden gelmenin "resmi" yolu, bu komut dosyasını resmi rsync kaynak deposundan kullanmaktır: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- kayboldu; hb = KAFA

@kenorb ve @ gilles-quenot'un söylediklerine çok benzer.


13

Bunun nedeni, rsync aktarılacak dosyaların listesini oluştururken bu dosyaların var olması, ancak aktarılmadan önce kaldırılmalarıdır.

Bu bir uyarı masajı, bir hata değil. Ancak, bu dosyanın neden silindiğini bulmaya çalışmalısınız, belki de önemlidir.

Bu uyarıyı yok saymak için, yukarıdaki soruda olduğu gibi --exclude seçeneğini kullanabilir veya -ignore-missing-argsrsync seçeneğini kullanabilirsiniz , rsync'in yok olan dosyaları yoksaymasını sağlar: --ignore-missing-args ignore missing source args without error belki yardımcı olabilir.


Bu kesinlikle belirli bir dönüş kodunu kontrol edip 0'a geçersiz kılmaktan daha iyi görünüyor
Monica Cellio için Boycott SE

Nadir durumlarda, canlı yedekleme sırasında kaybolan dosyalar mükemmel şekilde normaldir (birçok uygulama kısa ömürlü geçici dosyalar oluşturur). Bu özellikle, e-posta mesajları içeren dosyaların sürekli olarak bir dizinden diğerine taşındığı bir posta sunucusu için geçerlidir, bu nedenle IMHO bu cevap OP tarafından kabul edilenlerden daha yeterlidir.
MoonSweep

1
Ne yazık ki bu seçenek tüm rynsc sürümlerinde mevcut değildir. Özellikle, CentOS 6 ile birlikte gelen 3.0.6
jph

3
bu seçenek yalnızca bağımsız değişkenlerde adlandırılan dosyaları etkiler, özyinelemeli arama sırasında bulunanlar hala uyarılır.
Jasen

6

Hata rsync, aktarılacak listeyi oluştururken varolan dosyaları artık bulamayacağı anlamına gelir . Bu kaybolan dosya hataları, bir dosyanın başlangıçta bulunduğu ve daha sonra artık bulunmadığında ortaya çıkar. Bazı durumlarda kaynak dosyalar bozulduğunda veya adında geçersiz karakterler bulunduğunda da olur (bu fscknedenle önerilir).

Temel olarak bu bir uyarı değildir, bir hata değildir, bu yüzden endişelenecek bir şey yoktur, çünkü her hedef dosyanın durumu çalışma sırasında karşılık gelen kaynak dosyalarının olduğu bir durumu yansıtır.

Çıkış değeri sıfır olmadığı için soruna neden oluyorsa, bu aşağıdaki sarmalayıcı komut dosyası ( kaynak ) ile çözülebilir :

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

veya aşağıdaki geçici çözüm komut dosyası ( kaynak ) ile:

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

temel olarak rsync başarısız olursa, rsync ile aynı hata kodlarıyla birlikte bulunur.

Bu konu ayrıca ele alınmaktadır: Hata 3653 - "Kaybolan dosyalar" uyarısına olan ihtiyacı azaltın


6

Veya basitçe (modern ):

#!/bin/bash

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

1
Bu, içinde dize vanishedbulunan her türlü dosya uyarısını da bastırmaz mı?
rubo77

Elbette, posta buna göre düzenlendi
Gilles Quenot

2

Cevabım özel bir kullanım durumu olabilir, ancak dikkat çekmeye değer olduğunu düşündüm, bu yüzden insanlar bu davaya düştüklerinde veri kaybetmezler.

Ben rsync aracılığıyla sürücülerin rutin bir yedekleme yaparken birkaç dosya için bu mesajı alıyordum.

Diskte bir Sistem Denetimi yaptım ve sürücüde (ayırma / dosya bozulması vb.) Sorunlar olduğu ortaya çıktı ve bir yedekleme + geri yükleme + yeniden biçimlendirme önerdi.

Bu nedenle, bir baskıyı kaldırmadan veya iletiyi açıkça görmezden gelmeden önce, sadece güvenli olmak için sürücünüzde bir sağlık kontrolü yapmak akıllıca olabilir.


Sürücü hataları yalnızca tmpdizinlerde seçici olarak gerçekleşmez .

0

Yedek diskinizi nosuid,nodev,nofail,x-gvfs-showseçeneklerle bağlamayı deneyin .

Hangi sistemi kullandığınızdan emin değilim ama bunun diskinizin montaj seçenekleri ile ilgili olduğuna inanıyorum. Linux'ta bağlama seçeneklerini şu şekilde ayarlarsam bu olur User Session Default. Devre dışı bıraktığımda çözülür ve rsync herhangi bir hata olmadan tamamlanır.

resim açıklamasını buraya girin


0

Bu parametreyi kullanın:

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

listeyi bir dosyaya koymak için. Exclude.ini dosyasına şöyle bir şey yazın:

Cache
cache2/*
*.lock
/temp

Nerede:

  1. "Önbellek" adlı TÜM klasörleri ve içeriğini içermez;
  2. "cache2" adlı tüm klasörlerin içeriğini hariç tutar, ancak klasör hiyerarşisini dahil eder, böylece tüm alt klasörleri boş bırakırsınız;
  3. .lock ile biten tüm dosyaları hariç tutar (örneğin, Firefox ve türevlerinin bazı kilit dosyaları);
  4. / temp klasörünün içeriğini hariç tutar.

Dosya sistemi büyük / küçük harfe duyarlıysa, bunu hesaba katmanız gerekebileceğini unutmayın.

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.