एम्बेडेड लिनक्स के लिए भ्रष्टाचार प्रूफ एसडी कार्ड फाइल सिस्टम?


36

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

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

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

पहनने-संतुलन एक प्लस है, लेकिन एक आवश्यकता नहीं है - एसडी कार्ड में आमतौर पर अपने स्वयं के तंत्र होते हैं, अगर सही से कम है, हालांकि सिस्टम "फ्लैश के लिए कोमल" होना चाहिए (एनटीएफएस जैसे सिस्टम एक महीने के भीतर एसडी कार्ड की हत्या कर सकते हैं)।


1
व्यक्तिगत रूप से, मैं दूसरे रास्ते पर जाऊंगा, और पॉवरऑफ पर एक सुरक्षित शटडाउन पर काम करूंगा, शायद एक शटडाउन को चलाने के लिए पर्याप्त ओम्फ प्रदान करने के लिए एक टोपी का उपयोग कर रहा हूं।
स्कॉट सीडमैन

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

@ScottSeidman: यह आरपीआई है, काफी शक्ति-भूखा है - 15V के लिए 5V पर 800mA सोचो। जब तक आप सुपरकैप की पूरी बैटरी में निवेश नहीं करते हैं, तब तक कैपेसिटर चीज नहीं है।
एसएफ।

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

1
@SF। - ध्यान दें कि पॉवरफेल फ़ाइल सिस्टम के खिलाफ एक मजबूत के साथ दो मुद्दे हैं। पहला यह है कि एफएस स्वयं मजबूत हो सकता है, दूसरा यह है कि अंतर्निहित हार्डवेयर डिस्क में फ्लशिंग डेटा के बारे में झूठ नहीं है। मुझे पता है कि स्पिनिंग डिस्क ने अपने स्पष्ट प्रदर्शन को बढ़ाने के लिए हाल के वर्षों में झूठ बोलने के लिए ले लिया है, आप यह सुनिश्चित करना चाहेंगे कि आपके एसडी कार्ड ऐसा नहीं कर रहे हैं।
माइकल कोहेन

जवाबों:


17

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

लाभ:

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

यहां है कि इसे कैसे करना है:

मैं आर्कमा लाइन पर अपना रास्पबेरीपी चलाता हूं और मेरा कार्ड एसडी रीडर में है, इसलिए अन्य डिस्ट्रोस और / देव इंटरफेस के अनुसार उन निर्देशों को संशोधित करें।

यहाँ एक उदाहरण विभाजन लेआउट है:

/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap

RAID1 में btrfs पाने के लिए, आप फाइल सिस्टम को इस तरह बनाते हैं:

mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3

तो फिर आप rsync -aAXvइसे अपने पहले से बैकअप सिस्टम के लिए।

RTR1 में BTRFS से बूट करने के लिए, आपको initramfs को संशोधित करना होगा । इसलिए, आपको अपने पुराने फाइल सिस्टम पर अपना सिस्टम चलाते हुए निम्नलिखित कार्य करने होंगे।

रास्पबेरी आमतौर पर mkinitcpio का उपयोग नहीं करता है, इसलिए आपको इसे स्थापित करना होगा। फिर, आपको mkinitcpio.conf में MODULES सरणी में "btrfs" जोड़ने की आवश्यकता है और इसके साथ initramfs को फिर से बनाना है

mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION

यह जानने के लिए कि आपके बजाय FOR_KERNEL_VERSION क्या है, टाइप करें

ls /lib/modules

यदि आप कर्नेल को अपडेट करते हैं, तो आपको रीबूट करने से पहले initramfs को फिर से बनाना होगा।

फिर, आपको आरपीआई की बूट फ़ाइलों को संशोधित करने की आवश्यकता है।

Cmdline.txt में, आपके पास होना चाहिए

root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs

और config.txt में, आपको जोड़ना होगा

initramfs initrd 0x01f00000

