التخزين المتاح

لطالما دعم Android ملحقات التخزين الخارجية (مثل بطاقات SD) ، ولكن هذه الملحقات كانت تقتصر تاريخيًا على تخزين الملفات البسيط ، نظرًا لعدم ثباتها المتوقع والحد الأدنى من حماية البيانات المتوفرة لوحدة التخزين الخارجية التقليدية . قدم Android 6.0 القدرة على اعتماد وسائط التخزين الخارجية للعمل مثل التخزين الداخلي.

عند اعتماد وسائط التخزين الخارجية ، يتم تنسيقها وتشفيرها لتعمل فقط مع جهاز Android واحد في كل مرة. نظرًا لأن الوسائط مرتبطة بشدة بجهاز Android الذي تبناه ، يمكنها تخزين كل من التطبيقات والبيانات الخاصة بأمان لجميع المستخدمين.

عندما يقوم المستخدمون بإدخال وسائط تخزين جديدة (مثل بطاقة SD) في موقع قابل للتبني ، يسألهم Android كيف يريدون استخدام الوسائط. يمكنهم اختيار اعتماد الوسائط ، التي تقوم بتنسيقها وتشفيرها ، أو يمكنهم الاستمرار في استخدامها كما هي لتخزين الملفات البسيطة. إذا اختاروا التبني ، فإن النظام الأساسي يعرض ترحيل محتويات التخزين المشتركة الأساسية (التي يتم تثبيتها عادةً على /sdcard ) إلى الوسائط المعتمدة حديثًا ، مما يوفر مساحة قيمة على وحدة التخزين الداخلية. على عكس التخزين التقليدي ، الذي يقتصر على 2 تيرابايت بسبب استخدامه لـ MBR ، فإن التخزين القابل للتبني يستخدم GPT وبالتالي لديه حد تخزين ملفات يصل إلى ~ 9ZB.

يمكن وضع التطبيقات على وسائط التخزين المعتمدة فقط عندما يشير المطور إلى الدعم من خلال سمة android:installLocation . يتم وضع عمليات التثبيت الجديدة للتطبيقات المدعومة تلقائيًا على جهاز التخزين الذي يحتوي على أكبر مساحة خالية ، ويمكن للمستخدمين نقل التطبيقات المدعومة بين أجهزة التخزين في تطبيق الإعدادات . يتم تذكر التطبيقات التي تم نقلها إلى الوسائط المعتمدة أثناء إخراج الوسائط ، وتعود عند إعادة إدخال الوسائط.

حماية

تقوم المنصة بإنشاء مفاتيح تشفير عشوائيًا لكل جهاز معتمد وتخزينها على وحدة التخزين الداخلية لجهاز Android. هذا يجعل الوسائط المعتمدة بشكل فعال مثل التخزين الداخلي. ترتبط المفاتيح بالأجهزة المعتمدة بناءً على القسم المعتمد GUID.

إذا تم تكوين الجهاز لاستخدام التشفير المستند إلى الملفات (FBE) على وحدة التخزين الداخلية الخاصة به ، فإن التخزين القابل للتبني يستخدم تشفير FBE وتشفير البيانات الوصفية . بخلاف ذلك ، يستخدم التخزين القابل للتبني تشفير القرص بالكامل (FDE).

يعكس التصميم على القرص للجهاز المعتمد عن كثب قسم البيانات الداخلية ، بما في ذلك ملصقات SELinux ، وما إلى ذلك. عندما يتم دعم المستخدمين المتعددين على جهاز Android ، فإن جهاز التخزين المعتمد يدعم أيضًا تعدد المستخدمين بنفس مستوى العزل الداخلي تخزين.

نظرًا لأن محتويات جهاز التخزين المعتمد مرتبطة ارتباطًا وثيقًا بجهاز Android الذي تبناه ، يجب ألا تكون مفاتيح التشفير قابلة للاستخراج من الجهاز الأصلي ، وبالتالي لا يمكن تركيب جهاز التخزين في مكان آخر.

إذا كان جهازك يستخدم FBE ، فراجع وثائق FBE ووثائق تشفير البيانات الوصفية لمعرفة كيفية تكوين FBE وتشفير البيانات الوصفية على التخزين القابل للتبني.

الأداء والاستقرار

يجب مراعاة وسائط التخزين الخارجية فقط في مواقع مستقرة ، مثل فتحة داخل حجرة البطارية أو خلف غطاء واقي ، لاعتمادها للمساعدة في تجنب فقد البيانات أو تلفها بشكل عرضي. على وجه الخصوص ، لا ينبغي أبدًا اعتبار أجهزة USB المتصلة بهاتف أو جهاز لوحي للتبني. قد يكون أحد الاستثناءات الشائعة هو محرك أقراص USB خارجي متصل بجهاز على غرار التلفزيون ، لأن التلفزيون بالكامل يتم تثبيته عادةً في موقع ثابت.

عندما يتبنى المستخدم جهاز تخزين جديدًا ، تُجري المنصة مقياسًا معياريًا ويقارن أدائها بالتخزين الداخلي. إذا كان الجهاز المعتمد أبطأ بشكل ملحوظ من التخزين الداخلي ، فإن النظام الأساسي يحذر المستخدم من احتمال حدوث تجربة متدهورة. تم اشتقاق هذا المعيار من سلوك الإدخال / الإخراج الفعلي لتطبيقات Android الشائعة. في الوقت الحالي ، سيحذر تطبيق AOSP المستخدمين بعد عتبة واحدة فقط ، لكن مصنعي الأجهزة قد يتكيفون مع هذا بشكل أكبر ، مثل رفض التبني تمامًا إذا كانت البطاقة بطيئة للغاية.

يجب تنسيق الأجهزة المعتمدة بنظام ملفات يدعم أذونات POSIX والسمات الموسعة ، مثل ext4 أو f2fs . للحصول على الأداء الأمثل ، يوصى باستخدام نظام الملفات f2fs لأجهزة التخزين المستندة إلى الفلاش.

عند إجراء صيانة دورية في وضع الخمول ، يصدر النظام الأساسي FI_TRIM المعتمدة تمامًا كما يفعل للتخزين الداخلي. لا تدعم مواصفات بطاقة SD الحالية الأمر DISCARD ؛ لكن النواة تعود بدلاً من ذلك إلى الأمر ERASE ، والذي قد تختار البرامج الثابتة لبطاقة SD استخدامه لأغراض التحسين.

اختبارات

لاختبار عمل التخزين القابل للتبني ، قم بتشغيل اختبار CTS هذا:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

للتحقق من سلوك محركات أقراص USB وبطاقات SD في حالة عدم احتواء الجهاز على فتحة مضمنة أو عند استخدام موصل USB لاتصال adb نشط ، استخدم:

adb shell sm set-virtual-disk true