Ext4 के साथ फाइल सिस्टम को कितने समय तक कैश किया जा सकता है?


13

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

ऐसा लगता है कि समस्याओं को एक पैच में तय किया गया है जो कि कुछ स्थितियों में आवंटन को रोकता है, जिससे डेटा को डिफ़ॉल्ट रूप से अधिकतम 5 सेकंड के बाद डिस्क पर मजबूर किया जाता है।

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

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

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

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

जवाबों:


14

आप कस्टम अंतराल को एक कस्टम मान पर सेट कर सकते हैं, जो मेरा मानना ​​है कि 32-बिट अहस्ताक्षरित पूर्णांक संख्या के रूप में उच्च हो सकता है; तो लगभग 4 बिलियन सेकंड, या 136 साल। यह commitमाउंट विकल्प के माध्यम से उपलब्ध है , जिसे आप निम्नानुसार रख सकते हैं (यह केवल एक उदाहरण है; आप इसे इसमें सेट भी कर सकते हैं fstab):

mount /dev/sda1 -t ext4 -o rw,data=writeback,nobh,commit=12345678

प्रतिबद्ध अंतराल किसी भी प्रकार की स्थिति पर आधारित नहीं है, जैसे कि डेटा को जोड़ा गया है या मौजूदा डेटा को अधिलेखित किया गया है या जो भी हो। commitमाउंट विकल्प (जो 5 सेकंड के लिए चूक करता है, तो आप बिल्कुल माउंट विकल्प नहीं दे रहे हों) एक bash खोल में कुछ इस तरह कर रही है के बराबर है:

#!/bin/bash
while :
do
    echo "Syncing all uncommitted data and journal to disk"
    sync
    sleep 5
done

भ्रमित मत करो data=orderedऔर यह वैश्विक फाइलसिस्टम सिंक अंतराल ("कमिट अंतराल" शायद हममें से उन लोगों के लिए एक कम सार्थक शब्द है जो कमांड लाइन प्रोग्राम की कार्यक्षमता को समझते हैं sync, इस स्थिति में इसे "सिंक अंतराल" नाम देना बेहतर हो सकता है)। data=orderedउस क्रम के बारे में है जिसमें डेटा और मेटाडेटा अपडेट किया जाता है (जहां data=writeback"कम सुरक्षित / तेज़" है और data=journal"अधिक सुरक्षित / धीमा" है)। commit=12345678उस आवृत्ति के बारे में है जिसके साथ फाइलसिस्टम ड्रायवर स्वयं सभी गंदे डेटा / जर्नल / मेटाडेटा / जो भी भौतिक मीडिया के लिए पूरी तरह से सिंक करता है। और आप निश्चित रूप से इसे 136 साल तक सेट कर सकते हैं यदि आप चाहते हैं, data=writeback,nobhऔर उन कार्यक्रमों के साथ माउंट करें जो फोन नहीं करते हैं fsync()या sync()गंदे पेज रैम में बैठे होंगे ...

अद्यतन: आपके प्रश्न के संपादन में आपके संदर्भ के आधार पर, मैं कहूंगा कि आपको अपने फाइल सिस्टम को माउंट विकल्प data=journal,commit=1या syncमाउंट विकल्प के साथ भी चलाना चाहिए , जब तक कि आप अपने ग्राफिक्स ड्राइवर कर्नेल पैनिक्स को हल करने में सक्षम न हों। यह अधिकतम डेटा अखंडता बनाए रखेगा लेकिन प्रदर्शन की कीमत पर। आप विशेष रूप से ऐसा करना चाहते हैं यदि आप अक्सर डिस्क पर डेटा लिख ​​रहे हैं जिसे आप खोने का जोखिम नहीं उठा सकते हैं, और यह दोगुना महत्वपूर्ण है यदि आप उन ऐप्स पर "विश्वास" नहीं करते हैं जो आप fsync()उचित रूप से नियोजित करने के लिए उपयोग कर रहे हैं ।

