क्या कोई डिडुप्लीकेशन स्क्रिप्ट है जो btrfs CoW को डिडअप के रूप में उपयोग करते हैं?


9

लिनक्स पर डिडुप्लीकेशन टूल्स की तलाश में बहुत सारे हैं, उदाहरण के लिए इस विकी पेज को देखें

सबसे अधिक सभी स्क्रिप्ट या तो केवल पता लगाती हैं, डुप्लिकेट फ़ाइल नामों को प्रिंट करती हैं या डुप्लिकेट फ़ाइलों को एक ही कॉपी में हार्डलिंक करके हटाती हैं।

Btrfs के बढ़ने के साथ एक और विकल्प होगा: एक फ़ाइल (जैसे cp reflink=always) की एक CoW (कॉपी-ऑन-राइट) कॉपी बनाना । मुझे ऐसा कोई टूल नहीं मिला है जो ऐसा करता हो, क्या कोई ऐसा टूल है जो ऐसा करता हो?


अद्यतन: rmlint की विकसित शाखा, और मेरा मानना ​​है कि मास्टर भी, निम्नलिखित जोड़ा: 1) वृद्धिशील फ़ाइल हैशिंग। यह तब तक किसी फ़ाइल को फिर से नहीं करेगा, जब तक कि यह पिछले भाग से बदल न जाए [जो कि बहुत बड़ा है]। 2) वृद्धिशील कटौती । यह केवल उन फ़ाइलों को काटता है जो पहले से नहीं हैं, या बदल गए हैं। [यह भी गले लगा हुआ है।] अन्य सभी त्वरित-तुलना विधियों के विफल होने के बाद केवल हैशिंग फ़ाइलों के साथ संयुक्त, यह अपराजेय बनाता है। बेडअप छोड़ दिया गया है और जाहिरा तौर पर संकलन नहीं होगा। मैंने एक विस्तृत तुलना की: docs.google.com/spreadsheets/d/…
Jim

जवाबों:


17

मैंने इस उद्देश्य के लिए बेडअप लिखा । यह CoW-deduplication के साथ वृद्धिशील btree स्कैनिंग को जोड़ती है। लिनक्स 3.6 के साथ सबसे अच्छा उपयोग किया जाता है, जहां आप चला सकते हैं:

sudo bedup dedup

हाय @ गैब्रिएल, मेरे जवाब के नीचे एक टिप्पणी में कहा गया है कि "... बेडअप ... आकार की बाल्टियों में चीजें डालें और केवल आवश्यक होने पर चेकसम बनाने के लिए पूरी फाइल पढ़ें।" क्या यह सच है? यदि हां, तो मैं नीचे अपना जवाब अपडेट करना चाहता हूं। (और खुद बेडअप का उपयोग करें!) दुर्भाग्य से मैं इसे कहीं भी सत्यापित करने में असमर्थ रहा हूं। मैंने Google की कोशिश की है, आपके गिथब पृष्ठ और कोड पर एक खोज। धन्यवाद।
जिम

4

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

जो दर्द से धीमा है।

दूसरी ओर अन्य कार्यक्रम, जैसे कि rdfind और rmlint, अलग तरह से स्कैन करते हैं।

rdfind में btrfs reflink का उपयोग करने के लिए "प्रयोगात्मक" सुविधा है। (और हार्डलिंक, सिमिलिंक आदि के लिए "ठोस" विकल्प)

rmlint में btrfs क्लोन, रिफ्लिन, नियमित हार्डलिंक, सिमिलिंक, डिलीट और अपने स्वयं के कस्टम कमांड के लिए "ठोस" विकल्प हैं।

लेकिन इससे भी महत्वपूर्ण बात यह है कि rdfind और rmlint काफी तेज हैं। जैसा कि, परिमाण के आदेश। चेकसम के लिए सभी लक्ष्य फ़ाइलों को स्कैन करने के बजाय, यह ऐसा करता है, लगभग:

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

