Konfigurasi perangkat

Penyimpanan eksternal dikelola oleh kombinasi layanan vold init dan layanan sistem StorageManagerService . Pemasangan volume penyimpanan eksternal fisik ditangani oleh vold , yang melakukan operasi pementasan untuk mempersiapkan media sebelum memaparkannya ke aplikasi.

Catatan: Di Android 8.0, kelas MountService diubah namanya menjadi StorageManagerService .

Pemetaan file

Untuk Android 4.2.2 dan yang lebih lama, file konfigurasi vold.fstab khusus perangkat mendefinisikan pemetaan dari perangkat sysfs ke titik pemasangan sistem file, dan setiap baris mengikuti format ini:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label : Label untuk volume.
  • mount_point : Jalur sistem file tempat volume harus dipasang.
  • partition : Nomor partisi (berbasis 1), atau 'otomatis' untuk partisi pertama yang dapat digunakan.
  • sysfs_path : Satu atau lebih jalur sysfs ke perangkat yang dapat menyediakan titik pemasangan ini. Dipisahkan dengan spasi, dan masing-masing harus dimulai dengan / .
  • flags : Daftar flag opsional yang dipisahkan koma, tidak boleh mengandung / . Nilai yang mungkin mencakup nonremovable dan encryptable .

Untuk Android rilis 4.3 dan yang lebih baru, berbagai file fstab yang digunakan oleh init, vold, dan recovery disatukan dalam file /fstab.<device> . Untuk volume penyimpanan eksternal yang dikelola oleh vold , entri harus memiliki format berikut:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src : Jalur di bawah sysfs (biasanya dipasang di /sys) ke perangkat yang dapat menyediakan titik pemasangan. Jalurnya harus dimulai dengan / .
  • mount_point : Jalur sistem file tempat volume harus dipasang.
  • type : Jenis sistem file pada volume. Untuk kartu eksternal biasanya vfat .
  • mnt_flags : Vold mengabaikan kolom ini dan harus disetel ke defaults
  • fs_mgr_flags : Vold mengabaikan baris apa pun di fstab terpadu yang tidak menyertakan tanda voldmanaged= di bidang ini. Bendera ini harus diikuti dengan label yang menjelaskan kartu tersebut, dan nomor partisi atau kata auto . Berikut ini contohnya: voldmanaged=sdcard:auto . Tanda lain yang mungkin adalah nonremovable , encryptable=sdcard , noemulatedsd , dan encryptable=userdata .

Detail konfigurasi

Interaksi penyimpanan eksternal pada dan di atas tingkat kerangka kerja ditangani melalui StorageManagerService . Karena perubahan konfigurasi di Android 6.0 (seperti penghapusan hamparan sumber daya storage_list.xml), detail konfigurasi dibagi menjadi dua kategori.

Android 5.x dan versi lebih lama

File konfigurasi storage_list.xml khusus perangkat, biasanya disediakan melalui overlay frameworks/base , mendefinisikan atribut dan batasan perangkat penyimpanan. Elemen <StorageList> berisi satu atau lebih elemen <storage> , salah satunya harus ditandai sebagai primer. Atribut <storage> meliputi:

  • mountPoint : jalur sistem file dari mount ini.
  • storageDescription : sumber daya string yang menjelaskan pemasangan ini.
  • primary : benar jika pemasangan ini adalah penyimpanan eksternal utama.
  • removable : benar jika dudukan ini memiliki media yang dapat dipindahkan, seperti kartu SD fisik.
  • emulated : benar jika mount ini ditiru dan didukung oleh penyimpanan internal, kemungkinan menggunakan daemon FUSE.
  • mtp-reserve : jumlah MB penyimpanan yang harus dicadangkan MTP untuk penyimpanan gratis. Hanya digunakan ketika mount ditandai sebagai ditiru.
  • allowMassStorage : benar jika mount ini dapat dibagikan melalui penyimpanan massal USB.
  • maxFileSize : ukuran file maksimum dalam MB.

