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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

फ़ाइल मैपिंग

Android 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 करने योग्य शामिल हैं।

Android रिलीज़ 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 में कॉन्फ़िगरेशन परिवर्तन के कारण (जैसे स्टोरेज_लिस्ट.एक्सएमएल संसाधन ओवरले को हटाना), कॉन्फ़िगरेशन विवरण दो श्रेणियों में विभाजित हैं।

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

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

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

डिवाइस आंतरिक भंडारण द्वारा समर्थित केस-असंवेदनशील, अनुमति रहित फाइल सिस्टम का अनुकरण करके बाहरी भंडारण प्रदान कर सकते हैं। system/core/sdcard एसडीकार्ड में FUSE डेमॉन द्वारा एक संभावित कार्यान्वयन प्रदान किया जाता है, जिसे डिवाइस-विशिष्ट 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 द्वारा उपयोगकर्ता-विशिष्ट माउंट बिंदुओं को कॉन्फ़िगर करने के लिए उपयोग नहीं किया जाता है। इसके बजाय, उपयोगकर्ता पृथक्करण अब उपयोगकर्ता-विशिष्ट GIDs के साथ लागू किया गया है, और प्राथमिक साझा संग्रहण को रनटाइम पर vold द्वारा जगह में रखा गया है।
    • डेवलपर्स अपने उपयोग के मामले के आधार पर गतिशील या स्थिर रूप से पथ बनाना जारी रख सकते हैं। पथ में UUID को शामिल करने से डेवलपर्स के लिए स्थान स्पष्ट करने के लिए प्रत्येक कार्ड की पहचान होती है। (उदाहरण के लिए, /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 का उपयोग करता है, और जब फाइल सिस्टम असमर्थित होता है तो उपयोगकर्ता मीडिया को प्रारूपित करना चुन सकते हैं।