rsync चेतावनी को दबाएं: कुछ फ़ाइलों को स्थानांतरित करने से पहले वे गायब हो गए


15

मुझे अपने चलने वाले पोस्टफ़िक्स और कुरियर सर्वर फ़ाइलों का बैकअप लेने पर चेतावनियों का भार मिलता है जैसे:

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

rsyncक्रोन से चलने पर मैं उन चेतावनियों को कैसे दबाऊं /usr/bin/rsnapshot hourly?

क्या मैं किसी तरह उन डेरों को बाहर कर सकता हूं?

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

tmpफ़ोल्डर गहरा भी हो सकता है, उदाहरण के लिए:

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

जवाबों:


7

आप rsyncस्विच को बाहर कर सकते हैं ( --exclude):

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

इस तरह --exclude '**/tmp/'से निर्दिष्ट किसी भी पथ को अनदेखा करेगा जिसमें स्ट्रिंग शामिल है /tmp/। आप इस तर्क को पैटर्न भी प्रदान कर सकते हैं।

उदाहरण

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

फार्म के पथ पर बाहर कर देंगे: /path/to/*/tmp/


इसलिए मुझे कोशिश करनी होगी rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
रूबॉन्ग 7

@ rubo77 - यह उन सभी निर्देशिकाओं को अनदेखा कर देगा जो /tmp/मैंने उन्हें लिखा था। यदि आप अधिक स्पष्ट होना चाहते हैं तो हां आप इसे अपने लिखे अनुसार निर्दिष्ट कर सकते हैं।
स्लम

@ rubo77 कॉपी के मूल में --exclude='/tmp/'केवल निर्देशिका को बाहर tmpकरता है। tmpकहीं भी बुलाया सभी उपनिर्देशिकाओं को बाहर करने के लिए , का उपयोग करें --exclude='**/tmp/'
गिल्स एसओ- बुराई को रोकना '

1
... या स्नैपशॉट के साथ एक फ़ाइल सिस्टम का उपयोग करें ... यह एक बैकअप को पुनर्स्थापित करने के लिए समस्याग्रस्त लगता है जहां फाइलें आधे रास्ते से गायब हो जाती हैं ... जब तक कि वे असंगत नहीं हैं, इस मामले में, हां, उन्हें शायद बाहर रखा जाना चाहिए ...
Erk

19

दुर्भाग्य से, SWdream समाधान में वर्णित के विपरीत, --ignore-missing-argsलुप्त फ़ाइलों पर कोई प्रभाव नहीं है। यह केवल उन स्रोत तर्कों की उपेक्षा करेगा जो मौजूद नहीं हैं।

देखें 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.

लुप्त हो चुकी फ़ाइल को अनदेखा करने का "आधिकारिक" तरीका आधिकारिक rsync स्रोत भंडार से इस स्क्रिप्ट का उपयोग करना है: https://git.samba.org/?p=rsync.git/a=blob_plain=f=support/rsync-no- गायब हो गई, एचबी = HEAD

जो कि @kenorb और @ गिलेस-क्वेनोट के समान है।


13

इसका कारण यह है कि ये फ़ाइलें मौजूद थीं जबकि rsync स्थानांतरण के लिए फ़ाइलों की सूची का निर्माण कर रहा है, लेकिन स्थानांतरित करने से पहले उन्हें हटा दिया जाता है।

यह एक चेतावनी मालिश है, एक त्रुटि नहीं। हालांकि, आपको यह पता लगाने की कोशिश करनी चाहिए कि ये फाइल क्यों हटाई गई, यह शायद महत्वपूर्ण है।

इस चेतावनी को अनदेखा करने के लिए, आप उपरोक्त प्रश्न के रूप में --exclude विकल्प का उपयोग कर सकते हैं या -ignore-missing-argsrsync विकल्प का उपयोग कर सकते हैं , यह rsync को गायब हो चुकी फ़ाइलों की उपेक्षा --ignore-missing-args ignore missing source args without error करता है : यह शायद मदद करता है।


यह निश्चित रूप से एक विशिष्ट रिटर्न कोड की जाँच करने और इसे ओवरराइड करने के लिए 0. से बेहतर लगता है।
मोनिका सेलियो

दुर्लभ मामलों को छोड़कर, लाइव बैकअप के दौरान गायब होने वाली फाइलें पूरी तरह से सामान्य होती हैं (बहुत सारे एप्लिकेशन अल्पकालिक अस्थायी फाइलें बनाते हैं)। यह मेल सर्वर के मामले में विशेष रूप से सच है, जहां ई-मेल संदेशों वाली फाइलें लगातार एक निर्देशिका से दूसरे में स्थानांतरित की जाती हैं, इसलिए IMHO यह उत्तर ओपी द्वारा स्वीकार किए गए एक से अधिक पर्याप्त है।
1

1
दुर्भाग्य से यह विकल्प rynsc के सभी संस्करणों में मौजूद नहीं है। विशेष रूप से, 3.0.6, जो CentOS 6 के साथ जहाज करता है
jph