एक बार जब आप वह सब कुछ कर लेते हैं और सफलतापूर्वक आपके btrfs RAID1 सिस्टम में बूट हो जाते हैं, तो केवल एक ही चीज आवधिक स्क्रब (हर 3-7 दिन) या तो सिस्टमड टाइमर (पसंदीदा), या क्रॉन (dcron) के साथ सेट करना है:

btrfs scrub start /

यह आपके फाइल सिस्टम पर सभी फाइलों के चेकसम की तुलना करके और उन्हें ठीक करने (सही कॉपी के साथ बदलने) पर चलेगा यदि यह कोई भ्रष्टाचार पाता है।

BTRFS RAID1, एकल माध्यम और रास्पबेरी पाई का संयोजन इस सुंदर आर्कन सामान बनाता है। सभी टुकड़ों को एक साथ रखने में कुछ समय और काम लगा, लेकिन यहाँ यह है।


क्या मुझे प्रत्येक बूट-अप के बाद भी 'स्क्रब' जोड़ना चाहिए?
एसएफ।

@SF। नहीं, यह आवश्यक नहीं है। हर X दिनों में आवधिक स्क्रब पर्याप्त है। अधिमानतः कम से कम उपयोग के घंटों के दौरान।
लॉकहीड

क्षमा करें, मैं यह समझने में विफल हूं - अगर मैं वसा /bootविभाजन रखता हूं , तो क्या मुझे अभी भी initramfs को संशोधित करने की आवश्यकता है?
Bex

बेक्स, हां। यह btrfs के raid1 फ़ीचर के साथ करना है, न कि वसा / बूट विभाजन के साथ।
लॉकहीड

@@@ UPDATE: @@@ अब, कोई भी RAID1 के बजाय डुप्-मोड का उपयोग करने की कोशिश कर सकता है: "mkfs.btrfs --data dup --metadata dup" लेकिन मुझे 100% यकीन नहीं है कि यह RAID1 जैसा ही है। एक ही ड्राइव पर।
लॉकहीड

10

अच्छी तरह से फ्लैश मेमोरी कई कारणों से चुंबकीय भंडारण की तुलना में अधिक वांछनीय है, लेकिन इस एप्लिकेशन के लिए मैं मुख्य रूप से कहूंगा क्योंकि कोई चलती भागों नहीं है। यह कहा जा रहा है, मुझे नहीं लगता कि वहाँ एक 'भ्रष्टाचार सबूत' फाइल सिस्टम है, लेकिन वहाँ कुछ मजबूत filesystems (ext4 एक जा रहा है), साथ ही कुछ रणनीति भ्रष्टाचार को कम करने में मदद करने के लिए कर रहे हैं।

रैम डिस्क

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


10

मैं दूसरे रास्ते पर जाऊंगा और सिर्फ एक फाइल-फाइल सिस्टम का उपयोग करूंगा। एसडीकार्ड पर रीड-राइट रूट फाइलसिस्टम का उपयोग करने पर मुझे कभी भी मेरी रास्पबेरी पाई पर्याप्त नहीं मिलती है। आप या तो कर्नेल cmdline (ro) के माध्यम से अपनी रूट को बूट कर सकते हैं या अपने संपूर्ण सिस्टम सहित पिगबैक के साथ एक इनट्राम्राम्स का उपयोग कर सकते हैं।

