বাহ্যিক সঞ্চয়স্থান vold init পরিষেবা এবং StorageManagerService সিস্টেম পরিষেবার সংমিশ্রণ দ্বারা পরিচালিত হয়। ভৌত বহিরাগত স্টোরেজ ভলিউমের মাউন্টিং vold দ্বারা পরিচালিত হয়, যা অ্যাপ্লিকেশনগুলিতে প্রকাশ করার আগে মিডিয়াকে প্রস্তুত করার জন্য স্টেজিং অপারেশন করে।
দ্রষ্টব্য: Android 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 এর মাধ্যমে পরিচালিত হয়। Android 6.0-এ কনফিগারেশন পরিবর্তনের কারণে (storage_list.xml রিসোর্স ওভারলে অপসারণের মতো), কনফিগারেশনের বিবরণ দুটি বিভাগে বিভক্ত করা হয়েছে।
Android 5.x এবং তার আগের
ডিভাইস-নির্দিষ্ট storage_list.xml কনফিগারেশন ফাইল, সাধারণত একটি frameworks/base ওভারলে এর মাধ্যমে প্রদান করা হয়, স্টোরেজ ডিভাইসের বৈশিষ্ট্য এবং সীমাবদ্ধতা সংজ্ঞায়িত করে। <StorageList> এলিমেন্টে এক বা একাধিক <storage> উপাদান রয়েছে, যার মধ্যে একটিকে প্রাথমিক হিসেবে চিহ্নিত করা উচিত। <storage> বৈশিষ্ট্য অন্তর্ভুক্ত:
-
mountPoint: এই মাউন্টের ফাইল সিস্টেম পাথ। -
storageDescription: স্ট্রিং রিসোর্স যা এই মাউন্টকে বর্ণনা করে। -
primary: সত্য যদি এই মাউন্টটি প্রাথমিক বহিরাগত স্টোরেজ হয়। -
removable: সত্য যদি এই মাউন্টে অপসারণযোগ্য মিডিয়া থাকে, যেমন একটি শারীরিক SD কার্ড। -
emulated: true যদি এই মাউন্টটি অনুকরণ করা হয় এবং অভ্যন্তরীণ স্টোরেজ দ্বারা সমর্থিত হয়, সম্ভবত একটি FUSE ডেমন ব্যবহার করে। -
mtp-reserve: MB স্টোরেজের সংখ্যা যা MTP-এর বিনামূল্যে স্টোরেজের জন্য সংরক্ষণ করা উচিত। শুধুমাত্র যখন মাউন্টকে অনুকরণ করা হিসাবে চিহ্নিত করা হয় তখনই ব্যবহার করা হয়। -
allowMassStorage: সত্য যদি এই মাউন্টটি USB ভর স্টোরেজের মাধ্যমে ভাগ করা যায়। -
maxFileSize: সর্বোচ্চ ফাইলের আকার MB এ।
অভ্যন্তরীণ স্টোরেজ দ্বারা সমর্থিত একটি কেস-সংবেদনশীল, অনুমতিহীন ফাইল সিস্টেম অনুকরণ করে ডিভাইসগুলি বাহ্যিক সঞ্চয়স্থান সরবরাহ করতে পারে। একটি সম্ভাব্য বাস্তবায়ন 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 দ্বারা আর ব্যবহার করা হয় না। পরিবর্তে, ব্যবহারকারী বিচ্ছেদ এখন ব্যবহারকারী-নির্দিষ্ট GID-এর সাথে প্রয়োগ করা হয়েছে, এবং প্রাথমিক ভাগ করা সঞ্চয়স্থান রানটাইমেvoldদ্বারা মাউন্ট করা হয়।- বিকাশকারীরা তাদের ব্যবহারের ক্ষেত্রে নির্ভর করে গতিশীল বা স্থিতিশীলভাবে পাথ তৈরি করা চালিয়ে যেতে পারে। পথের মধ্যে UUID অন্তর্ভুক্ত করা প্রতিটি কার্ডকে সনাক্ত করে যাতে বিকাশকারীদের জন্য অবস্থান পরিষ্কার হয়। (উদাহরণস্বরূপ,
/storage/ABCD-1234/report.txtস্পষ্টতই/storage/DCBA-4321/report.txtথেকে একটি ভিন্ন ফাইল।)
- বিকাশকারীরা তাদের ব্যবহারের ক্ষেত্রে নির্ভর করে গতিশীল বা স্থিতিশীলভাবে পাথ তৈরি করা চালিয়ে যেতে পারে। পথের মধ্যে UUID অন্তর্ভুক্ত করা প্রতিটি কার্ডকে সনাক্ত করে যাতে বিকাশকারীদের জন্য অবস্থান পরিষ্কার হয়। (উদাহরণস্বরূপ,
- হার্ড-কোডযুক্ত 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 ব্যবহার করে এবং ব্যবহারকারীরা যখন ফাইল সিস্টেম অসমর্থিত হয় তখন মিডিয়া ফর্ম্যাট করতে বেছে নিতে পারে।