Android-এ সবসময় এক্সটার্নাল স্টোরেজ অ্যাক্সেসরি (যেমন, এসডি কার্ড) কাজ করে, কিন্তু এইসব অ্যাক্সেসরি সাধারণত শুধু ফাইল স্টোরেজের জন্যই ব্যবহার করা হয়, কারণ এগুলি স্থায়ী নয় এবং প্রথাগত এক্সটার্নাল স্টোরেজে ডেটা সুরক্ষার সুবিধা খুব কম থাকে। Android 6.0 ভার্সনে এক্সটার্নাল স্টোরেজ মিডিয়াকে ইন্টার্নাল স্টোরেজের মতো কাজ করার জন্য অ্যাডপ্ট করার সুবিধা দেওয়া হয়েছে।
এক্সটার্নাল স্টোরেজ মিডিয়া গ্রহণ করা হলে, এটি ফর্ম্যাট করা হয় এবং এনক্রিপ্ট করা হয় যাতে একবারে শুধুমাত্র একটি Android ডিভাইসে কাজ করে। যেহেতু মিডিয়াটি যে Android ডিভাইসে ব্যবহার করা হয় তার সাথে খুব শক্তভাবে যুক্ত থাকে, তাই এটি নিরাপদে সব ব্যবহারকারীর জন্য অ্যাপ ও ব্যক্তিগত ডেটা স্টোর করতে পারে।
ব্যবহারকারী নতুন স্টোরেজ মিডিয়া (যেমন, SD কার্ড) যোগ করার মতো
লোকেশন যোগ করলে, Android তাদের জিজ্ঞাসা করে যে তারা কীভাবে মিডিয়া ব্যবহার করতে চান। তারা মিডিয়া
অ্যাডপ্ট করার বিকল্প বেছে নিতে পারে, যা এটিকে ফর্ম্যাট ও এনক্রিপ্ট করে অথবা তারা এটিকে
যেমন আছে তেমন সাধারণ ফাইল স্টোরেজের জন্য ব্যবহার করা চালিয়ে যেতে পারে। তারা যদি গ্রহণ করার বিকল্প বেছে নেন, তাহলে প্ল্যাটফর্মটি প্রাইমারি শেয়ার করা স্টোরেজের কন্টেন্ট (সাধারণত
/sdcard-এ মাউন্ট করা থাকে) নতুন গ্রহণ করা মিডিয়াতে
মাইগ্রেট করার বিকল্প দেয়, এর ফলে ইন্টার্নাল স্টোরেজে মূল্যবান জায়গা খালি হয়ে যায়। প্রচলিত স্টোরেজ
MBR
ব্যবহার করার কারণে
২ টিবি পর্যন্ত সীমাবদ্ধ থাকে, তবে
অ্যাডপ্টেবল স্টোরেজ
GPT
ব্যবহার করে এবং তাই এতে ফাইল স্টোরেজ সীমা ~৯ZB পর্যন্ত থাকে।
ডেভেলপার android:installLocation অ্যাট্রিবিউটের মাধ্যমে কাজ করার কথা উল্লেখ করলে তবেই অ্যাডপ্টেড স্টোরেজ মিডিয়াতে অ্যাপ রাখা যাবে।
সাপোর্ট করে এমন অ্যাপের নতুন ইনস্টলেশন অটোমেটিক সেই স্টোরেজ ডিভাইসে প্লেস করা হয় যেখানে সবচেয়ে বেশি খালি জায়গা থাকে এবং ব্যবহারকারীরা সেটিংস অ্যাপে স্টোরেজ ডিভাইসগুলির মধ্যে সাপোর্ট করে এমন অ্যাপ
মুভ করতে পারেন। অ্যাডপ্ট করা
মিডিয়ায় মুভ করা অ্যাপ মিডিয়াটি সরিয়ে দেওয়া হলেও মনে রাখা হয়
এবং মিডিয়াটি আবার যোগ করা হলে সেগুলি ফিরে আসে।
নিরাপত্তা
প্ল্যাটফর্মটি প্রতিটি অ্যাডপ্ট করা ডিভাইসের জন্য র্যান্ডমভাবে এনক্রিপশন কী তৈরি করে এবং Android ডিভাইসের ইন্টার্নাল স্টোরেজে সেগুলি সেভ করে। এর ফলে অ্যাডপ্ট করা মিডিয়া ইন্টার্নাল স্টোরেজের মতোই সুরক্ষিত থাকে। অ্যাডপ্ট করা পার্টিশন GUID-এর উপর ভিত্তি করে অ্যাডপ্ট করা ডিভাইসের সাথে কীগুলি যুক্ত থাকে।
ডিভাইসের ইন্টার্নাল স্টোরেজে ফাইল-ভিত্তিক এনক্রিপশন (FBE) ব্যবহার করার জন্য কনফিগার করা থাকলে, অ্যাডপ্টেবেল স্টোরেজ FBE ও মেটাডেটা এনক্রিপশন, দুটিই ব্যবহার করে। অন্যথায়, অ্যাডপ্টেবেল স্টোরেজ সম্পূর্ণ ডিস্ক এনক্রিপশন (FDE) ব্যবহার করে।
অ্যাডপ্ট করা ডিভাইসের অন-ডিস্ক লেআউট ইন্টার্নাল ডেটা পার্টিশনের সাথে খুব মিল থাকে, এর মধ্যে SELinux লেবেল ইত্যাদি অন্তর্ভুক্ত। Android ডিভাইসে একাধিক ব্যবহারকারীকে সাপোর্ট করলে, অ্যাডপ্ট করা স্টোরেজ ডিভাইসও ইন্টার্নাল স্টোরেজের মতো একই লেভেলের আইসোলেশন সহ একাধিক ব্যবহারকারীকে সাপোর্ট করে।
যেহেতু অ্যাডপ্ট করা স্টোরেজ ডিভাইসের কন্টেন্ট, এটি অ্যাডপ্ট করা Android ডিভাইসের সাথে দৃঢ়ভাবে যুক্ত থাকে, তাই এনক্রিপশন কী পেরেন্ট ডিভাইস থেকে এক্সট্র্যাক্ট করা যাবে না এবং সেই কারণে স্টোরেজ ডিভাইস অন্য কোথাও মাউন্ট করা যাবে না।
আপনার ডিভাইস FBE ব্যবহার করলে, কীভাবে FBE ও মেটাডেটা এনক্রিপশন কনফিগার করতে হয় তা জানতে FBE ডকুমেন্টেশন ও মেটাডেটা এনক্রিপশন ডকুমেন্টেশন দেখুন।
পারফর্ম্যান্স ও স্টেবিলিটি
দুর্ঘটনাবশত ডেটা হারিয়ে যাওয়া বা নষ্ট হওয়া এড়াতে, শুধুমাত্র ব্যাটারি কম্পার্টমেন্টের ভিতরে বা কোনও প্রতিরক্ষামূলক কভারের পিছনে থাকা স্লটের মতো স্থিতিশীল লোকেশনে থাকা এক্সটার্নাল স্টোরেজ মিডিয়াকে অ্যাডপ্ট করার জন্য বিবেচনা করা উচিত। বিশেষ করে, ফোন বা ট্যাবলেটের সাথে কানেক্ট করা USB ডিভাইস কখনই অ্যাডপ্ট করার জন্য বিবেচনা করা উচিত নয়। একটি সাধারণ ব্যতিক্রম হল টিভি-স্টাইল ডিভাইসের সাথে কানেক্ট করা এক্সটার্নাল USB ড্রাইভ, কারণ সাধারণত পুরো টিভিটি একটি নির্দিষ্ট জায়গায় ইনস্টল করা থাকে।
কোনও ব্যবহারকারী নতুন স্টোরেজ ডিভাইস ব্যবহার করা শুরু করলে, প্ল্যাটফর্ম একটি বেঞ্চমার্ক রান করে এবং ইন্টার্নাল স্টোরেজের সাথে এর পারফর্ম্যান্স তুলনা করে। অ্যাডপ্ট করা ডিভাইস ইন্টার্নাল স্টোরেজের চেয়ে অনেক ধীরগতির হলে, প্ল্যাটফর্ম ব্যবহারকারীকে সম্ভাব্য খারাপ অভিজ্ঞতা সম্পর্কে সতর্ক করে। এই বেঞ্চমার্কটি জনপ্রিয় Android অ্যাপের প্রকৃত I/O আচরণ থেকে নেওয়া হয়েছে। বর্তমানে, AOSP ইমপ্লিমেন্টেশন শুধুমাত্র একটি থ্রেশহোল্ডের বাইরে গেলে ব্যবহারকারীদের সতর্ক করবে, তবে ডিভাইস প্রস্তুতকারকরা এটি আরও অ্যাডাপ্ট করতে পারে, যেমন কার্ডটি অত্যন্ত ধীরগতির হলে সম্পূর্ণভাবে অ্যাডাপ্ট করা প্রত্যাখ্যান করা।
POSIX
অনুমতি ও এক্সটেন্ডেড অ্যাট্রিবিউট কাজ করে এমন ফাইলসিস্টেম দিয়ে অ্যাডপ্ট করা ডিভাইস ফর্ম্যাট করতে হবে, যেমন ext4 বা
f2fs। অপ্টিমাল পারফর্ম্যান্সের জন্য, ফ্ল্যাশ-ভিত্তিক স্টোরেজ ডিভাইসে f2fs ফাইলসিস্টেম ব্যবহার করার
সাজেস্ট করা হয়।
পর্যায়ক্রমিক নিষ্ক্রিয় রক্ষণাবেক্ষণ করার সময়, প্ল্যাটফর্ম ইন্টার্নাল স্টোরেজের মতো অ্যাডপ্ট করা মিডিয়াকেও
FI_TRIM ইস্যু করে।
বর্তমান এসডি কার্ডের স্পেসিফিকেশন DISCARD
কমান্ডকে সাপোর্ট করে না; কিন্তু কার্নেল এর পরিবর্তে ERASE কমান্ডে ফিরে আসে,
যা এসডি কার্ড ফার্মওয়্যার অপ্টিমাইজেশনের উদ্দেশ্যে ব্যবহার করার জন্য বেছে নিতে পারে।
পরীক্ষা করা
অ্যাডপ্টেবেল স্টোরেজ কাজ করছে কিনা তা পরীক্ষা করতে, এই CTS টেস্ট রান করুন:
cts-tradefed run commandAndExit cts-dev \
-m CtsAppSecurityHostTestCases \
-t android.appsecurity.cts.AdoptableHostTestকোনও ডিভাইসে বিল্ট-ইন স্লট না থাকলে অথবা অ্যাক্টিভ adb কানেকশনের জন্য USB কানেক্টর ব্যবহার করা হলে, USB ড্রাইভ ও SD কার্ডের আচরণ যাচাই করতে, এগুলি ব্যবহার করুন:
adb shell sm set-virtual-disk true