إعداد الجهاز

تتم إدارة وحدة التخزين الخارجية من خلال ضبط إعدادات vold. وخدمة نظام 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 والإصدارات الأحدث، يتم استخدام ملفات fstab المختلفة بواسطة init وvold تم توحيد الاسترداد في ملف /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 من Android (مثل إزالة تراكب موارد Storage_list.xml)، يتم تقسيم تفاصيل التهيئة إلى فئتين.

الإصدار 5.x من نظام التشغيل Android والإصدارات الأقدم

إعدادات storage_list.xml الخاصة بالجهاز الذي يتم تقديمه عادةً من خلال تراكب frameworks/base، وسمات وقيود أجهزة التخزين. العنصر <StorageList> يحتوي على عنصر أو أكثر من عناصر <storage>، يجب تحديد أحدها بالضبط الأساسية. تشمل سمات <storage> ما يلي:

  • mountPoint: مسار نظام الملفات لهذا التثبيت.
  • storageDescription: مورد سلسلة يصف هذا التثبيت.
  • primary: صحيح إذا كانت قاعدة التثبيت هذه هي وحدة التخزين الخارجية الأساسية.
  • removable: صحيح إذا كانت قاعدة التثبيت هذه تحتوي على وسائط قابلة للإزالة، مثل بطاقة SD فعلية بنجاح.
  • emulated: صحيح إذا تمت محاكاة قاعدة التثبيت هذه وتم دعمها من خلال وحدة تخزين داخلية، وربما استخدام البرنامج الخفي FUSE.
  • mtp-reserve: عدد ميغابايت من مساحة التخزين التي يجب أن يحجزها بروتوكول نقل الوسائط (MTP) مجانًا مساحة التخزين. لا يُستخدَم هذا الإعداد إلا عندما يتم وضع علامة على قاعدة التثبيت على أنّها في وضع المحاكاة.
  • 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 من نظام التشغيل Android

تتمركز إعدادات النظام الفرعي للتخزين الآن في ملف fstab الخاص بالجهاز، والعديد من ملفات/متغيرات الإعداد الثابتة السابقة إزالتها لدعم السلوك الديناميكي بشكل أكبر:

  • تمت إزالة تراكب مورد storage_list.xml ولم يعُد مستخدَمًا في إطار العمل. يتم الآن ضبط أجهزة التخزين بشكل ديناميكي عندما يرصدها "vold".
  • تمت إزالة متغيرات بيئة EMULATED_STORAGE_SOURCE/TARGET ولم تعد قيد الاستخدام بواسطة Zygote تهيئة نقاط التثبيت الخاصة بالمستخدم. بدلاً من ذلك، تم الآن فرض فصل المستخدمين مع معرّفات GID الخاصة بالمستخدم، ويتم تثبيت مساحة التخزين المشتركة الأساسية في مكانها بواسطة vold في وقت التشغيل.
    • يمكن أن يواصل المطوّرون إنشاء المسارات ديناميكيًا أو ثابتًا استنادًا إلى وحالة استخدامها. يؤدي تضمين المعرّف الفريد العالمي (UUID) في المسار إلى تحديد كل بطاقة لإنشاء أكثر وضوحًا للمطورين. (على سبيل المثال، من الواضح أنّ الملف /storage/ABCD-1234/report.txt يختلف عن الملف /storage/DCBA-4321/report.txt.)
  • تمت إزالة خدمات FUSE غير القابلة للتغيير من ملفات init.rc الخاصة بالجهاز ويتم بدلاً من ذلك تقسيمها ديناميكيًا من vold عند الحاجة.

بالإضافة إلى تغييرات التهيئة هذه، يشمل Android 6.0 مفهوم وحدة تخزين قابلة للاستخدام. بالنسبة إلى أجهزة Android 6.0، أي وسائط فعلية غير والاعتماد عليها على أنها محمولة.

مساحة التخزين القابلة للاستخدام

للإشارة إلى جهاز تخزين قابل للاستخدام في fstab، استخدِم السمة encryptable=userdata في الحقل fs_mgr_flags. في ما يلي تعريف نموذجي:

/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
voldmanaged=sdcard1:auto,encryptable=userdata

عندما يتم اعتماد أحد أجهزة التخزين، تمحو النظام الأساسي المحتويات ويكتب جدول أقسام المعرف الفريد العام الذي يحدد قسمين:

  • قسم android_meta صغير وفارغ محجوز للاستخدام في المستقبل. معرف GUID لنوع القسم 19A710A2-B3CA-11E4-B026-10604B889DCF.
  • قسم android_ext كبير يتم تشفيره باستخدام تشفير dm وتنسيقه باستخدام 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 لرصد أنواع أنظمة الملفات قبل التثبيت، ويمكن للمستخدمين اختيار تنسيق الوسائط عندما يكون نظام الملفات غير متوافق.