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

बाहरी संग्रहण को 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 और encryptable

एंड्रॉइड 4.3 और बाद के लिए, init, vold और पुनर्प्राप्ति द्वारा उपयोग की जाने वाली विभिन्न fstab फाइलें /fstab.<device> में एकीकृत किया गया था /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= flag शामिल नहीं है। इस झंडे को कार्ड का वर्णन करने वाले एक लेबल और एक विभाजन संख्या या शब्द auto बाद होना चाहिए। यहाँ एक उदाहरण है: voldmanaged=sdcard:auto । अन्य संभावित झंडे हैं nonremovable , encryptable=sdcard , noemulatedsd , और encryptable=userdata

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

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

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

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

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

डिवाइस आंतरिक भंडारण द्वारा समर्थित केस-असंवेदनशील, अनुमति रहित फाइल सिस्टम का अनुकरण करके बाहरी भंडारण प्रदान कर सकते हैं। एक संभावित कार्यान्वयन 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 पथ को संभवतः एक सिमलिंक के माध्यम से उसी स्थान पर हल करना चाहिए। यदि कोई डिवाइस प्लेटफ़ॉर्म अपडेट के बीच बाहरी भंडारण के स्थान को समायोजित करता है, तो सीमलिंक बनाए जाने चाहिए ताकि पुराने रास्ते काम करते रहें।

Android 6.0

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

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

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

एडॉप्टेबल स्टोरेज

में एक ग्रहणीय भंडारण युक्ति को दर्शाने के लिए fstab , का उपयोग encryptable=userdata में विशेषता fs_mgr_flags क्षेत्र। यहाँ एक सामान्य परिभाषा है:

/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 का उपयोग करता है, और जब फाइल सिस्टम असमर्थित होता है, तो उपयोगकर्ता मीडिया को प्रारूपित करना चुन सकते हैं।