क्या बिजली गुल होने से एसएसडी को भ्रष्टाचार से बचाने का कोई तरीका है?


15

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

मैंने मान लिया था कि समस्या सिर्फ डेटाबेस के ख़राब होने, या हाल के बदलावों की फाइलों के साथ गड़बड़ हो जाने की होगी, लेकिन अन्य विषम रिपोर्टें भी हैं।

  • गलत अनुमतियों के साथ फ़ाइलें
  • फाइलें जो निर्देशिका बन गई हैं (उदाहरण के लिए, index.phpअब एक निर्देशिका है)
  • निर्देशिका जो फ़ाइलें बन गई हैं
  • तले हुए डेटा के साथ फ़ाइलें

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

क्या यह "सामान्य" एसएसडी भ्रष्टाचार के लिए है? मूल रूप से हमें लगा कि यह कुछ सस्ते एसएसडी पर हो रहा है, लेकिन हमारे पास नाम-ब्रांड (उपभोक्ता श्रेणी) पर ऐसा हो रहा है।

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

प्रश्न: सिस्टम-स्तर पर समस्या को कम करने के लिए हम कुछ भी कर सकते हैं?

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

यह एक ड्राइव का एक उदाहरण है sudo hdparm -i /dev/sda1:

Model=KINGSTON RBU-SMS151S364GG, FwRev=S9FM02.5, SerialNo=<deleted>
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=125045424
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7

5
आप बेहतर SSDs खरीद सकते हैं। विशिष्ट उद्यम SSDs ने बिजली की विफलता की स्थिति में इन-फ़्लाइट डेटा को समाप्त करने के लिए डिवाइस को पर्याप्त शक्ति प्रदान करने के लिए कैपेसिटर में निर्मित किया है। पूरी तरह से तले हुए फाइल सिस्टम से उबरने के लिए आपके द्वारा बचाए गए पैसे आसानी से मामूली अतिरिक्त लागत का औचित्य साबित करेंगे।
माइकल हैम्पटन

1
खैर, किसी ने नहीं कहा कि आपको उन सभी को बदलना होगा। लेकिन आप प्रतिस्थापन और / या नए प्रतिष्ठानों के लिए बेहतर एसएसडी का उपयोग कर सकते हैं।
माइकल हैम्पटन

2
"यह उन सभी को बदलने के लिए सरल नहीं है" -यह पूरी तरह से है। उस व्यक्ति की खरीद के निर्णय के बारे में बताएं जिसे वह घोर उपेक्षा और अक्षमता के कारण लागत के लिए उत्तरदायी मानता है, किसी ने सीमावर्ती सक्षम नहीं होने के कारण कुछ महत्वपूर्ण गलती की।
टॉमटॉम

7
WriteCache=enabled। यह एक बड़ी समस्या है। लिखो कैश कभी भी हार्ड ड्राइव पर सक्षम नहीं होना चाहिए जिसमें एक डेटाबेस हो। कुछ विक्रेताओं, उदाहरण के लिए, एचपी वास्तव में हार्ड ड्राइव को इस कारण से कैशिंग लिखने में सक्षम करने से रोकते हैं।
ग्रेग आस्क्यू

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

जवाबों:


14

जब अचानक बिजली खो जाती है, MLC / TLC / QLC SSD में दो विफलता मोड होते हैं:

  • वे इन-फ्लाइट और इन-डीआरएएम-केवल लिखते हैं;
  • वे प्रोग्राम किए जा रहे NAND सेल के निचले पृष्ठ में संग्रहीत किसी भी डेटा-एट-रेस्ट को भ्रष्ट कर सकते हैं।

पहली विफलता की स्थिति स्पष्ट है: बिजली संरक्षण के बिना, कोई भी डेटा जो स्थिर भंडारण पर नहीं है (यानी: स्वयं नंद) लेकिन अस्थिर कैश पर केवल (DRAM) खो जाएगा। शास्त्रीय यांत्रिक डिस्क के साथ भी ऐसा ही होता है (और यह अकेले फाइलसिस्टम पर कहर बरपा सकता है जो ठीक से fsyncs जारी नहीं करता है)।

दूसरी असफलता की स्थिति MLC + SSDs का मामला है: जब नए डेटा को संग्रहीत करने के लिए उच्च पृष्ठ बिट को पुन: क्रमित किया जाता है, तो एक अप्रत्याशित बिजली हानि कम बिट (यानी: पिछले प्रतिबद्ध डेटा) को भी नष्ट / बदल सकती है ।

