एक बैकअप से पहले लिनक्स में स्थानांतरित या नामांकित फ़ाइलों का पता लगाने के लिए उपकरण या स्क्रिप्ट [बंद]


15

मूल रूप से मैं यह देखने के लिए खोज कर रहा हूं कि क्या कोई ऐसा उपकरण या स्क्रिप्ट मौजूद है जो स्थानांतरित या नामांकित फ़ाइलों का पता लगा सकती है ताकि मैं नामांकित / स्थानांतरित फ़ाइलों की सूची प्राप्त कर सकूं और बैंडविड्थ पर संरक्षण के लिए नेटवर्क के दूसरे छोर पर समान संचालन लागू कर सकूं।

मूल रूप से डिस्क भंडारण सस्ता है, लेकिन बैंडविड्थ नहीं है, और समस्या यह है कि फ़ाइलों को अक्सर पुनर्गठित किया जाएगा या एक बेहतर निर्देशिका संरचना में इधर-उधर ले जाया जाएगा, इस प्रकार जब आप बैकअप करने के लिए rsync का उपयोग करते हैं, तो rsync को यह ध्यान नहीं रहेगा कि इसका नाम बदला है या फ़ाइल को स्थानांतरित किया और दूसरे छोर पर एक ही फ़ाइल होने के बावजूद पूरे नेटवर्क पर इसे फिर से प्रसारित किया।

इसलिए मैं सोच रहा हूं कि अगर कोई स्क्रिप्ट या टूल मौजूद है, जो रिकॉर्ड कर सकता है कि सभी फाइलें कहां हैं और उनके नाम हैं, तो बस एक बैकअप से पहले, यह rescan और स्थानांतरित या नामांकित फ़ाइलों का पता लगाएगा, फिर मैं उस सूची को ले सकता हूं और फिर से आवेदन कर सकता हूं दूसरी ओर चाल / नाम बदलें।

यहां फाइलों की "सामान्य" विशेषताओं की सूची दी गई है:

  1. बड़ी अपरिवर्तनीय फ़ाइलें
  2. उनका नाम बदला या इधर-उधर किया जा सकता है

[संपादित करें:] ये सभी अच्छे उत्तर हैं, और मैं अंत में जो कर रहा हूं वह सभी उत्तरों को देख रहा था और इससे निपटने के लिए कुछ कोड लिख रहा हूं। मूल रूप से मैं जो सोच रहा हूं / उस पर काम कर रहा हूं:

  1. "प्रारंभिक" स्कैन के लिए AIDE जैसी किसी चीज़ का उपयोग करना और मुझे फाइलों पर चेकसम रखने में सक्षम बनाना क्योंकि वे कभी नहीं बदलने वाले हैं, इसलिए यह भ्रष्टाचार का पता लगाने में मदद करेगा।
  2. इन फ़ाइलों / निर्देशिका की निगरानी करने और नाम बदलने और किसी लॉग फ़ाइल के लिए फ़ाइलों को ले जाने से संबंधित किसी भी परिवर्तन की रिकॉर्डिंग करने वाले इनओटाइज़ डेमॉन का निर्माण करना।
  3. कुछ किनारे के मामले हैं जहां इनोटिफ़ाइड यह रिकॉर्ड करने में विफल हो सकता है कि फ़ाइल सिस्टम में कुछ हुआ है, इस प्रकार फ़ाइलों के लिए फ़ाइल सिस्टम को खोजने के लिए खोज का उपयोग करने का एक अंतिम चरण है जिसमें अंतिम बैकअप की तुलना में बाद का समय बदल गया है ।

इसके कई लाभ हैं:

  1. AIDE से चेकसम / इत्यादि की जाँच करें / सुनिश्चित करें कि कुछ मीडिया भ्रष्ट नहीं हुआ
  2. Inotify संसाधन उपयोग को कम रखता है और फाइल सिस्टम को बार-बार स्कैन करने की आवश्यकता नहीं होती है
  3. Rsync पैच करने की आवश्यकता नहीं है; अगर मुझे उन चीजों को पैच करना है जो मैं कर सकता हूं, लेकिन मैं बोझ को कम रखने के लिए पैचिंग चीजों से बचना पसंद करूंगा, (आईई को हर बार अपडेट करने के लिए फिर से पैच करने की आवश्यकता नहीं है)।
  4. मैंने पहले भी Unison का उपयोग किया है और इसकी वास्तव में अच्छी है, हालाँकि मैं शपथ ले सकता था कि Unison ने फाइल सिस्टम पर कॉपियाँ रख दी हैं और इसकी "आर्काइव" फाइलें बड़ी हो सकती हैं?

