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