Btrfs पर Rsync बैकअप बहुत धीमा है


5

मेरा वातावरण Ubuntu 15.04 कर्नेल 3.19.0-28-जेनेरिक और Btrfs v3.17 के साथ है।

मेरे पास दो समान बाहरी USB हार्ड डिस्क हैं जो मैं अपनी बैकअप स्क्रिप्ट के साथ उपयोग करता हूं। उनमें से एक के साथ स्वरूपित है btrfsऔर दूसरे के साथ ext4। स्रोत फाइलसिस्टम हमेशा होता है ext4rsyncआदेश इस तरह दिखता है:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

मुझे बस एहसास हुआ कि बैकअप पर प्रदर्शन करने btrfsमें बहुत लंबा समय लगता है: 4 मिनट की तुलना में एक घंटे से थोड़ा अधिक, एक ही कॉपी करने के लिए ext4

ddउबंटू के साथ भेजे गए "डिस्क उपयोगिता" के साथ, मैंने कुछ बेंचमार्क प्रदर्शन करने के लिए डिस्क की खराबी को नियंत्रित करने के लिए , लेकिन मुझे दोनों डिस्क पर समान प्रदर्शन मिला है। धीमा हिस्सा पिछले बैकअप के मुकाबले हार्डलिंकिंग लगता है। एक डीफ़्रैग और स्क्रब के बाद भी, निम्न कमांड में लगभग 53 मिनट लगते हैं btrfs, लेकिन केवल 1 मिनट में ext4:

cp -arl "$previousBackup" "$destDir"

इंटरनेट पर शोध करके, मुझे संकेत मिले कि btrfsहार्डलिंक से पीड़ित का प्रदर्शन , लेकिन मैं इस भारी अंतर की उम्मीद नहीं करूंगा । मुझे पता चला कि यह कमांड तेज है, लेकिन अभी भी इसे पूरा करने में 30 मिनट से अधिक समय लगता है:

cp -ar --reflink "$previousBackup" "$destDir"

क्या किसी के पास इस व्यवहार का अनुभव है और वह इसकी पुष्टि कर सकता है? क्या इसे ठीक करने का कोई सरल तरीका है (जैसे अलग-अलग माउंट विकल्प) या क्या मुझे यथासंभव अधिक हार्डलिंक हटाने की कोशिश करनी चाहिए और बस रिफाइनरी का उपयोग करना चाहिए?

संपादित करें

मुझे अभी पता चला है कि एक निर्देशिका को हटानेbtrfs से एक घंटे से अधिक की आवश्यकता होती है। एक ही ऑपरेशन "जुड़वां" ext4डिस्क पर तात्कालिक है । स्पष्ट रूप से यहाँ मेटाडेटा के साथ एक समस्या है।


कितनी फाइलें कॉपी की जा रही हैं? समस्या प्रति लेनदेन स्वाभाविक रूप से हो सकती है जैसे "कॉपी ऑन राइट" फाइल सिस्टम का उपयोग करने से btrfs
जेकगॉल्ड

@JakeGould फ़ाइलों की संख्या से जुड़ा हुआ बहुत बड़ी है लेकिन फ़ाइलों की संख्या हस्तांतरित से ext4करने के लिए btrfsआम तौर पर छोटे (200 या तो) है। यही मैं समझा नहीं सकता: कॉपी-ऑन-लेखन को लिंकिंग को लगभग तात्कालिक बनाना चाहिए (केवल मेटाडेटा संसाधित किया जाता है) लेकिन स्थानांतरण थोड़ा धीमा ... जबकि यहां विपरीत होता है।
मैटपेन

फाइलसिस्टम, मेटाडेटा सेगमेंट विशेष रूप से, कहीं भी पूर्ण है? जैसा कि मुझे याद है मेटाडाटा का प्रदर्शन सीमित स्थान के साथ बहुत बुरा हो जाता है। Btrfs की डिफ़ॉल्ट उत्तराधिकारियाँ भी मेटाडेटा के लिए पर्याप्त स्थान आवंटित करने में विफल हो सकती हैं।
तोबू