जवाबों:


7

Unison http://www.cis.upenn.edu/~bcpierce/unison/ चाल और नाम का पता लगाने में सक्षम होने का दावा करता है।

चाल / नाम का पता लगाने के लिए rsync करने के लिए एक दो पैच हैं:

http://gitweb.samba.org/?p=rsync-patches.git;a=blob;f=detect-renamed-lax.diff;h=1ff593c8f97a97e8970d43ff5a62dfad5abddd75;hb=master

http://gitweb.samba.org/?p=rsync-patches.git;a=blob;f=detect-renamed.diff;h=c3e6e846eab437e56e25e2c334e292996ee84345;hb=master

इस मुद्दे पर नज़र रखने वाली बुगज़िला प्रविष्टि: https://bugzilla.samba.org/show_bug.cgi?id=2294


6
ये पैच एकीकृत क्यों नहीं हैं? वे सिर्फ झंडे जोड़ते हैं, वे घुसपैठ नहीं कर रहे हैं। एक और दिलचस्प पैच rsyncsums है , जो rsync रन के बीच चेकसम को रख सकता है।
तोबू

5

यह एक अजीब समाधान का एक सा है, लेकिन ... गिट का पता चलता है और फ़ाइल सामग्री के आधार पर नाम बदल जाता है, इसलिए यदि आप संस्करण नियंत्रण के तहत सवाल में निर्देशिकाओं को रखने के लिए थे, तो गिट चाल का पता लगाने में सक्षम होगा और इस तरह के स्थानांतरण से बचें सामग्री (चूंकि यह पहले से ही तार के दोनों किनारों पर है) जबकि अभी भी पेड़ में चीजों को घूम रहा है।

सिर्फ एक विचार।


2
हां, मैंने इस पर विचार किया, अगर फाइलें छोटी थीं और पाठ आधारित, तो यह शायद अच्छा काम करेगा, लेकिन वे द्विआधारी हैं और कुल आकार एक टेराबाइट के करीब पहुंच रहा है।
फराउन

@ वरुण आपको ब्लब स्टोरेज के बिना git इंडेक्स की आवश्यकता होगी। हो सकता है कि इस कोड को git से चीर कर libit2 में जोड़ दें।
तोबू

संबंधित कोड read-cache.c में रिफ्रेश_इंडेक्स से शुरू होता है।
तोबू

5

यहाँ दिलचस्प सुझाव। इसके अलावा फाइलसिस्टम क्षमताओं का उपयोग करने के बारे में सोचा। यह अजीब पाया गया कि कोई भी उपकरण नहीं है जो कि सरल काम करता है। अधिकांश मामलों में यूनिसन विकल्प काम नहीं करता है क्योंकि लोग रिपोर्ट करते हैं, मेरे लिए भी नहीं।

मैं चाहता हूँ कि फीचर मेरे हार्ड ड्राइव पर सेकेंड हार्ड डिस्क पर अपने मूवी कलेक्शन का बैकअप रखे जब फोल्डर को रीयर करे।

अब मुझे यह सरल सी स्क्रिप्ट मिली http://sourceforge.net/projects/movesync/

ठीक काम करने लगता है। इसे चलाएं और फिर सामान्य रूप से यानी एक साथ सिंक करें।


4

आप AIDE जैसे होस्ट आधारित IDS का उपयोग करने में सक्षम हो सकते हैं और इसके आउटपुट का उपयोग करके एक आवरण स्क्रिप्ट लिख सकते हैं। चेकसम को देखते हुए आपको अधिक जटिल तर्क लिखने की संभावना होगी।

अन्यथा, एक नेटवर्क आधारित फाइल सिस्टम समझ में आ सकता है, क्योंकि सभी स्थानों पर परिवर्तन परिलक्षित होगा। फिर भी, मुझे संदेह है कि आप इंटरनेट पर स्थानांतरित कर रहे हैं, जो यहां विकल्पों को सीमित करेगा।


यही मैं करने की सोच रहा था, उनमें से एक को लेकर और उन्हें आगे बढ़ाने के लिए। इसके अलावा हाँ मैं इसे इंटरनेट पर स्थानांतरित कर रहा हूं और बैंडविड्थ बहुत सीमित है।
चरण

3

आप एकतरफा कोशिश कर सकते हैं ; विशेष रूप से

-xferbycopying स्थानीय प्रतियों (डिफ़ॉल्ट सच) का उपयोग करके स्थानांतरण को अनुकूलित करें

विकल्प में उल्लेख किए गए दस्तावेज़ों के रूप में