Rmlint के अन्य लाभों से मैं अवगत हूँ:

  • आप चेकसम निर्दिष्ट कर सकते हैं। md5 भी डरावना? Sha256 की कोशिश करो। या 512. या बिट-फॉर-बिट तुलना। या आपका अपना हैशिंग फंक्शन है।
  • यह आपको केवल रिफ़्लेकिन के बजाय Btrfs "क्लोन", और "रीलिंक" का विकल्प देता है। "cp --reflink = हमेशा" बस थोड़ा जोखिम भरा है, इसमें यह परमाणु नहीं है, यह पता नहीं है कि कर्नेल में उस फ़ाइल के लिए और क्या चल रहा है, और यह हमेशा मेटाडेटा को संरक्षित नहीं करता है। "क्लोन", ओटीओएच (जो एक शॉर्टहैंड शब्द है ... मैं आधिकारिक एपीआई-संबंधित नाम पर रिक्त कर रहा हूं), एक कर्नेल-स्तरीय कॉल है जो परमाणु है और मेटाडेटा को संरक्षित करता है। लगभग हमेशा एक ही चीज़ के परिणामस्वरूप, लेकिन एक बालक अधिक मजबूत और सुरक्षित है। (हालांकि अधिकांश प्रोग्राम डुप्लिकेट फ़ाइल को न हटाने के लिए पर्याप्त स्मार्ट हैं, अगर यह पहले दूसरे से एक अस्थायी रीफ़्लिंक को सफलतापूर्वक नहीं बना सकता है।)
  • इसमें कई उपयोग-मामलों के लिए एक टन विकल्प है (जो एक दोष भी है)।

मैंने डिफ्यूपरमेव के साथ rmlint की तुलना की - जो आँख बंद करके चेकसम के लिए हर लक्ष्य फ़ाइल को स्कैन करता है। Duperemove ले लिया कई दिनों पूरा करने के लिए अपने मात्रा पर (4 मुझे लगता है कि), पूर्ण झुकाव जा रहा है। fmlint ने डुप्लिकेट की पहचान करने में कुछ घंटों का समय लिया , फिर उन्हें Btrfs क्लोन के साथ तैयार करने में एक दिन से भी कम समय लगा।

(यह कहा, किसी को भी लिखने का प्रयास और गुणवत्ता, मजबूत सॉफ्टवेयर का समर्थन और मुक्त करने के लिए दूर दे, प्रमुख यश के हकदार हैं!)

Btw: आपको हर कीमत पर "हार्ड" सामान्य समाधान के रूप में नियमित हार्डलिंक का उपयोग करने से बचना चाहिए।

हालांकि हार्डलिंक कुछ लक्षित उपयोग के मामलों में अत्यंत उपयोगी हो सकता है (जैसे व्यक्तिगत फ़ाइलें या एक उपकरण के साथ जो विशिष्ट फ़ाइल प्रकारों को कुछ न्यूनतम आकार से अधिक के लिए स्कैन कर सकता है - या कई मुफ्त और व्यावसायिक बैकअप / स्नैपशॉट समाधानों के हिस्से के रूप में), यह विनाशकारी हो सकता है। एक बड़े सामान्य उपयोग फाइलसिस्टम पर "डिडुप्लीकेशन" के लिए। कारण यह है कि अधिकांश उपयोगकर्ताओं के पास अपने फाइल सिस्टम पर हजारों फाइलें हो सकती हैं , जो कि बाइनरी समान हैं, लेकिन कार्यात्मक रूप से पूरी तरह से अलग हैं।

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

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

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

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


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

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

इसके अलावा, पिछले 3 वर्षों से बेडअप को छोड़ दिया जाता है। यह एक शर्म की बात है, जैसा कि यह वास्तव में एक शानदार विचार है जो मुझे उपयोग करना पसंद है! मुझे आशा है कि आप इसे वापस लेंगे।
जिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.