स्रोत: यहां और व्यक्तिगत अनुभव


1
धन्यवाद, "सभी गंदे डेटा" भाग बिल्कुल वही था जिसके बारे में मुझे चिंता थी! मुझे इस बात की चिंता थी कि विलंबित आवंटन के अतिरिक्त और भी कुछ अपवाद थे (जो नए डेटा को कमिट अंतराल के बाद भी राइट कैश में बने रहने का कारण बन सकते हैं)।
lxgr 14

1
मुझे पूरा यकीन है कि कॉल करते समय विलंबित आवंटन पूरी तरह से अप्रासंगिक है sync(या, समतुल्य है, जब प्रतिबद्ध अंतराल टाइमर निकाल दिया जाता है)। उस समय में जब syncपूर्णता हो जाती है, बिल्कुल गंदे डेटा, मेटाडेटा या जर्नल पृष्ठ नहीं होते हैं। सिंक्रोनस डेटा ट्रांसफर के दौरान फाइल सिस्टम में कोई भी परिवर्तन तब तक अवरुद्ध हो जाता है जब तक वह पूरा नहीं हो जाता।
allquixotic

1
वास्तव में? में bugs.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/45 यह विशेष रूप से उल्लेख किया गया है कि आवंटित पृष्ठों पर डिस्क पर नहीं लिखा जाएगा एक प्रतिबद्ध (लेकिन एक fsync पर निश्चित रूप से ())। पैच कुछ सामान्य मामलों को ठीक करता है जहां आवंटन को मजबूर करके यह व्यवहार समस्याग्रस्त है; हालाँकि, डेटा को अधिलेखित करने के बारे में कुछ नहीं कहा गया है।
lxgr

1
आह, तो commit=...और syncबराबर नहीं हैं? या tytso का तात्पर्य यह है कि इसके साथ भी असंबद्ध syncपृष्ठ नहीं हैं? मैं सोच भी नहीं सकता कि यह मामला है, क्योंकि यह POSIX विनिर्देशों का उल्लंघन करेगा। हो सकता है कि आप उस बैश स्क्रिप्ट का उपयोग कर सकें जो मैंने बेहतर डेटा सुरक्षा के लिए प्रदान की थी: P
allquixotic

1
मुझे पूरा यकीन है कि वह पूर्व का मतलब था, बाद में लिनक्स पर ext4 बना देगा उपयोग करने के लिए एक बहुत खतरनाक फाइल सिस्टम;) स्क्रिप्ट एक अच्छा बदलाव की तरह दिखता है; मैं इसे आज़माता हूँ और शायद मेरे सबसे महत्वपूर्ण अनुप्रयोगों में से कुछ का स्ट्रेस के साथ मूल्यांकन कर सकता हूँ - शायद वे सभी fsync () का उपयोग कर रहे हैं, और मुझे बहुत चिंता हो रही है ...
lxgr

1

आपके सवाल का जवाब जो भी हो, इससे कोई फर्क नहीं पड़ता।

गारंटी उजागर ext4 फाइलसिस्टम के व्यवहार है कि "डेटा एक सफल के बाद डिस्क पर होगा sync/ fsyncकॉल"। इसलिए, यदि आपके पास कोई एप्लिकेशन है जो आपसे यह प्रश्न पूछती है, तो आपको उन महत्वपूर्ण बिंदुओं पर सिंक्रोनाइज़ेशन कॉल सम्मिलित करना चाहिए, जहां डेटा अखंडता सुनिश्चित की जानी चाहिए। यदि आप एक ही समस्या से चिंतित उपयोगकर्ता हैं, तो syncजो भी खतरनाक व्यवहार अशुद्ध शटडाउन का कारण हो सकता है, उसे करने से पहले आप कमांड-लाइन उपयोगिता को कॉल कर सकते हैं ।


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