कैस्केड फ़ाइल सिस्टम या मेरे सपनों की फ़ाइल प्रणाली पर प्रतिबिंब



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

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

इसके लिए क्या है?

एक बार जब मैं विंडोज पर अंतःक्रियात्मक रूप से बैठा हुआ था और संभावना है कि प्रोग्राम को स्थापित करने के बाद इसे हटा दिया जा सकता है और सिस्टम में कोई बचे हुए नहीं हैं, तो यह शून्य हो गया है, आपको बस सिस्टम 32 फ़ोल्डर और डीएल हॉरर को याद रखना होगा। फिर मैं मैक ओएस एक्स में चला गया, जहां अधिकांश प्रोग्राम केवल * .app फ़ोल्डर को खुद से कॉपी करके इंस्टॉल किए जाते हैं। लेकिन सब कुछ इतना सरल नहीं निकला, कार्यक्रम अभी भी लाइब्रेरी और साथ ही अन्य सिस्टम फ़ोल्डरों को लिखे गए थे। लेकिन क्या होगा यदि प्रोग्राम फाइल सिस्टम में "माउंटेड" हो सकते हैं, जिससे उनके लिए "सैंडबॉक्स" बन सकता है, जिससे वे बाहर नहीं निकल सकते हैं? आप इस तरह की एक छवि को अनमाउंट करते हैं - और इस प्रोग्राम द्वारा बनाई गई सभी फाइलें सिस्टम से हटा दी जाएंगी। लेकिन इतना सरल नहीं है।

दूसरों के बारे में कैसे?

एक कैस्केडिंग फ़ाइल प्रणाली का विचार जावा जैसी भाषाओं में संकुल की संरचना से प्रेरित था।
उदाहरण के लिए, हमारे पास 3 जार पुस्तकालयों से युक्त एक आवेदन है:
संरचना
core.jar
  • आरयू
    • Habrahabr
      • कोर
        • IHabr.java
        • HabraCore.java
        • HabraHelper.java

      • उपकरण
        • HabraTool.java




vendor.jar
  • आरयू
    • trylogic
      • superlib
        • AbstractSuperTool.java
        • SuperTool.java




application.jar
  • आरयू
    • Habrahabr
      • ग्राहक
        • HabraClient.java
        • HabraAdapter.java

      • उपकरण
        • HabraAnswerParser.java
        • HabraTool.java





लोडिंग के बाद जेवीएम इस संरचना को कैसे देखता है
  • आरयू
    • Habrahabr
      • ग्राहक
        • HabraClient.java
        • HabraAdapter.java

      • कोर
        • IHabr.java
        • HabraCore.java
        • HabraHelper.java

      • उपकरण
        • HabraAnswerParser.java
        • HabraTool.java


    • trylogic
      • superlib
        • AbstractSuperTool.java
        • SuperTool.java





नतीजतन, हमारे आवेदन सभी पुस्तकालयों के सभी वर्गों का एक संग्रह है जो एक पूरे के रूप में माना जाता है। इस मामले में, संघर्ष ओवरले द्वारा हल किए जाते हैं।

संघर्ष

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

सैंडबॉक्स से बाहर निकलें

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

लाभ

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

निष्कर्ष

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

PS हमेशा की तरह, पाठ की वर्तनी और शैली पर टिप्पणी कृपया व्यक्तिगत संदेशों में लिखें, न कि टिप्पणियों में। आपका धन्यवाद

UPD: उपयोगकर्ता pawnhearts ने ru.wikipedia.org/wiki/UnionFS को एक लिंक प्रदान किया। उनका Google मेरा से अधिक मजबूत है :)

Source: https://habr.com/ru/post/In168631/


All Articles