एकमात्र सच, और सबसे स्पष्ट, समाधान एक शक्ति-हानि-संरक्षित DRAM कैश (आमतौर पर बैटरी / सुपरकैप का उपयोग करके) को एकीकृत करना है, जैसा कि हमेशा के लिए उच्च अंत RAID नियंत्रकों द्वारा किया गया है; हालांकि, इससे ड्राइव कॉस्ट / मूल्य में वृद्धि होती है। उपभोक्ता ड्राइव में आमतौर पर कोई शक्ति-हानि-संरक्षित कैश नहीं होता है; बल्कि, वे अधिक किफायती समाधानों की एक सरणी का उपयोग करते हैं:

  • आंशिक रूप से संरक्षित लेखन कैश (यानी: Crucial M500 / M550 / M600 +);
  • NAND पत्रिका बदलता है (यानी: सैमसंग ड्राइव, SMART PoR विशेषता देखें);
  • विशेष एसएलसी / छद्म-एसएलसी नंद क्षेत्र जोखिम पर पिछले डेटा के बिना नए लेखन को अवशोषित करने के लिए (यानी: सैंडिस्क, सैमसंग, आदि)।

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

मैं इन एजिंग ड्राइव को बदलने के लिए, आपके यूपीएस और मिड-टर्म में, दृढ़ता से समीक्षा करने का सुझाव देता हूं।

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

संपादित करें: यदि संभव हो तो, एक चेकसमिंग फाइल सिस्टम के लिए ZFS या BTRFS के रूप में माइग्रेट करने पर विचार करें । बहुत कम से कम XFS पर विचार करें, जिसमें जर्नल चेकसम है और, हाल ही में, मेटाडेटा चेकसम भी। यदि आप EXT4 का उपयोग करने के लिए मजबूर हैं, तो स्टार्टअप पर ऑटो-एफएससी को सक्षम करने पर विचार करें (fsck.ext4 मरम्मत के समय बहुत अच्छा है)।


बहुत बढ़िया जवाब। कृपया मेरे संबंधित प्रश्न serverfault.com/questions/924054/… देखें - यदि आप इस उत्तर को कॉपी / अनुकूलित करना चाहते हैं, तो मुझे इसे अपवोट / चयन करने में खुशी होगी। ऐसा लगता है कि राइट-कैश को अक्षम करने से केवल पहले मामले में मदद मिलेगी। क्या दूसरी विफलता मोड पर अधिक विवरण है? क्या यह पुनर्संतुलन / कचरा संग्रह या सिर्फ निकटता से जुड़ा है?
येहोसफ

1
@Yehosef "पावर लॉस" सेक्शन में यहाँ एक नज़र डालें: anandtech.com/show/8528/…
shodanshok

1
किसी भी सॉफ्टवेयर समाधान के साथ समस्या यह है कि कई एसएसडी एकमुश्त ऑपरेटिंग सिस्टम पर झूठ बोलते हैं कि क्या डेटा सुरक्षित रूप से संग्रहीत है या नहीं, जिसमें fsync / FUA कमांड के जवाब में शामिल हैं। एंटरप्राइज़ ड्राइव के लिए, जिसके पास बिजली कटौती होने पर अपने कैश के फ्लश को पूरा करने के लिए पर्याप्त ऊर्जा भंडारण होता है, यह कोई समस्या नहीं है।
BeowulfNode42

@ BeowulfNode42 ATA बाधाओं और FUAs को सम्मानित किया जाना आवश्यक है। हालांकि IDE / PATA दिनों में कुछ ड्राइव फेक फ्लश होते हैं, आजकल ऐसी कोई भी "झूठे" ड्राइव SATA / SAS कंप्लेंट नहीं है, और इसे तुरंत हटा दिया जाना चाहिए।
शोडणशोक

और फिर भी उन गैर-अनुपालन ड्राइवों को वैसे भी बेचा जाता है, खासकर उपभोक्ता बाजार खंड में।
बियोवुल्फोडे 42

11

हाँ। सुपर सस्ते एसएसडी न लें - कम अंत उपभोक्ता बाजार के बाहर कुछ भी कैपेसिटर्स और बिजली के नुकसान के खिलाफ पूर्ण सुरक्षा है। Amd वास्तव में इतना अधिक खर्च नहीं करता है।


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

सवाल करने के लिए ड्राइव जानकारी जोड़ा गया।
येहॉज़

5
वे सुपर सस्ते हैं। वे मूल्य उन्मुख अंत उपयोगकर्ता ड्राइव हैं। लघु उद्यम ड्राइव के लिए देखो। चश्मा पढ़ें। आम तौर पर पावर विफलता सुरक्षा कुछ ऐसा है जो कल्पना में है।
टॉम टॉम

1
@TomTom में जोड़ने के लिए - कभी-कभी इसे वास्तव में पावर विफलता सुरक्षा नहीं कहा जाता है - और कभी-कभी पावर विफलता सुरक्षा वास्तव में बिजली की विफलता सुरक्षा नहीं होती है! आपको प्रत्येक निर्माता के लिए कुछ पढ़ना होगा और यह पता लगाना होगा कि वे अपने विशेष ब्रांड के SSDs के लिए क्या कहते हैं। (देखो, प्रत्येक एमआरई के लिए, श्वेत पत्रों के लिए उन्होंने लिखा है कि वास्तव में उनके अपने उद्यम एसएसडी कितने श्रेष्ठ हैं।) और, मैंने पाया है कि कम से कम एकल खरीद के लिए, यह काफी अधिक खर्च करता है । लेकिन मैं थोक खरीद नहीं करता हूं और यह 100 या अधिक की मात्रा के लिए अलग हो सकता है, मुझे लगता है।
दाविदबक