जब यह प्राथमिकता सेट हो जाती है, तो Unison नेटवर्क में फ़ाइल सामग्रियों को स्थानांतरित करने से बचने की कोशिश करेगा जब यह पहचान सके कि आवश्यक सामग्री वाली फ़ाइल पहले से ही लक्ष्य प्रतिकृति में मौजूद है। यह आमतौर पर फ़ाइल चालों को बहुत तेज़ी से प्रचारित करने की अनुमति देता है। डिफ़ॉल्ट मान सत्य है।

जैसा आप चाहते हैं वैसा ही हो सकता है।


वास्तव में, मैं एक टिप्पणी पर जल्दबाजी कर रहा था। क्या यह बदलने पर वास्तविक फ़ाइल सामग्री के साथ हार्डलिंक को बदलने का समर्थन करता है? अगर ऐसा है तो मैं rsnapshot + के साथ कुछ जादू करने में सक्षम हो सकता हूं, जो इस से निपटने के लिए नए कोड / लॉग / आदि का एक टन लिखने के बिना मेरी आवश्यकताओं को पूरा करेगा।
फराउन

3

Syrep वही करता है जो आपको चाहिए। यह एक फ़ाइल ट्री पर मैसेज डाइजेस्ट को अप टू डेट रखता है; आस-पास की डिग्गियों को रखना rsync की तुलना में अधिक कुशल बनाता है। इसे स्नीकरनेट के लिए डिज़ाइन किया गया था ताकि आप एक रैपर जोड़ना चाहें जो एक ही बार में अपडेट / मेकचप / मर्ज करता है।


2

मुझे यकीन नहीं है कि अगर कोई मौजूदा उपकरण है जो आपके लिए ऐसा करता है, लेकिन आप एक सरल स्क्रिप्ट लिख सकते हैं जो बस findआधार निर्देशिका पर चलता है , जहां mtimeपिछले बैकअप की तुलना में नया है। यह आपको उन सभी फाइलों की एक सूची देगा, जिन्हें संशोधित किया गया है । यदि कोई फ़ाइल बस चली गई थी, तो वह सूची में नहीं दिखाई देगी। दुर्भाग्य से, इस सूची में उन निर्देशिकाओं को शामिल किया जाएगा जो फाइलें स्थानांतरित हो गई हैं, क्योंकि फ़ाइल के जुड़ने / हटाए जाने पर निर्देशिका अपडेट हो जाती है।

फ़ाइलों की उस सूची के साथ, आप केवल उन फ़ाइलों को सिंक करने के लिए rsync का उपयोग कर सकते हैं। rsync में फ़ाइल सूची में पढ़ने का विकल्प होता है। इस उदाहरण को दिखाने वाला एक परीक्षण यहां दिया गया है:

$ cd tmp
$ echo test > test
$ ls -la
total 16
drwxr-xr-x 2 root root 4096 Aug 18 11:34 .
drwxr-x--- 5 root root 4096 Aug 18 11:34 ..
-rw-r--r-- 1 root root    5 Aug 18 11:34 test
$ mkdir tmp2
$ find . -mmin 1
$ date
Wed Aug 18 11:35:10 EDT 2010
$ find . -mmin 1
$ find . -mmin 2
.
./test
./tmp2
$ mv test tmp2
$ find . -mmin 1
.
./tmp2

कृपया ध्यान दें कि मैंने प्रत्येक findकमांड को चलाने के बीच लगभग 1 मिनट इंतजार किया । इससे यह पता चलता है कि शुरू में फ़ाइल बनाते समय, यह सूचीबद्ध हो जाता है find। यदि मैं फ़ाइल को किसी अन्य निर्देशिका में ले जाता हूं और findकमांड को फिर से चलाता हूं, तो यह केवल उस निर्देशिका को प्रदर्शित करता है जिसे मैंने फ़ाइल में स्थानांतरित किया था, और फ़ाइल को ही नहीं। आप केवल इच्छित फ़ाइलों को सूचीबद्ध करने के लिए findऔर rsyncआदेशों के संयोजन का उपयोग कर सकते हैं, यह संभवतः आपके लक्ष्य को प्राप्त कर सकता है।

आशा है कि ये आपकी मदद करेगा।


2

आपके वर्कफ़्लो को देखते हुए, मुझे आश्चर्य है कि फ़ाइल स्तर पर काम करना (जैसे कि दूसरों ने अब तक क्या प्रस्तावित किया है) सबसे अच्छा समाधान है। आप काम कर सकते हैं ...

फाइल सिस्टम स्तर पर