दोनों मेरे होममेड बिल्ड सिस्टम ओपनएडीके के साथ बनाना संभव हैं। ( http://www.openadk.org )


आरओ फाइलसिस्टम मदद करता है ... लेकिन पूरी तरह से मुद्दे को हल नहीं करता है।
पिस्कवर

7

ठीक है, आपके पास जो समस्या है वह यह है कि "आधुनिक" फाइलसिस्टम जैसे कि ext * का उपयोग करके आपके एसडी कार्ड को नीचे पहनने की संभावना है; मेरे अनुभव से जो एक वर्ष के भीतर होता है, या अगले वर्ष यदि आप उच्च अंत लेते हैं।

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

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

जैसा कि आप कहते हैं कि आपका सिस्टम सेंसर के डेटा को भी संभाल रहा है, यह बहुत संभावना है कि आप फ्लैश पर उन्हें स्टोर करते हैं जैसे वे आते हैं। और वे लॉग डेटा की तरह खराब हैं।

मैं उसी समस्या में चला गया जिसमें आप भाग रहे हैं, और यहाँ मेरे निष्कर्ष हैं। मैंने एसडी कार्ड की तलाश करने की कोशिश की, जिसे "अधिक मजबूत" के रूप में बेचा जाएगा, अर्थात दूसरों की तुलना में अधिक लेखन को संभालने में सक्षम होना चाहिए, लेकिन मुझे उस बाजार पर कोई बेंचमार्क नहीं मिला जो एसएसडी पर बेंचमार्क के विपरीत उस पर ध्यान केंद्रित करता है। जैसा कि वे सभी केवल गति पर ध्यान केंद्रित करते हैं, प्रति मेमोरी ब्लॉक और एसडीकार्ड में प्रयुक्त तकनीक की संख्या जानना असंभव है।

हालाँकि, मैंने देखा है कि "औद्योगिक" ग्रेड सैंडिसक्स में एक लंबा जीवनकाल था, जो कोई नाम नहीं था। जो आश्चर्य की बात नहीं है, जब आप अधिक भुगतान करते हैं, तो आप अधिक प्राप्त करते हैं।

लेकिन अंत में, गहन लॉगिंग सक्षम होने के साथ, मैंने पाया कि कोई एसडी कार्ड जीवनकाल में कुछ वर्षों से अधिक नहीं है, एक वर्ष जहां सबसे अधिक मृत्यु होती है।

जो समाधान मैं लेकर आया हूं वह @ BigHomie's और @wbx 'समाधान हैं: केवल Read extX फाइल सिस्टम का उपयोग करें (जैसा कि जर्नलिंग की अब आवश्यकता नहीं है, आप अच्छे पुराने ext2 पर भी वापस आ सकते हैं)। और अगर आप सत्र के भीतर लॉग रखना चाहते हैं या अस्थायी फाइलें लिखना चाहते हैं, तो आप हमेशा RAMDISK का उपयोग कर सकते हैं।

केवल ट्यूटोरियल और स्क्रिप्ट मौजूद हैं जो पढ़ने के लिए केवल कुछ हिस्सों के डेटा के साथ रैमडिस्क को आबाद करने में मदद करते हैं ताकि आप उन्हें सत्र के लिए संपादित कर सकें।

NB: मेरा अनुभव 20 सेंसर उपकरणों के परीक्षण के बीच, बीगलबोन पर एंगस्ट्रॉम लिनक्स का उपयोग कर रहा है। सिस्टम के जर्नल सिस्टम का उपयोग करके उस सिस्टम का लॉगिंग बहुत ही वर्बोज़ था।


4

लिनक्स कई फाइल सिस्टम प्रदान करता है। ext4 वह है जिस पर मुझे अधिक विश्वास है। जब संदेह में, ext4 का उपयोग किसी भी विभाजन के लिए किया जाना चाहिए जो कि पठन-लेखन पर आरूढ़ होगा।

Ext2 फाइल सिस्टम और अधिक नाजुक है। यह सिस्टम के लिए एक पूरी तरह से अच्छा फाइल सिस्टम है जो इसे केवल पढ़ने के लिए माउंट करने में सक्षम है, या इसे सही ढंग से अनमाउंट कर सकता है। लेकिन ext2 पर बिजली की विफलता के साथ भ्रष्टाचार बेहद संभावना है ।

अन्य विकल्प jfs पर विचार कर सकते हैं भले ही jfs फाइल सिस्टम कुछ लिनक्स संस्करणों में विश्वसनीय न हो। भ्रष्टाचार के साथ कम होने की संभावना है JFS साथ तुलना ext4Jfs में एक त्वरित माउंट समय और फ़ाइल सिस्टम चेक समय भी है।


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