बैकअप के दौरान लिमिट i / o कैसे करते हैं?


14

मेरे पास एक क्रोन है जो मूल रूप से रात में एक सरल "टार ज़कफ़" करता है।

सर्वर में है:

  • 8 करोड़ - Intel (R) Xeon (R) CPU E5606 @ 2.13GHz
  • 25 जीबी रैम
  • Ubuntu 12.04.2 LTS
  • हार्डवेयर RAID 1 (LSI Logic / Symbios Logic MegaRAID SAS SMC2108) दो 2.728TB हार्डड्राइव के साथ

जैसा कि आप मॉनिटरिंग स्क्रीनहोस्ट पर देख सकते हैं:

http://clip2net.com/s/57YRKP

टार के लगभग सभी समय के दौरान, डिस्क I / O> 90% तक चला जाता है और बहुत धीमा करने के लिए अन्य सभी ऐप (mysql, अपाचे) बनाते हैं।

2 प्रश्न:

  • क्या बैकअप के दौरान इतनी अधिक डिस्क I / O होना सामान्य है?
  • क्या डिस्क I / O को सीमित करने का कोई तरीका है ताकि अन्य ऐप सही ढंग से काम कर सकें?

धन्यवाद!

जवाबों:


11

इसके बजाय सामान्य दृष्टिकोण के साथ ioniceएक अच्छा डिवाइस मैपर टारगेट (ioband) है जो एक (DM) ब्लॉक डिवाइस पर बैंडविड्थ पर सटीक नियंत्रण की अनुमति देता है। दुर्भाग्य से यह मानक कर्नेल का हिस्सा नहीं है।

इसके अलावा आप शायद टार द्वारा गति कर सकते हैं

  1. डिस्क कैश में फ़ाइल नाम पढ़ना: find /source/path -printf ""
  2. डिस्क कैश में इनोड्स पढ़ना: find /source/path -perm 777 -printf ""
  3. टार रीडिंग और डिस्क से बड़े ब्लॉक्स को लिखना और उदाहरण के लिए mbuffer या बफर (कम से कम 100 MiB RAM के साथ एक पाइप का उपयोग करके): tar ... | mbuffer -m 256M -P 100 -p 1 ...

फ़ाइल नाम / इनकोड को कैश में पढ़ते हुए डिस्क IO को कम क्यों करते हैं? मैं यह उम्मीद करूंगा कि कुल समय को थोड़ा कम करते हुए औसत IO को बढ़ाया जाए।
scai

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

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

बस यह सुनिश्चित करने के लिए कि मैं सही ढंग से समझा हूं। 1. और 2. के लिए, हमें बस खोज कमांड को कॉल करना होगा और लिनक्स स्वचालित रूप से इसे कैश करेगा?
इक्का

@acemtp यह सही है। findबिना (जैसे) -permफ़ाइल इनोड को एक्सेस नहीं करेगा, हालांकि। लेकिन यह दो findकॉल का उपयोग करने के लिए अनुकूलन की अनुमति देता है । यदि आप एक ही findकॉल दो बार (बीच में थोड़ा समय के साथ) करते हैं, तो दूसरा आमतौर पर सेकंड (या उससे कम) के भीतर समाप्त होने वाला है। मुफ्त मेमोरी की मात्रा और एक निश्चित बिंदु पर कैश की गई डेटा की मात्रा के आधार पर डेटा को कैश से बाहर निकाला जाता है। बहुत अधिक पढ़ना इस प्रकार ऑपरेशन को धीमा कर सकता है। यदि आप स्टड के माध्यम से फाइल प्रोग्राम के साथ बैकअप प्रोग्राम को फीड कर सकते हैं तो आप उदाहरण के लिए 100 फाइलों के ब्लॉक को पढ़कर इसे रोक सकते हैं।
हक लेजिंग

13

यह बैकअप के दौरान उच्च I / O देखने की उम्मीद है क्योंकि वे आम तौर पर बड़ी फ़ाइलों के साथ बड़े फ़ाइल पेड़ों पर बने होते हैं। आप ioniceकक्षाओं और स्तरों के साथ लिनक्स में I / O नौकरियों को प्राथमिकता देने के लिए उपयोग कर सकते हैं । IIRC, कक्षा 2, स्तर 7 सबसे निचला, गैर भूखा स्तर है जो इसे अन्य I / O भार और उपयोगकर्ताओं के लिए व्यावहारिक रूप से अदृश्य बना देगा। man ioniceउपयोग और विवरण के लिए देखें ।


1

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

http://backuppc.sourceforge.net/


0

जैसा कि दूसरों ने उत्तर दिया है, हाँ यह सामान्य है, और ioniceयह आपके सिस्टम को प्रभावित नहीं होने देने का एक अच्छा सामान्य तरीका है।

कई बार मैंने लोगों को tarचीजों को देखा है जब उन्हें जरूरत नहीं है। यदि आप जो भी डेटा कॉपी कर रहे हैं उसका कोई भी प्रतिशत पिछली कॉपी से नहीं बदला है तो मैं सुझाव देना चाहूंगाrsync

यह आईओ को केवल उन फाइलों को कॉपी करके कम करेगा जो पिछली कॉपी से बदल गए हैं। आप IO को आधे से अधिक कम नहीं कर पाएंगे क्योंकि सभी डेटा को अभी भी पढ़ने की आवश्यकता होगी लेकिन आप लिखे गए डेटा की मात्रा को काफी कम कर देंगे (जो कि आपके हार्डवेयर पर निर्भर करता है एक धीमा ऑपरेशन भी हो सकता है)।

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

मुझे उम्मीद है कि मदद करता है और अभी भी आपके सवाल का जवाब देता है।

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