Perangkat dapat menyediakan penyimpanan eksternal dengan meniru sistem file yang tidak peka huruf besar-kecil dan tidak memiliki izin yang didukung oleh penyimpanan internal. Salah satu kemungkinan implementasi disediakan oleh daemon FUSE di system/core/sdcard , yang dapat ditambahkan sebagai layanan init.rc khusus perangkat:

# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023
    class late_start

Dimana source_path adalah penyimpanan internal pendukung dan dest_path adalah titik pemasangan target.

Saat mengonfigurasi skrip init.rc khusus perangkat, variabel lingkungan EXTERNAL_STORAGE harus ditentukan sebagai jalur ke penyimpanan eksternal utama. Jalur /sdcard juga harus mengarah ke lokasi yang sama, mungkin melalui symlink. Jika perangkat menyesuaikan lokasi penyimpanan eksternal di antara pembaruan platform, symlink harus dibuat agar jalur lama tetap berfungsi.

Android 6.0

Konfigurasi subsistem penyimpanan kini terkonsentrasi pada file fstab khusus perangkat, dan beberapa file/variabel konfigurasi statis historis telah dihapus untuk mendukung perilaku yang lebih dinamis:

  • Hamparan sumber daya storage_list.xml telah dihapus dan tidak lagi digunakan oleh kerangka kerja. Perangkat penyimpanan sekarang dikonfigurasi secara dinamis ketika terdeteksi oleh vold .
  • Variabel lingkungan EMULATED_STORAGE_SOURCE/TARGET telah dihapus dan tidak lagi digunakan oleh Zygote untuk mengonfigurasi titik pemasangan khusus pengguna. Sebaliknya, pemisahan pengguna kini diterapkan dengan GID khusus pengguna, dan penyimpanan bersama utama dipasang secara vold saat runtime.
    • Pengembang dapat terus membangun jalur secara dinamis atau statis bergantung pada kasus penggunaannya. Menyertakan UUID di jalur mengidentifikasi setiap kartu untuk memperjelas lokasi bagi pengembang. (Misalnya, /storage/ABCD-1234/report.txt jelas merupakan file yang berbeda dari /storage/DCBA-4321/report.txt .)
  • Layanan FUSE yang dikodekan secara keras telah dihapus dari file init.rc khusus perangkat dan sebagai gantinya di-fork secara dinamis dari vold bila diperlukan.

Selain perubahan konfigurasi ini, Android 6.0 menyertakan gagasan penyimpanan yang dapat diadopsi. Untuk perangkat Android 6.0, media fisik apa pun yang tidak diadopsi dianggap portabel.

Penyimpanan yang dapat diadopsi

Untuk menunjukkan perangkat penyimpanan yang dapat diadopsi di fstab , gunakan atribut encryptable=userdata di bidang fs_mgr_flags . Berikut definisi umumnya:

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

Ketika perangkat penyimpanan diadopsi, platform menghapus konten dan menulis tabel partisi GUID yang mendefinisikan dua partisi:

  • partisi android_meta kosong kecil yang dicadangkan untuk penggunaan di masa mendatang. GUID tipe partisi adalah 19A710A2-B3CA-11E4-B026-10604B889DCF.
  • partisi android_ext besar yang dienkripsi menggunakan dm-crypt dan diformat menggunakan ext4 atau f2fs bergantung pada kemampuan kernel. GUID tipe partisi adalah 193D1EA4-B3CA-11E4-B075-10604B889DCF.

Penyimpanan portabel

Di fstab , perangkat penyimpanan dengan atribut voldmanaged dianggap portabel secara default kecuali atribut lain seperti encryptable=userdata ditentukan. Misalnya, berikut definisi umum untuk perangkat USB OTG:

/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
                                                    voldmanaged=usb:auto

Platform ini menggunakan blkid untuk mendeteksi jenis sistem file sebelum pemasangan, dan pengguna dapat memilih untuk memformat media ketika sistem file tidak didukung.