3
अब तक मैंने जो कुछ पढ़ा है, उसमें से इन सुविधाओं के नाम इस प्रकार हैं: जैसे कि DC400 श्रृंखला में किंग्स्टन = "Pfail"; सैमसंग = "पावर लॉस प्रोटेक्शन"; इंटेल = "एन्हांस्ड पावर लॉस डेटा प्रोटेक्शन"; सैंडिस्क = "पावर फेल प्रोटेक्शन के साथ डेटा लॉस प्रोटेक्शन"। मुझे नहीं पता कि अन्य निर्माता इसे क्या कहते हैं, लेकिन गहराई में कल्पना शीट को पढ़ना आवश्यक है। ध्यान दें कि यह फर्मवेयर के साथ भी प्राप्त किया जा सकता है यदि निर्माता इसे प्रदान करता है। यदि आपके पास वास्तव में> 6000 हैं तो मैं किंग्स्टन से संपर्क करूंगा और स्थिति की व्याख्या करूंगा और प्रति ड्राइव फर्मवेयर के लिए भुगतान करने की पेशकश करूंगा।
बेवुल्फ़नोडे42

7

रिकवरी टाइम और रिकवरी पॉइंट उद्देश्यों को परिभाषित करने के लिए पहली चीज है। आपको कब तक इन टर्मिनलों में से एक को पुनर्प्राप्त करना है, और समय में कौन सा डेटा बिंदु स्वीकार्य है? शायद एक दो घंटे के भीतर आपको पिछले सप्ताह के बैकअप को पुनर्प्राप्त करने में सक्षम होना चाहिए।

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

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

और, डिस्क को लिखने का स्थायित्व। PostgreSQL की विश्वसनीयता अध्याय पढ़ें । diskchecker.plक्रैश टेस्ट करने के लिए वहां से जुड़ी स्क्रिप्ट का उपयोग करें और यह निर्धारित करें कि यदि गैर-वाष्पशील भंडारण के लिए मिला है तो एसएसडी झूठ बोल रहे हैं। यदि नुकसान होता है, तो बिजली नुकसान से सुरक्षा के लिए SSDs के साथ बदलने पर विचार करें।

संपादित करें: आपने विवरण जोड़ा कि कैश लिखना सक्षम था। आप इसे अक्षम करने का प्रयास कर सकते हैं: hdparm -W0 /dev/sdaया हार्डवेयर सरणी के लिए उपयुक्त कमांड। संदर्भ: आरएचईएल भंडारण प्रशासन गाइड

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

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


यह डिस्क राइट कैशिंग संभावित उत्तर है। किसी अज्ञात कारण से, ऐसा लगता है कि Postgres डिस्क लेखन कैशिंग को अक्षम नहीं करता है, जो एक भयानक डिफ़ॉल्ट सेटिंग है।
ग्रेग आस्क्यू

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

1
"ऐसा लगता है कि Postgres डिस्क लेखन कैशिंग को अक्षम नहीं करता है, जो एक भयानक डिफ़ॉल्ट सेटिंग है।" @GregAskew कृपया सम्‍मिलित SSD पर DRAM कैश को निष्क्रिय कैसे करें। इसे निष्क्रिय नहीं किया जा सकता है।
TomTom

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

3
@Yeosef नहीं, विश्वसनीय भी नहीं है। पोस्टग्रैज के पास पुनर्प्राप्त करने के लिए जादू की शक्ति है यदि उसने ड्राइव पर डेटा भेजा है, तो ड्राइव कहती है "अच्छा है, आपका डेटा मिल गया", और फिर ड्राइव को अपने आंतरिक अस्थायी अस्थिरता से उस डेटा को लिखने के लिए कभी नहीं मिला। वास्तविक अहिंसक भंडारण के लिए कैश। केवल एंटरप्राइज़-क्वालिटी स्टोरेज का उपयोग करना महत्वपूर्ण है, जहां ड्राइव या रेड यूनिट में बैटरी या कैपेसिटर द्वारा समर्थित आंतरिक कैश होता है। पोस्टग्रेज़ में आपको ड्राइव पर भेजे गए डेटा को खोने से बचाने के लिए सुविधाएँ (वाल फ़ाइल आदि) हैं , लेकिन पोस्टग्रेज़ ड्राइव के अंदर खोए हुए डेटा को पुनर्प्राप्त नहीं कर सकते हैं ।
बेसिल बॉर्कल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.