تتم إدارة وحدة التخزين الخارجية من خلال ضبط إعدادات 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
.)
- يمكن أن يواصل المطوّرون إنشاء المسارات ديناميكيًا أو ثابتًا استنادًا إلى
وحالة استخدامها. يؤدي تضمين المعرّف الفريد العالمي (UUID) في المسار إلى تحديد كل بطاقة لإنشاء
أكثر وضوحًا للمطورين. (على سبيل المثال، من الواضح أنّ الملف
- تمت إزالة خدمات 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
لرصد أنواع أنظمة الملفات قبل التثبيت، ويمكن للمستخدمين اختيار تنسيق
الوسائط عندما يكون نظام الملفات غير متوافق.