बिजली हानि पर ext4 / Linux ड्राइव पर डेटा भ्रष्टाचार को रोकें


9

मेरे पास कुछ एम्बेडेड बोर्ड हैं जो अमेरिकी मेगाट्रेड्स बायोस को ओएस के रूप में एम्बेडेड लिनक्स के साथ चला रहे हैं। मेरे पास समस्या यह है कि बिजली की हानि पर औद्योगिक फ्लैश विचारधारा भ्रष्ट हो जाएगी। मैंने उन्हें ext4 के रूप में स्वरूपित किया है। जब भी ऐसा होता है, मैं आमतौर पर फ्लैश को fsck के साथ ठीक कर सकता हूं, लेकिन यह हमारी तैनाती में संभव नहीं होगा। मैंने सुना है कि राइटिंग-कैशिंग को अक्षम करने से मदद मिलनी चाहिए, लेकिन मैं यह पता नहीं लगा सकता कि यह कैसे करना है। इसके अलावा, क्या कोई और चीज है जो मुझे करनी चाहिए?

और जानकारी

ड्राइव एक 4gb ide फ़्लैश मॉड्यूल है। मेरा एक विभाजन है जो ext4 है। ओएस उस विभाजन पर स्थापित है और ग्रब मेरा बूटलोडर है।

fdisk -l शो / dev / sda मेरे फ्लैश मॉड्यूल के साथ / dev / sda1 मेरे प्राथमिक विभाजन के रूप में।

पावर लॉस के बाद मैं आमतौर पर इसे पूरी तरह से बूट इनिट स्क्रिप्ट के माध्यम से नहीं बना सकता।

जब मैं दूसरे पीसी पर ड्राइव माउंट करता हूं तो मैं fsck / dev / sda1 चलाता हूं। यह हमेशा जैसे संदेश दिखाता है

"zero datetime on node 1553 ... fix (y)?"

मैं उन्हें ठीक करता हूं और अगले पावर लॉस तक यह ठीक रहता है।

जब मैं कल ऑफिस पहुंचूंगा, तो मैं fdisk -l का वास्तविक आउटपुट पोस्ट करूंगा

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

यहां डम्प 2 एफएफ़ से आउटपुट है

#sudo dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   VideoServer
Last mounted on:          /
Filesystem UUID:          9cba62b0-8038-4913-be30-8eb211b23d78
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              245760
Block count:              977949
Reserved block count:     48896
Free blocks:              158584
Free inodes:              102920
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      239
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Fri Feb  4 15:12:00 2011
Last mount time:          Sun Oct  2 23:48:37 2011
Last write time:          Mon Oct  3 16:34:01 2011
Mount count:              2
Maximum mount count:      26
Last checked:             Tue Oct  4 07:44:50 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Apr  1 07:44:50 2012
Lifetime writes:          21 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      249d2b79-1e20-49a3-b324-6cb631294a63
Journal backup:           inode blocks

जवाबों:


6

लिखने के कैश का आमतौर पर BIOS से कोई लेना-देना नहीं होता है, ज्यादातर वहां डिस्क कैश सेटिंग्स को स्विच करने का कोई विकल्प नहीं होता है। लिनक्स के साथ, का उपयोग hdparm -W 0करना चाहिए।

सेटिंग लगातार बनी रहती है, इसलिए यदि आपके पास अपने उत्पादन सिस्टम में खेलने के लिए hdparm नहीं है, तो आपको डिस्क लेखन कैश को एक अलग सिस्टम पर अक्षम करने और डिस्क को फिर से इंस्टॉल करने में सक्षम होना चाहिए।

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

अपडेट: आपकी समस्या की जड़ यह प्रतीत होती है कि आप जर्नलिंग डिसेबल के साथ एक ext4 फाइल सिस्टम चला रहे हैं - सूची has_journalसे गायब है Filesystem features। बस सभी सेवाओं को बंद कर दें, जांचें कि क्या कुछ भी अभी भी खुली हुई फ़ाइलों का उपयोग कर रहा है lsof +f -- /, अपने रूट विभाजन को केवल-पढ़ने के लिए रीमाउंट करें mount -o remount,ro /, जर्नल को सक्षम करें tune2fs -O has_journal /dev/sda1और "ऑर्डर" जर्नल मोड को डिफ़ॉल्ट माउंट विकल्प के रूप में सेट करें tune2fs -o journal_data_ordered /dev/sda1- का उपयोग करके आपको फिर से करना होगा- fsck (अधिमानतः बचाव प्रणाली से) चलाएं और इस ऑपरेशन के बाद रूट / रिबूट को हटा दें।

जगह में इन सेटिंग्स के साथ, मेटाडेटा को अचानक बिजली की विफलता की स्थिति में भी पत्रिका से पुनर्प्राप्त करने की गारंटी दी जाती है। वास्तविक डेटा भी लगातार डिस्क पर लिखा जाता है, हालांकि आप बूटअप पर पावर आउटेज खो जाने से पहले कई सेकंड का डेटा देख सकते हैं। यदि यह स्वीकार्य नहीं है, तो आप tune2fs -o journal_data /dev/sda1अपने फाइल सिस्टम के साथ माउंट विकल्प का उपयोग करने पर विचार कर सकते हैं - इसमें जर्नल में डिस्क पर लिखे गए सभी डेटा शामिल होंगे - यह स्पष्ट रूप से आपको बेहतर डेटा स्थिरता देगा लेकिन एक प्रदर्शन दंड और उच्च पहनने के स्तर की कीमत पर अपने एसएसडी पर।


