उपकरण का प्रारूप

बाहरी भंडारण को vold इनिट सेवा और StorageManagerService सिस्टम सेवा के संयोजन द्वारा प्रबंधित किया जाता है। भौतिक बाहरी स्टोरेज वॉल्यूम की माउंटिंग को vold द्वारा नियंत्रित किया जाता है, जो ऐप्स को उजागर करने से पहले मीडिया को तैयार करने के लिए स्टेजिंग ऑपरेशन करता है।

नोट: एंड्रॉइड 8.0 में, MountService क्लास का नाम बदलकर StorageManagerService कर दिया गया था।

फ़ाइल मैपिंग

एंड्रॉइड 4.2.2 और इससे पहले के संस्करण के लिए, डिवाइस-विशिष्ट vold.fstab कॉन्फ़िगरेशन फ़ाइल sysfs डिवाइस से फ़ाइल सिस्टम माउंट पॉइंट तक मैपिंग को परिभाषित करती है, और प्रत्येक पंक्ति इस प्रारूप का अनुसरण करती है:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label : वॉल्यूम के लिए लेबल.
  • mount_point : फ़ाइल सिस्टम पथ जहां वॉल्यूम माउंट किया जाना चाहिए।
  • partition : विभाजन संख्या (1 आधारित), या पहले प्रयोग योग्य विभाजन के लिए 'स्वचालित'।
  • sysfs_path : उपकरणों के लिए एक या अधिक sysfs पथ जो यह माउंट पॉइंट प्रदान कर सकते हैं। रिक्त स्थान से अलग, और प्रत्येक को / से प्रारंभ करना होगा।
  • flags : वैकल्पिक अल्पविराम से अलग की गई झंडों की सूची, इसमें / नहीं होना चाहिए। संभावित मानों में nonremovable और encryptable शामिल हैं।

एंड्रॉइड रिलीज़ 4.3 और बाद के संस्करण के लिए, init, vold और पुनर्प्राप्ति द्वारा उपयोग की जाने वाली विभिन्न fstab फ़ाइलें /fstab.<device> फ़ाइल में एकीकृत की गई थीं। बाहरी संग्रहण वॉल्यूम के लिए जिन्हें vold द्वारा प्रबंधित किया जाता है, प्रविष्टियों में निम्नलिखित प्रारूप होना चाहिए:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src : डिवाइस के लिए sysfs के अंतर्गत एक पथ (आमतौर पर /sys पर माउंट किया गया) जो माउंट पॉइंट प्रदान कर सकता है। पथ / से प्रारंभ होना चाहिए.
  • mount_point : फ़ाइल सिस्टम पथ जहां वॉल्यूम माउंट किया जाना चाहिए।
  • type : वॉल्यूम पर फ़ाइल सिस्टम का प्रकार। बाहरी कार्डों के लिए, यह आमतौर पर vfat है।
  • mnt_flags : Vold इस फ़ील्ड को अनदेखा करता है और इसे defaults पर सेट किया जाना चाहिए
  • fs_mgr_flags : Vold एकीकृत fstab में किसी भी पंक्ति को अनदेखा करता है जिसमें इस फ़ील्ड में voldmanaged= ध्वज शामिल नहीं है। इस ध्वज के बाद कार्ड का वर्णन करने वाला एक लेबल और एक विभाजन संख्या या auto शब्द होना चाहिए। यहाँ एक उदाहरण है: voldmanaged=sdcard:auto । अन्य संभावित झंडे nonremovable , encryptable=sdcard , noemulatedsd , और encryptable=userdata

कॉन्फ़िगरेशन विवरण

फ्रेमवर्क स्तर पर और उससे ऊपर बाहरी भंडारण इंटरैक्शन को StorageManagerService के माध्यम से नियंत्रित किया जाता है। एंड्रॉइड 6.0 में कॉन्फ़िगरेशन परिवर्तनों (जैसे कि स्टोरेज_लिस्ट.xml संसाधन ओवरले को हटाना) के कारण, कॉन्फ़िगरेशन विवरण दो श्रेणियों में विभाजित हो गए हैं।

Android 5.x और इससे पहले का संस्करण

डिवाइस-विशिष्ट storage_list.xml कॉन्फ़िगरेशन फ़ाइल, आमतौर पर frameworks/base ओवरले के माध्यम से प्रदान की जाती है, स्टोरेज डिवाइस की विशेषताओं और बाधाओं को परिभाषित करती है। <StorageList> तत्व में एक या अधिक <storage> तत्व होते हैं, जिनमें से एक को प्राथमिक के रूप में चिह्नित किया जाना चाहिए। <storage> विशेषताओं में शामिल हैं:

  • mountPoint : इस माउंट का फ़ाइल सिस्टम पथ.
  • storageDescription : स्ट्रिंग संसाधन जो इस माउंट का वर्णन करता है।
  • primary : यदि यह माउंट प्राथमिक बाह्य भंडारण है तो सत्य है।
  • removable : यदि इस माउंट में हटाने योग्य मीडिया है, जैसे कि भौतिक एसडी कार्ड, तो यह सत्य है।
  • emulated : यदि यह माउंट अनुकरणीय है और संभवतः FUSE डेमॉन का उपयोग करके आंतरिक भंडारण द्वारा समर्थित है, तो यह सच है।
  • mtp-reserve : एमबी स्टोरेज की संख्या जिसे एमटीपी को मुफ्त स्टोरेज के लिए आरक्षित करना चाहिए। केवल तभी उपयोग किया जाता है जब माउंट को अनुकरण के रूप में चिह्नित किया गया हो।
  • allowMassStorage : यदि यह माउंट USB मास स्टोरेज के माध्यम से साझा किया जा सकता है तो सत्य है।
  • maxFileSize : एमबी में अधिकतम फ़ाइल आकार।

