इस मुद्दे पर कई मौजूदा विषय घूम रहे हैं, लेकिन जो मैं चाहता हूं वह थोड़ा अलग है। मेरे पास एक एम्बेडेड लिनक्स पर एक एसडी कार्ड है और यह बिजली की हानि से ग्रस्त है। मैं किसी बिंदु पर हार्डवेयर को संशोधित करने में सक्षम हो सकता हूं, ठीक से और इतने पर बंद हो सकता हूं, आदि। लेकिन अभी, मैं बस एक फ़ाइल सिस्टम ढूंढना चाहता हूं जो उपद्रव के बिना बिजली की हानि से बचता है। डेटा हानि स्वीकार्य है। मैं उस फ़ाइल से अधिक नहीं खोना चाहूंगा, जो मैं वर्तमान में लिख रहा हूं, लेकिन मैं अभी भी इसे 'माउंट करने में असमर्थ', '10 मिनट के लिए प्रतीक्षा करें' या 'नई बनाने में असमर्थ' का सामना करने की बजाय खो दूंगा। इस फ़ाइल के कारण फ़ाइल में कुछ त्रुटि है '। कार्यक्रम पर जाना चाहिए!
मैं यह सुनिश्चित करने में बहुत प्रयास कर रहा हूं। मैं औद्योगिक ग्रेड घटकों का उपयोग कर रहा हूं, मुझे हार्डवेयर वॉचडॉग, सॉफ़्टवेयर वॉचडॉग, आंतरिक, बाहरी, प्रोग्रामों को फिर से शुरू करने, डेमॉन लगातार मेमोरी, फ़ाइल डिस्क्रिप्टर और व्हाट्सएप की जांच कर रहा है, मुझे वॉचडॉग अपने वॉचडॉग्स को देखते हुए मिला, जो कि अन्य वॉचडॉग्स द्वारा देखे जाते हैं ... लेकिन मैं गारंटी नहीं दे सकता कि एसडी कार्ड माउंट और फ़ंक्शन करने में सक्षम है?
अभी मेरा सबसे अच्छा दांव, एसडीएफ पर जेएफएस का उपयोग करना है, मेरी स्थापना में fsck और fsck.jfs शामिल हैं। (600kb + जोड़ना मेरे राम और मेरे फ्लैश खा रहा है। जो बुरा है।) और हर स्टार्टअप पर fsck चलाएं (शायद बहुत बूट समय जोड़ रहा है। जो कुछ बुरा है।) हालांकि यह थोड़ा दुखद लगता है।
क्या किसी को बेहतर तरीके या बेहतर फाइल सिस्टम का पता है?
अद्यतन: e2fsprogs-libs (jfsutils के लिए निर्भरता) मेरे वितरण में संकलित करने के लिए कठिन प्रतीत होता है। मैं ZFS में देखूंगा (हालांकि यह मेरे वितरण के लिए मूल नहीं है। और ऐसा लगता है कि मुझे ऐसा करने की ज़रूरत नहीं है।)
UPDATE2: मेरे सिस्टम और मेरे परीक्षणों के बारे में कुछ और जानकारी: एसडी कार्ड स्टोरेज एक सेकेंडरी, वैकल्पिक स्टोरेज है। SD कार्ड 2Gb-8Gb औद्योगिक ग्रेड माइक्रोएसडी हैं। एसडी कार्ड माउंट-आरटी कमांड के साथ मेरी आरसी के माध्यम से लगाया जाता है। विकल्प "अनात्म" लेकिन "सिंक" नहीं। मेरा वितरण एक कस्टम एनालॉग डिवाइस फ्लेवर्ड uClinux है, जिसमें 3.10 कर्नेल और 1.21 बिजीबॉक्स है। मेरा प्राथमिक भंडारण jffs2 के साथ एक स्पाई फ्लैश है। मैंने उसके साथ कभी कोई समस्या नहीं की है। मुझे यह भी नहीं पता कि कोई fsck.jffs2 उपलब्ध है या नहीं। दूसरी ओर नंद फ्लैश ... लेकिन यह एक अलग कहानी है। एसडी कार्ड का उद्देश्य, माप डेटा को संग्रहीत करना है। 'मॉनीटर' कार्यक्रम एक फाइल के परिणामों को जोड़ देगा और इसमें रणनीतिक सिंक प्लेसमेंट होंगे। जब फ़ाइल किसी दिए गए आकार से ऊपर आती है तो एक नया बनाया जाएगा। जब दी गई फ़ाइलों की संख्या सबसे पुरानी हो गई है तो उसे हटा दिया जाएगा। यदि बिजली के नुकसान के कारण वर्तमान माप फ़ाइल खो गई है, तो यह कोई आपदा नहीं है। फाइलें आमतौर पर 50-100kb पर होती हैं और 1 परिणाम आमतौर पर 1kb होता है। यह अभी शुरुआती विकास का चरण है। कुछ भी तय नहीं है। यह पहली बार है जब मैं एम्बेडेड सिस्टम में गैर-फ्लैश फाइल सिस्टम के साथ काम कर रहा हूं। (मुझे अपने x86 सर्वर पर ext4 मिला।)
मैंने vfat के साथ शुरुआत की। डिफ़ॉल्ट फ़ाइल सिस्टम। (मुझे लगा कि कारखानों के पास इसे चुनने का एक कारण हो सकता है। और अगर चीजें काम करती हैं तो मुझे वास्तव में इतना ध्यान नहीं है।) मैंने अपने एम्बेडेड vfat उपकरणों में कभी भी कोई बिजली हानि के मुद्दे नहीं देखे हैं। मैं WinCE में FAT के साथ मुद्दों का अनुभव किया है। हालाँकि, जब मेरा 'मॉनीटर' कार्यक्रम 100-200 फाइलों तक पहुँच गया, तो इसने कोई और बनाने से इनकार कर दिया। ऐसा लगता है कि एफएटी की जड़ में एक विशेष फ़ाइल सीमा मुद्दा है और उप डायर में थोड़ा बड़ा है। मुझे 1 dir में 500-1000 फाइलें बनाने में सक्षम होना चाहिए। तो vfat नहीं करेंगे।
फिर मैंने ext2 पर स्विच किया। मैं स्टार्टअप पर एक fsck सम्मिलित नहीं किया था, हालांकि। (मुझे नहीं पता था कि मुझे ऐसा करना होगा।) एक दिन के भीतर मेरा 'मॉनिटर' प्रोग्राम 'कुछ इनकोड कुछ' त्रुटि के कारण अधिक फाइल बनाने में असमर्थ था। आपदा!
मेरा वर्तमान समाधान स्टार्टअप पर "e2fsck -y" के साथ ext2 है। अब तक यह आशाजनक है। लेकिन e2fsck और 'fsck at स्टार्टअप' की पूरी अवधारणा मुझ पर भारी पड़ रही है। स्वयं द्वारा e2fsck मेरे प्राथमिक फ्लैश और रैम के 350kb से अधिक खर्च कर रहा है। (जब यह नहीं चल रहा है।) जिसका अर्थ है कि यह मेरा सबसे बड़ा कार्यक्रम है। यह बिजीबॉक्स से बड़ा है। यह लगभग मेरी गिरी को टक्कर दे रहा है।
मैं ext3 पर विचार कर रहा हूं। इसमें मेटा डेटा को जर्नल्स किया गया है, जिससे चोट नहीं लगेगी। मुझे संदेह है कि हालांकि यह कितना मदद करेगा। मेरी छोटी फ़ाइलों और नियंत्रित सिंक के साथ मुझे लगता है कि मुझे कवर किया जाना चाहिए? इसमें एक आदेशित अनुक्रम है। मतलब यह है कि डेटा भी कुछ हद तक पत्रिकाओं हैं। यह हालांकि गैर-नियतात्मक अंतराल को जन्म दे सकता है। जो मेरी स्थिति में खराब है। (यह शायद एक मुद्दा नहीं है।) इसमें एक अनुसूचित सिंक सुविधा भी है। उदाहरण के लिए। हर 5 सेकंड में कमिट करें। मुझे लगता है कि मेरे अपने syncs के साथ हस्तक्षेप कर रहा है। एसडी कार्ड के लिए बहुत सारे लेखन खराब हैं। यहां तक कि औद्योगिक भी। मुझे यह अक्षम करने के बारे में कोई दस्तावेज नहीं मिल रहा है। और ext3 अभी भी हर स्टार्टअप पर चलाने के लिए fsck की आवश्यकता है! लेकिन ext3 अभी भी एक संभावना है।
Ext4। Ext3 के प्रदर्शन के मुद्दों को बहुत ठीक करेगा। मुझे वास्तव में प्रदर्शन की आवश्यकता नहीं है। और मेरे वितरण में बिल्ट mkfs.ext4 और fsck.ext4 नहीं लगता है। शायद यह कोई समस्या नहीं है। हालांकि यह हो सकता है। उदाहरण के लिए। e2progs-libs (jfsutils के लिए निर्भरता) ढेर सारे संकलन मुद्दों के लिए लगता है।
JFS, XFS, BRFSS। मेरे कर्नेल द्वारा समर्थित सभी। वर्तमान में मेरे उपयोगकर्ता स्पेस टूल बॉक्स में शामिल नहीं है। सभी बल्कि बड़ी जटिल प्रणाली लगती है। और वे सभी स्टार्टअप पर बराबर 'fsck' की आवश्यकता लगती है?
मैंने अपना स्वयं का फाइल सिस्टम फेंकने पर भी विचार किया है: हमेशा फ़ाइल तालिका की 2 प्रतियां लिखें। ट्रैवर्स करते समय, यह सही सीआरसी और नवीनतम अनुक्रम संख्या के साथ एक को चुनता है। 2-चरण लिखने का क्रम बनाएं। अस्थायी आवंटित करें, कमिट करें। कोई fsck की जरूरत है। मुझे डर है कि यह थोड़ा भोला हो सकता है।
UPDATE3: BTW, एम्बेडेड सिस्टम की प्रकृति (यह कम से कम) यह है कि वे स्वायत्त, अप्राप्य, पहुंच से बाहर हैं, और उन्हें वर्षों तक चलना है। Fsck जैसे कार्यक्रमों के लिए मानव संपर्क की आवश्यकता हो सकती है जो मुझे बाहर रेंगते हैं।