3
यह विकल्प केवल तर्कों में नामित फ़ाइलों को प्रभावित करता है, जो पुनरावर्ती खोज के दौरान पाए जाते हैं वे अभी भी चेतावनी देते हैं।
१२:४० पर जैसन १

6

त्रुटि का मतलब है कि rsyncउन फ़ाइलों को अब और नहीं खोजा जा सकता है जो स्थानांतरण के लिए सूची का निर्माण करते समय मौजूद थे। ये गायब-फ़ाइल त्रुटियां तब होती हैं जब एक फ़ाइल शुरू में मौजूद पाई गई थी और बाद में अब नहीं है। कुछ मामलों में ऐसा तब भी होता है जब स्रोत फ़ाइलें दूषित होती हैं या उनके नाम में अमान्य वर्ण होते हैं (इसलिए fsckसलाह दी जाती है)।

मूल रूप से यह एक चेतावनी है, एक त्रुटि नहीं है, इसलिए चिंता करने की कोई बात नहीं है, क्योंकि प्रत्येक गंतव्य फ़ाइल की स्थिति एक स्थिति को दर्शाती है कि रन के दौरान संबंधित स्रोत फ़ाइलें।

यदि निकास मान शून्य होने के कारण यह समस्या हो रही है, तो इसे निम्न आवरण स्क्रिप्ट ( स्रोत ) द्वारा हल किया जा सकता है :

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

या निम्न वर्कअराउंड स्क्रिप्ट ( स्रोत ) द्वारा:

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

यदि rsync विफल रहता है तो मूल रूप से समान त्रुटि कोड के साथ मौजूद है।

इस पर आगे चर्चा की गई है: बग 3653 - "गायब हो चुकी फाइलें" चेतावनी की आवश्यकता को कम करें


6

या बस (आधुनिक साथ ):

#!/bin/bash

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

1
क्या यह उन सभी प्रकार की फ़ाइलों की चेतावनी को दबाएगा, जिनमें स्ट्रिंग vanishedभी है?
रूबों 7

निश्चित रूप से, तदनुसार पोस्ट किया गया
गिल्स केनॉट

2

मेरा जवाब एक विशेष उपयोग मामला हो सकता है लेकिन मुझे लगा कि यह ध्यान देने योग्य है, इसलिए लोग इस मामले में पड़ने पर डेटा नहीं खोते हैं।

मैं rsync के माध्यम से ड्राइव का एक नियमित बैकअप प्रदर्शन करते हुए कई फ़ाइलों के लिए वह संदेश प्राप्त कर रहा था।

मैंने डिस्क पर एक सिस्टम चेक किया और यह पता चला कि ड्राइव (आवंटन / फ़ाइल भ्रष्टाचार आदि) के साथ समस्याएं हैं और एक बैकअप + पुनर्स्थापना + सुधार की सिफारिश की है।

तो इससे पहले कि आप एक दबाने बाहर जाएं या संदेश को एक दम से नजरअंदाज करें, हो सकता है कि सिर्फ सुरक्षित रहने के लिए अपनी ड्राइव पर स्वास्थ्य जांच करवाएं।


ड्राइव विफलताओं का चयन केवल tmpनिर्देशिका में ही नहीं होगा ।

0

nosuid,nodev,nofail,x-gvfs-showविकल्पों के साथ अपने बैकअप डिस्क को माउंट करने का प्रयास करें।

निश्चित नहीं है कि आप किस सिस्टम का उपयोग कर रहे हैं, लेकिन मेरा मानना ​​है कि यह आपकी डिस्क के माउंट विकल्पों से संबंधित है। लिनक्स पर यह तब होता है जब मैं माउंट विकल्प को सेट करता हूं User Session Default। जब मैं इसे अक्षम करता हूं तो यह हल हो जाता है और rsync बिना किसी त्रुटि के पूरा हो जाता है।

यहाँ छवि विवरण दर्ज करें


0

इस पैरामीटर का उपयोग करें:

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

सूची को फ़ाइल में रखना है। अपवर्जित करें। फ़ाइल में कुछ इस तरह लिखें:

Cache
cache2/*
*.lock
/temp

कहाँ पे:

  1. "कैश" और उसकी सामग्री नाम के सभी फ़ोल्डरों को बाहर करता है;
  2. सभी "कैश 2" नामित फ़ोल्डर की सामग्री को बाहर करता है, लेकिन फ़ोल्डर पदानुक्रम को शामिल करता है ताकि आपको सभी सबफ़ोल्डर मिलेंगे लेकिन खाली;
  3. .lock के साथ समाप्त होने वाली सभी फ़ाइलों को बाहर करता है (जैसे। फ़ायरफ़ॉक्स और व्युत्पन्न की कुछ लॉक फाइलें);
  4. / अस्थायी फ़ोल्डर की सामग्री को निकालता है।

याद रखें कि यदि फ़ाइल सिस्टम केस-डिपेंडेंट है तो आपको इसके लिए जिम्मेदार होना पड़ सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.