यह विचार है कि फाइलसिस्टम बैकअप के बीच संचालन का ट्रैक रखता है। फाइलसिस्टम का बैकअप बनाने के बजाय, फाइलसिस्टम जर्नल का बैकअप लें (और वैकल्पिक रूप से बैकअप मशीन पर बदलावों को फिर से शुरू करें, यदि आप बैकअप के लिए उपयोग करना चाहते हैं)। एक फाइलसिस्टम जर्नल स्वाभाविक रूप से कुछ बाइट्स में चाल और विलोपन को व्यक्त करता है।

फ़्यूज़ एक ऐसी फाइल सिस्टम को डिज़ाइन करना आसान बनाता है जो विशिष्ट आवश्यकताओं के साथ "वास्तविक फाइल सिस्टम" के ऊपर बैठता है। मैंने कभी इसका उपयोग नहीं किया है, लेकिन लॉग्सएफएस आशाजनक लगता है।

इस समाधान के साथ, जर्नल संपीड़न का कुछ रूप होना सार्थक होगा। उदाहरण के लिए, यदि किसी फ़ाइल को 10 बार अधिलेखित किया गया है, तो केवल जर्नल में अपना अंतिम अपडेट रखें। एक और सार्थक अनुकूलन कॉपी ऑपरेशंस को पहचानना होगा, और इससे भी बेहतर, संपादन (यानी, एक ऐसी फाइल बनाना जो कि ज्यादातर है लेकिन किसी अन्य फाइल के समान नहीं है)। मुझे नहीं पता कि किसी ने इसे लागू किया है या नहीं। आपके वर्कफ़्लो के लिए, मुझे नहीं लगता कि यह बहुत ज्यादा मायने रखेगा।

मात्रा स्तर पर

वॉल्यूम प्रबंधक को बैकअप के बीच संचालन का ट्रैक रखने का विचार है। फाइलसिस्टम का बैकअप बनाने के बजाय, वॉल्यूम प्रबंधक के साथ एक स्नैपशॉट लें और पिछले स्नैपशॉट से भिन्न के रूप में व्यक्त स्नैपशॉट का बैकअप लें

यह अच्छी तरह से काम करना चाहिए अगर आप सब करते हैं तो फाइलें बनाते हैं, उनका नाम बदलें और उन्हें हटा दें। प्रतियों और संपादन जैसी चीजों का पता लगाना, या इसके विलोपन के बाद किसी फ़ाइल के निर्माण को अनुकूलित करना बहुत कठिन होगा।


मैं वास्तव में परिवर्तन का ट्रैक रखने के लिए inotify के माध्यम से एक फ़ाइल "सिस्टम" लकड़हारा पर थोड़ा काम कर रहा हूं, लेकिन अगर बदलाव उस गति से अधिक तेजी से आता है जो डेमॉन इसे रिकॉर्ड कर सकता है, तो यह जानकारी खो देगा, इसलिए निर्माण करने की आवश्यकता है प्रारंभिक स्थिति प्राप्त करने और जानकारी खोने की स्थिति में बैकअप के लिए बैकअप / स्कैन। ऐसा लगता है कि फाइलसिस्टम और सिस्टम के बाकी हिस्सों के बीच में कुछ होने का विचार भी एक अच्छा विचार हो सकता है, जैसा कि आपने कहा, कि बैकअप मशीन पर परिवर्तन फिर से हो सकते हैं।
फ़ारुन

लेकिन यह कि logFS एक दिलचस्प परियोजना की तरह दिखता है, केवल चिंता की बात है कि उन्होंने 2008/09 में dev को रोक दिया था। इसके साथ खेलना और यह देखना कि क्या यह चाल चलेगा।
फरानुन

0

इसके लिए यूनिसन अच्छा है, लेकिन फिर भी स्थानीय रूप से फ़ाइलों को कॉपी करने की आवश्यकता है और यह एक चाल / नाम का पता नहीं लगा सकता है यदि फ़ाइल सामग्री भी थोड़ी बदल गई है।

मैंने इनकोड संख्याओं (* निक्स केवल) का उपयोग करके नामांकित / स्थानांतरित फ़ाइलों और निर्देशिकाओं का पता लगाने के लिए एक साधारण पायथन लिपि बनाई और सिंक्रनाइज़ किए गए मशीन पर इन परिवर्तनों को फिर से दोहराया। आप इसे स्वयं के द्वारा या यूनिसन या rsync के लिए "नाम बदलने वाले प्रीप्रोसेसर" के रूप में उपयोग कर सकते हैं। यह यहाँ पाया जा सकता है

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