Konfigurasi perangkat

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

Catatan: Di Android 8.0, Class MountService diganti namanya menjadi StorageManagerService.

Pemetaan file

Untuk Android 4.2.2 dan yang lebih lama, vold.fstab khusus perangkat file konfigurasi menentukan pemetaan dari perangkat sysfs ke pemasangan sistem file poin, 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 pemasangan ini poin. Dipisahkan oleh spasi, dan setiap harus diawali dengan /.
  • flags: Daftar tanda yang dipisahkan koma opsional, tidak boleh berisi /. Nilai yang memungkinkan mencakup nonremovable dan encryptable.

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

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src: Jalur di bawah sysfs (biasanya terpasang di /sys) ke perangkat yang dapat memberikan titik pemasangan. Jalur harus diawali 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 flag voldmanaged= di kolom ini. Tanda ini harus diikuti dengan label yang menggambarkan kartu, dan nomor partisi atau kata auto. Berikut 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 level framework ditangani sampai StorageManagerService. Karena perubahan konfigurasi di Android 6.0 (seperti penghapusan overlay sumber daya storage_list.xml), elemen detail konfigurasi dibagi menjadi dua kategori.

Android 5.x dan yang lebih lama

Konfigurasi storage_list.xml khusus perangkat , yang biasanya disediakan melalui overlay frameworks/base, menentukan atribut dan batasan perangkat penyimpanan. Elemen <StorageList> berisi satu atau beberapa elemen <storage>, tepat satu di antaranya harus ditandai utama. Atribut <storage> meliputi:

  • mountPoint: jalur sistem file pemasangan ini.
  • storageDescription: resource string yang mendeskripsikan pemasangan ini.
  • primary: true (benar) jika pemasangan ini adalah penyimpanan eksternal utama.
  • removable: benar jika pemasangan ini memiliki media yang dapat dilepas, seperti SD fisik .
  • emulated: true (benar) jika pemasangan ini diemulasikan dan didukung oleh penyimpanan internal, mungkin menggunakan {i>daemon<i} FUSE.
  • mtp-reserve: jumlah MB penyimpanan yang harus disediakan MTP secara gratis Storage. Hanya digunakan saat pemasangan ditandai sebagai diemulasikan.
  • allowMassStorage: true (benar) jika penyangga ini dapat dibagikan melalui penyimpanan massal USB.
  • maxFileSize: ukuran file maksimum dalam MB.

Perangkat dapat menyediakan penyimpanan eksternal dengan mengemulasikan perangkat yang sistem file tanpa izin yang didukung oleh penyimpanan internal. Salah satu kemungkinan 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

Dengan source_path sebagai penyimpanan internal pendukung dan dest_path adalah penyimpanan internal target direktori pemasangan.

Saat mengonfigurasi skrip init.rc khusus perangkat, EXTERNAL_STORAGE variabel lingkungan harus ditetapkan sebagai jalur ke variabel lingkungan utama Storage. Jalur /sdcard juga harus me-resolve ke lokasi yang sama, mungkin melalui symlink. Jika perangkat menyesuaikan lokasi penyimpanan eksternal antara {i>platform <i}itu, {i>symlink<i} harus dibuat agar jalur lama dapat terus berfungsi.

Android 6.0

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

  • Overlay resource storage_list.xml telah dihapus dan tidak lagi digunakan oleh framework. Perangkat penyimpanan kini dikonfigurasi secara dinamis saat terdeteksi oleh vold.
  • Variabel lingkungan EMULATED_STORAGE_SOURCE/TARGET telah dihapus dan tidak lagi digunakan oleh Zygote untuk mengkonfigurasi titik pemasangan khusus pengguna. Sebagai gantinya, pemisahan pengguna kini diterapkan dengan GID khusus pengguna, dan penyimpanan bersama utama dipasang oleh vold saat runtime.
    • Developer dapat terus membuat jalur secara dinamis atau statis bergantung pada kasus penggunaan mereka. Menyertakan UUID dalam jalur mengidentifikasi setiap kartu untuk membuat lokasi yang lebih jelas bagi pengembang. (Misalnya, /storage/ABCD-1234/report.txt jelas merupakan file yang berbeda dengan /storage/DCBA-4321/report.txt.)
  • Layanan FUSE yang di-hard code telah dihapus dari file init.rc khusus perangkat dan diambil secara dinamis dari vold jika diperlukan.

Selain perubahan konfigurasi ini, Android 6.0 menyertakan gagasan 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 kolom fs_mgr_flags. Berikut adalah definisi umumnya:

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

Ketika perangkat penyimpanan diadopsi, platform akan menghapus isi dan menulis Tabel partisi GUID yang menentukan dua partisi:

  • partisi android_meta kecil kosong yang dicadangkan untuk penggunaan pada masa mendatang. GUID jenis 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 jenis partisi adalah 193D1EA4-B3CA-11E4-B075-10604B889DCF.

Penyimpanan portabel

Di fstab, perangkat penyimpanan dengan atribut voldmanaged dianggap portabel secara default kecuali jika atribut lain seperti encryptable=userdata, sudah ditentukan. Misalnya, berikut adalah 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 dipasang, dan pengguna dapat memilih untuk memformat media saat sistem file tidak didukung.