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 mencakupnonremovable
danencryptable
.
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, biasanyavfat
.mnt_flags
:Vold
mengabaikan kolom ini dan harus disetel kedefaults
fs_mgr_flags
:Vold
mengabaikan baris apa pun di fstab terpadu yang tidak menyertakan flagvoldmanaged=
di kolom ini. Tanda ini harus diikuti dengan label yang menggambarkan kartu, dan nomor partisi atau kataauto
. Berikut contohnya:voldmanaged=sdcard:auto
. Tanda lain yang mungkin adalahnonremovable
,encryptable=sdcard
,noemulatedsd
, danencryptable=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 olehvold
. - 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 olehvold
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
.)
- 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,
- Layanan FUSE yang di-hard code telah dihapus dari file
init.rc
khusus perangkat dan diambil secara dinamis darivold
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 menggunakanext4
atauf2fs
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.