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 staging untuk menyiapkan 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 beberapa jalur sysfs ke perangkat yang dapat menyediakan titik pemasangan ini. Dipisahkan dengan spasi, dan masing-masing harus diawali dengan / .
  • flags : Daftar bendera opsional yang dipisahkan koma, tidak boleh berisi / . Nilai yang mungkin termasuk nonremovable dan dapat encryptable .

Untuk rilis Android 4.3 dan yang lebih baru, berbagai file fstab yang digunakan oleh init, vold, dan pemulihan 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. Jalur harus dimulai dengan / .
  • mount_point : Jalur sistem file tempat volume harus dipasang.
  • type : Jenis sistem file pada volume. Untuk kartu eksternal, ini biasanya vfat .
  • mnt_flags : Vold mengabaikan bidang ini dan harus disetel ke defaults
  • fs_mgr_flags : Vold mengabaikan baris apa pun di fstab terpadu yang tidak menyertakan bendera voldmanaged= di bidang ini. Bendera ini harus diikuti dengan label yang menjelaskan kartu, 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 sebelumnya

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 utama. Atribut <storage> meliputi:

  • mountPoint : jalur sistem file dari mount ini.
  • storageDescription : sumber daya string yang menjelaskan mount ini.
  • primary : true jika mount ini adalah penyimpanan eksternal utama.
  • removable : benar jika mount ini memiliki media removable, seperti kartu SD fisik.
  • emulated : true jika mount ini diemulasi dan didukung oleh penyimpanan internal, mungkin menggunakan daemon FUSE.
  • mtp-reserve : jumlah MB penyimpanan yang harus disediakan 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 case-insensitive dan tanpa izin yang didukung oleh penyimpanan internal. 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

Di mana 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 diselesaikan ke lokasi yang sama, mungkin melalui symlink. Jika perangkat menyesuaikan lokasi penyimpanan eksternal di antara pembaruan platform, symlink harus dibuat agar jalur lama terus berfungsi.

Android 6.0

Konfigurasi subsistem penyimpanan sekarang terkonsentrasi di 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. Sebagai gantinya, pemisahan pengguna sekarang diberlakukan dengan GID khusus pengguna, dan penyimpanan bersama utama dipasang ke tempatnya secara vold saat runtime.
    • Pengembang dapat terus membangun jalur secara dinamis atau statis tergantung 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 hard-code telah dihapus dari file init.rc khusus perangkat dan sebagai gantinya bercabang 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 tipikal:

/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 kecil kosong 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 tergantung 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 didefinisikan. Misalnya, berikut adalah definisi umum untuk perangkat USB OTG:

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

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