ডিভাইস কনফিগারেশন

vold init পরিষেবা ও StorageManagerService সিস্টেম পরিষেবার মাধ্যমে এক্সটার্নাল স্টোরেজ ম্যানেজ করা হয়। ফিজিক্যাল এক্সটার্নাল স্টোরেজ ভলিউম মাউন্ট করার বিষয়টি vold ম্যানেজ করে, যা অ্যাপে দেখানোর আগে মিডিয়া প্রস্তুত করার জন্য স্টেজিং অপারেশন পারফর্ম করে।

মনে রাখবেন: Android 8.0-এ, MountService ক্লাসের নাম পরিবর্তন করে StorageManagerService করা হয়েছে।

ফাইল ম্যাপিং

Android 4.2.2 এবং তার আগের ভার্সনের জন্য, ডিভাইস-নির্দিষ্ট vold.fstab কনফিগারেশন ফাইল sysfs ডিভাইস থেকে ফাইলসিস্টেম মাউন্ট পয়েন্টে ম্যাপিং সংজ্ঞায়িত করে এবং প্রতিটি লাইন এই ফর্ম্যাট অনুসরণ করে:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label: ভলিউমের লেবেল।
  • mount_point: ফাইলসিস্টেম পাথ যেখানে ভলিউম মাউন্ট করা উচিত।
  • partition: পার্টিশন নম্বর (১-এর উপর ভিত্তি করে) অথবা প্রথম ব্যবহারযোগ্য পার্টিশনের জন্য 'অটো'।
  • 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-এর মাধ্যমে হ্যান্ডেল করা হয়। Android 6.0-এ কনফিগারেশন পরিবর্তনের কারণে (যেমন storage_list.xml রিসোর্স ওভারলে সরিয়ে দেওয়া), কনফিগারেশনের বিবরণ দুটি বিভাগে ভাগ করা হয়েছে।

Android 5.x ও তার আগের যেকোনও ভার্সন

ডিভাইস-নির্দিষ্ট storage_list.xml কনফিগারেশন ফাইল, সাধারণত frameworks/base ওভারলে-এর মাধ্যমে প্রদান করা হয়, যা স্টোরেজ ডিভাইসের অ্যাট্রিবিউট ও সীমাবদ্ধতা নির্ধারণ করে। <StorageList> এলিমেন্টে এক বা একাধিক <storage> এলিমেন্ট থাকে, যার মধ্যে ঠিক একটিকে প্রাইমারি হিসেবে চিহ্নিত করতে হবে। <storage> অ্যাট্রিবিউটের মধ্যে এগুলি অন্তর্ভুক্ত:

  • mountPoint: এই মাউন্টের ফাইলসিস্টেম পাথ।
  • storageDescription: এই মাউন্ট সম্পর্কে বর্ণনা করে এমন স্ট্রিং রিসোর্স।
  • primary: এই মাউন্টটি প্রাইমারি এক্সটার্নাল স্টোরেজ হলে true হবে।
  • removable: এই মাউন্টে ফিজিক্যাল SD কার্ডের মতো সরিয়ে দেওয়া যায় এমন মিডিয়া থাকলে, true।
  • emulated: এই মাউন্ট এমুলেট করা হলে এবং ইন্টার্নাল স্টোরেজ দ্বারা ব্যাক-আপ করা হলে, সম্ভবত FUSE ডেমন ব্যবহার করে, সত্য।
  • mtp-reserve: MTP-কে ফ্রি স্টোরেজের জন্য কত এমবি স্টোরেজ রিজার্ভ করতে হবে। মাউন্টকে এমুলেটেড হিসেবে চিহ্নিত করা হলেই শুধুমাত্র ব্যবহার করা হয়।
  • allowMassStorage: এই মাউন্ট USB বড় সঞ্চয়স্থানের মাধ্যমে শেয়ার করা গেলে true।
  • 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 পাথকেও একই লোকেশনে রেজোল্ভ করতে হবে, সম্ভবত সিমলিঙ্কের মাধ্যমে। প্ল্যাটফর্ম আপডেট করার সময় কোনও ডিভাইস এক্সটার্নাল স্টোরেজের লোকেশন অ্যাডজাস্ট করলে, সিমলিঙ্ক তৈরি করতে হবে যাতে পুরনো পাথ কাজ করা চালিয়ে যায়।

Android 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 ফাইলের থেকে আলাদা।)
  • ডিভাইস-নির্দিষ্ট init.rc ফাইল থেকে হার্ড-কোডেড FUSE পরিষেবা সরিয়ে দেওয়া হয়েছে এবং পরিবর্তে প্রয়োজন হলে vold থেকে ডাইনামিক ফর্ক করা হয়।

এইসব কনফিগারেশন পরিবর্তনের পাশাপাশি, Android 6.0-এ অ্যাডপ্টেবেল স্টোরেজের ধারণা অন্তর্ভুক্ত করা হয়েছে। Android 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.
  • dm-crypt ব্যবহার করে এনক্রিপ্ট করা এবং কার্নেলের ক্ষমতা অনুযায়ী ext4 বা f2fs ব্যবহার করে ফর্ম্যাট করা একটি বড় android_ext পার্টিশন। পার্টিশন টাইপ 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 ব্যবহার করে এবং ফাইল সিস্টেম কাজ না করলে ব্যবহারকারী মিডিয়া ফর্ম্যাট করার বিকল্প বেছে নিতে পারেন।