तो क्या कैश मेरी समस्या है या कुछ और?
जोनाथन हेंसन

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

ठीक है धन्यवाद। मैं एक असहाय सॉफ्टवेयर इंजीनियर हूँ जो आप जानते हैं :)। मुझे कुछ विवरण मिलेगा। मैं मिनट के भीतर कुछ विवरण जोड़ रहा हूं।
जोनाथन हेंसन

मुझे नहीं पता कि क्या विस्तार हैं और मुझे यकीन नहीं है कि जर्नल मोड क्या है।
जोनाथन हेंसन

ओह समझा। बस dumpe2fs /dev/sda1(या इस सिस्टम के लिए आपका डिवाइस / विभाजन नाम जो भी हो) के आउटपुट की पहली पंक्तियाँ पोस्ट करें - उनमें सभी प्रासंगिक जानकारी होनी चाहिए। और / etc / fstab से रूट फाइल सिस्टम के लिए आरोह विकल्प को भी मदद करनी चाहिए।
वबबिट

5

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

अगर आपको कुछ शुरुआती बिंदुओं की आवश्यकता है, तो मैं देखूंगा कि लोग डिस्क रहित लिनक्स सिस्टम कैसे सेटअप करते हैं:

http://frank.harvard.edu/~coldwell/diskless/

और वहाँ से शुरू करो। सामान्य विचार यह है कि आपके सिस्टम बायनेरिज़ और डेटा को केवल पढ़ने के लिए माउंट किया जा सकता है ताकि आपका फ़ाइल सिस्टम दूषित न हो। हालाँकि आपको कुछ क्षेत्रों में लिखने में सक्षम होने की आवश्यकता है, इसलिए आपको आमतौर पर मेमोरी फाइलसिस्टम / tmp, / var / tmp को याद करने के लिए कुछ चाहिए। यहां तक ​​कि अगर कुछ चीजों को लिखने योग्य होना चाहिए, तो आप विभाजन को आर + डब्ल्यू के रूप में माउंट करने के लिए एक स्क्रिप्ट बनाते हैं और फिर परिवर्तन करते हैं, फिर केवल पढ़ने के लिए वापस जाएं।

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


कॉन्फ़िगरेशन फ़ाइलें हैं जिन्हें एप्लिकेशन और साथ ही / etc / नेटवर्क और होस्टनाम फ़ाइल द्वारा संपादित करने की आवश्यकता है। क्या आप मुझे एक सिफारिश दे सकते हैं जैसे कि कुछ, आपको इस तरह के और एक प्रकार के साथ एक विभाजन की आवश्यकता है और दूसरे आपके प्रकार की कॉन्फ़िगर फ़ाइलों के लिए और इसी तरह? मुझे वास्तव में इन चीजों के बारे में कोई जानकारी नहीं है। मैं सॉफ्टवेयर लिखता हूँ और जादुई रूप से ठीक-ठीक जानने की उम्मीद करता हूं (ऐसा नहीं है कि मैं * nix सॉफ्टवेयर लिखने के लिए पर्याप्त नहीं जानता, लेकिन मैं निश्चित रूप से एक समर्पित सिस्टम आदमी जितना नहीं जानता) हार्डवेयर को मेरे नियोक्ता द्वारा कैसे काम करना चाहिए।
जोनाथन हेंसन

ज़रूर, मैंने कुछ और जानकारी शामिल करने के लिए उत्तर को अपडेट किया। यह एक प्रश्न में शामिल करने के लिए एक बहुत ही जटिल विषय है, क्योंकि यह बहुत सारे लिनक्स इंटर्नल से संबंधित है। आप किसी ऐसे व्यक्ति को आज़माना और अनुबंधित करना चाह सकते हैं जिसने डिस्कलेस / pxe / एम्बेडेड सिस्टम किया है, जो आपकी एप्लिकेशन आवश्यकताओं और आर्किटेक्ट को समझने के लिए एक समाधान है जो विश्वसनीय होगा।
बहुपद

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

ठीक है, मैंने अपना जवाब अपडेट किया। मैं शायद आपकी सलाह ले लूंगा और अपने स्नातक कार्यक्रम में से एक पुराने प्रोफेसर को ले जाऊंगा। इस बीच, क्या एक त्वरित और गंदा है जो कम से कम मुझे एक बेहतर स्थिति में ले जाएगा जो एक फ्राइंग पैन में मेरी गांड को शामिल नहीं करता है?
जोनाथन हेंसन

नियमित रूप से कैशिंग लिखना या 'सिंक' को चालू करना संभवतः अल्पावधि में मदद करेगा।
बहुपद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.