डिवाइस आंतरिक भंडारण द्वारा समर्थित केस-असंवेदनशील, अनुमति रहित फाइल सिस्टम का अनुकरण करके बाहरी भंडारण प्रदान कर सकते हैं। एक संभावित कार्यान्वयन FUSE डेमॉन द्वारा system/core/sdcard में प्रदान किया जाता है, जिसे डिवाइस-विशिष्ट init.rc सेवा के रूप में जोड़ा जा सकता है:

# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023
    class late_start

जहां source_path बैकिंग इंटरनल स्टोरेज है और dest_path लक्ष्य माउंट पॉइंट है।

डिवाइस-विशिष्ट init.rc स्क्रिप्ट को कॉन्फ़िगर करते समय, EXTERNAL_STORAGE पर्यावरण चर को प्राथमिक बाह्य भंडारण के पथ के रूप में परिभाषित किया जाना चाहिए। /sdcard पथ को भी संभवतः एक सिम्लिंक के माध्यम से उसी स्थान पर हल करना होगा। यदि कोई डिवाइस प्लेटफ़ॉर्म अपडेट के बीच बाहरी स्टोरेज के स्थान को समायोजित करता है, तो सिम्लिंक बनाया जाना चाहिए ताकि पुराने पथ काम करना जारी रखें।

एंड्रॉइड 6.0

स्टोरेज सबसिस्टम का कॉन्फ़िगरेशन अब डिवाइस-विशिष्ट fstab फ़ाइल में केंद्रित है, और अधिक गतिशील व्यवहार का समर्थन करने के लिए कई ऐतिहासिक स्थैतिक कॉन्फ़िगरेशन फ़ाइलें/चर हटा दिए गए हैं:

  • storage_list.xml संसाधन ओवरले हटा दिया गया है और अब फ्रेमवर्क द्वारा इसका उपयोग नहीं किया जाता है। vold द्वारा पता लगाए जाने पर स्टोरेज डिवाइस अब गतिशील रूप से कॉन्फ़िगर किए जाते हैं।
  • EMULATED_STORAGE_SOURCE/TARGET पर्यावरण चर हटा दिए गए हैं और अब उपयोगकर्ता-विशिष्ट माउंट बिंदुओं को कॉन्फ़िगर करने के लिए Zygote द्वारा उपयोग नहीं किए जाते हैं। इसके बजाय, उपयोगकर्ता पृथक्करण अब उपयोगकर्ता-विशिष्ट जीआईडी ​​के साथ लागू किया गया है, और प्राथमिक साझा भंडारण को रनटाइम पर vold द्वारा माउंट किया गया है।
    • डेवलपर्स अपने उपयोग के मामले के आधार पर गतिशील या स्थिर रूप से पथ बनाना जारी रख सकते हैं। पथ में यूयूआईडी शामिल करने से डेवलपर्स के लिए स्थान स्पष्ट करने के लिए प्रत्येक कार्ड की पहचान होती है। (उदाहरण के लिए, /storage/ABCD-1234/report.txt स्पष्ट रूप से /storage/DCBA-4321/report.txt से भिन्न फ़ाइल है।)
  • हार्ड-कोडित FUSE सेवाओं को डिवाइस-विशिष्ट init.rc फ़ाइलों से हटा दिया गया है और इसके बजाय आवश्यकता पड़ने पर vold से गतिशील रूप से फोर्क किया जाता है।

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

अपनाने योग्य भंडारण

fstab में एक अपनाने योग्य स्टोरेज डिवाइस को इंगित करने के लिए, fs_mgr_flags फ़ील्ड में encryptable=userdata विशेषता का उपयोग करें। यहाँ एक विशिष्ट परिभाषा है:

/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
voldmanaged=sdcard1:auto,encryptable=userdata

जब एक स्टोरेज डिवाइस अपनाया जाता है, तो प्लेटफ़ॉर्म सामग्री को मिटा देता है और एक GUID विभाजन तालिका लिखता है जो दो विभाजनों को परिभाषित करता है:

  • एक छोटा खाली android_meta विभाजन जो भविष्य में उपयोग के लिए आरक्षित है। विभाजन प्रकार GUID 19A710A2-B3CA-11E4-B026-10604B889DCF है।
  • एक बड़ा android_ext विभाजन जिसे dm-crypt का उपयोग करके एन्क्रिप्ट किया गया है और कर्नेल क्षमताओं के आधार पर ext4 या f2fs का उपयोग करके स्वरूपित किया गया है। विभाजन प्रकार GUID 193D1EA4-B3CA-11E4-B075-10604B889DCF है।

पोर्टेबल भंडारण

fstab में, voldmanaged विशेषता वाले स्टोरेज डिवाइस को डिफ़ॉल्ट रूप से पोर्टेबल माना जाता है जब तक कि encryptable=userdata जैसी कोई अन्य विशेषता परिभाषित नहीं की जाती है। उदाहरण के लिए, यहां USB OTG उपकरणों के लिए एक विशिष्ट परिभाषा दी गई है:

/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
                                                    voldmanaged=usb:auto

प्लेटफ़ॉर्म माउंटिंग से पहले फ़ाइल सिस्टम प्रकारों का पता लगाने के लिए blkid उपयोग करता है, और फ़ाइल सिस्टम असमर्थित होने पर उपयोगकर्ता मीडिया को प्रारूपित करना चुन सकते हैं।