@ टोबू btrfs filesystem dfरिपोर्ट डेटा, एकल: कुल = 1.34TiB, प्रयुक्त = 1.34TiB सिस्टम, DUP: कुल = 8.00MiB, प्रयुक्त = 176.00KiB सिस्टम, एकल: कुल = 4.00MiB, प्रयुक्त = 0.00B मेटाडेटा, DUP: कुल = 38.47GiB , प्रयुक्त = 37.49GiB मेटाडेटा, एकल: कुल = 8.00MiB, उपयोग किया गया = 0.00B मुझे पूर्ण नहीं लगता ... हालाँकि, क्या मेटाडेटा के लिए आवंटित स्थान को ट्विक करने का कोई तरीका है?
मैटपेन

जवाबों:


1

आप कहते हैं कि आप अपने rsyncआदेश के साथ हार्डलिंक की नकल कर रहे हैं , लेकिन -Hझंडा कहां है ? मैं इसे आपकी आज्ञा में नहीं देखता:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

जिस तरह से मैं समझता हूं कि कैसे rsyncकाम करता है - हार्डलिंक्स के संबंध में - क्या यह है कि -Hध्वज के बिना वास्तविक डेटा को हार्डलिंक के बजाय कॉपी किया जाता है जैसा कि rsyncमैन पेज पर समझाया गया है :

-एच, -हार्ड-लिंक

यह rsync को ट्रांसफ़र में हार्ड-लिंक्ड फ़ाइल्स की तलाश करने और रिसीविंग साइड पर संबंधित फ़ाइल्स को एक साथ लिंक करने के लिए कहता है। इस विकल्प के बिना, स्थानांतरण में हार्ड-लिंक की गई फ़ाइलों को माना जाता है जैसे कि वे अलग-अलग फाइलें थीं।

मैं इस तरह की प्रक्रिया की कल्पना कर सकता हूं, जहां हार्डलिंक किए जाने के स्थान पर कई समान फ़ाइलों को कॉपी किया जाता है और धीमे हस्तांतरण के समय तक जोड़ दिया जाता है।

इसके अलावा, -z( --compress) ध्वज का उपयोग करने पर भी विचार करें :

-z, --compress

इस विकल्प के साथ, rsync फ़ाइल डेटा को संपीड़ित करता है क्योंकि इसे गंतव्य मशीन पर भेजा जाता है, जो प्रसारित होने वाले डेटा की मात्रा को कम करता है - ऐसा कुछ जो एक धीमे कनेक्शन पर उपयोगी होता है।

हां, यह उसी सिस्टम पर एक USB से USB ट्रांसफर है, इसलिए यह संभावना है कि स्पीड पहले से ही ऑप्टिमाइज़ की गई है, लेकिन यह देखने में कोई दुख नहीं है कि -zशायद आपको प्राकृतिक USB डेटा ट्रांसफर की अड़चनों को दूर करने में मदद मिलेगी।

एक अच्छा, सरल ट्यूटोरियल जो इन झंडों की व्याख्या करता है - साथ ही साथ अन्य - यहाँ पाया जा सकता है


2
आपके उत्तर के लिए धन्यवाद। --hard-linksकरने के लिए प्रयोग किया जाता है की रक्षा स्रोत निर्देशिका में हार्ड लिंक। मेरे द्वारा उपयोग की जाने वाली कमांड के --link-destकारण गंतव्य निर्देशिका को उसी USB डिस्क पर पिछले बैकअप के साथ हार्ड-लिंक किया जा सकता है । अनिवार्य रूप से, यह एक अंतर बैकअप है, जहां केवल बदली हुई फाइलें वास्तव में स्रोत से स्थानांतरित होती हैं, और कुछ भी बैकअप से बैकअप के लिए हार्डलिंक की एक लंबी श्रृंखला है।
मैटपेन

3
के रूप में --compressविकल्प, यह ज्यादातर नेटवर्क हस्तांतरण के लिए उपयोगी है। एक अंतर का परीक्षण कर सकता है, लेकिन यूएसबी के साथ इसका कोई फायदा नहीं होने की संभावना है, क्योंकि डेटा को संपीड़ित करने के लिए सीपीयू समय द्वारा त्वरित स्थानांतरण संभवतः संतुलित है। किसी भी तरह से, यह मेरे मामले को संबोधित नहीं करता है, क्योंकि विकल्प दोनों ext4(जो तेज है) और btrfs(जो धीमा है) के लिए समान हैं।
मैटपेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.