Harici depolama alanı, vold
init hizmeti ve StorageManagerService
sistem hizmetinin bir kombinasyonu tarafından yönetilir. Fiziksel harici depolama birimleri, vold
tarafından monte edilir. vold
, medyayı uygulamalara göstermeden önce hazırlamak için hazırlama işlemleri gerçekleştirir.
Not: Android 8.0'de MountService
sınıfı StorageManagerService
olarak yeniden adlandırıldı.
Dosya eşlemeleri
Android 4.2.2 ve önceki sürümlerde cihaza özgü vold.fstab
yapılandırma dosyası, sysfs cihazlarından dosya sistemi bağlama noktalarına yapılan eşlemeleri tanımlar ve her satır şu biçimi izler:
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
label
: Ses seviyesi etiketi.mount_point
: Birimin monte edilmesi gereken dosya sistemi yolu.partition
: Bölüm numarası (1 tabanlı) veya ilk kullanılabilir bölüm için "auto".sysfs_path
: Bu bağlama noktasını sağlayabilecek cihazlara giden bir veya daha fazla sysfs yolu. Boşluklarla ayrılır ve her biri/
ile başlamalıdır.flags
: İsteğe bağlı, virgülle ayrılmış işaret listesi./
içermemelidir. Olası değerlernonremovable
veencryptable
'dur.
Android 4.3 ve sonraki sürümlerde init, vold ve recovery tarafından kullanılan çeşitli fstab dosyaları /fstab.<device>
dosyasında birleştirildi. vold
tarafından yönetilen harici depolama birimleri için girişler aşağıdaki biçimde olmalıdır:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
src
: sysfs altındaki (genellikle /sys'e monte edilmiş) ve ekleme noktasını sağlayabilecek cihaza giden bir yol. Yol/
ile başlamalıdır.mount_point
: Birimin monte edilmesi gereken dosya sistemi yolu.type
: Birimdeki dosya sisteminin türü. Harici kartlar için bu genelliklevfat
olur.mnt_flags
:Vold
bu alanı yoksayar vedefaults
olarak ayarlanmalıdırfs_mgr_flags
:Vold
, birleşik fstab'da bu alandavoldmanaged=
işaretini içermeyen tüm satırları yoksayar. Bu işaretin ardından kartı açıklayan bir etiket ve bir bölüm numarası veyaauto
kelimesi gelmelidir. Örnek:voldmanaged=sdcard:auto
. Olası diğer işaretlernonremovable
,encryptable=sdcard
,noemulatedsd
veencryptable=userdata
'dır.
Yapılandırma ayrıntıları
Çerçeve düzeyinde ve üstündeki harici depolama etkileşimleri StorageManagerService
üzerinden yönetilir. Android 6.0'taki yapılandırma değişiklikleri (ör. storage_list.xml kaynak yer paylaşımının kaldırılması) nedeniyle yapılandırma ayrıntıları iki kategoriye ayrılmıştır.
Android 5.x ve önceki sürümler
Genellikle bir frameworks/base
yer paylaşımı aracılığıyla sağlanan cihaza özel storage_list.xml
yapılandırma dosyası, depolama cihazlarının özelliklerini ve kısıtlamalarını tanımlar. <StorageList>
öğesi bir veya daha fazla <storage>
öğesi içerir. Bunlardan tam olarak biri birincil olarak işaretlenmelidir. <storage>
özelliklerine aşağıdakiler dahildir:
mountPoint
: Bu bağlamanın dosya sistemi yolu.storageDescription
: Bu bağlamayı açıklayan dize kaynağı.primary
: Bu bağlama noktası birincil harici depolama birimiyse doğru değerini döndürür.removable
: Bu montajda fiziksel SD kart gibi çıkarılabilir medya varsa doğru değerini döndürür.emulated
: Bu bağlama işlemi taklit ediliyorsa ve muhtemelen bir FUSE hizmet programı kullanılarak dahili depolama alanı tarafından destekleniyorsa doğru değerini döndürür.mtp-reserve
: MTP'nin ücretsiz depolama alanı için ayırması gereken MB cinsinden depolama alanı miktarı. Yalnızca bağlama noktası taklit olarak işaretlendiğinde kullanılır.allowMassStorage
: Bu montaj USB toplu depolama alanı üzerinden paylaşılabiliyorsa doğru değerini döndürür.maxFileSize
: MB cinsinden maksimum dosya boyutu.
Cihazlar, dahili depolama alanıyla desteklenen, büyük/küçük harf duyarlı olmayan, izinsiz bir dosya sistemini taklit ederek harici depolama alanı sağlayabilir. Olası bir uygulama, system/core/sdcard
'teki FUSE daemon'u tarafından sağlanır. Bu daemon, cihaza özel bir init.rc
hizmeti olarak eklenebilir:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
Burada source_path
, yedekleme için kullanılan dahili depolama alanı, dest_path
ise hedef bağlama noktasıdır.
Cihaza özgü bir init.rc
komut dosyası yapılandırırken EXTERNAL_STORAGE
ortam değişkeni, birincil harici depolama biriminin yolu olarak tanımlanmalıdır. /sdcard
yolu da muhtemelen bir sembolik bağlantı üzerinden aynı konuma yönlendirmelidir. Bir cihaz, platform güncellemeleri arasında harici depolama yerini ayarlarsa eski yolların çalışmaya devam etmesi için sembolik bağlantılar oluşturulmalıdır.
Android 6.0
Depolama alt sisteminin yapılandırması artık cihaza özgü fstab
dosyasında toplanmıştır ve daha dinamik davranışı desteklemek için geçmişteki bazı statik yapılandırma dosyaları/değişkenleri kaldırılmıştır:
storage_list.xml
kaynak yer paylaşımı kaldırıldı ve artık çerçeve tarafından kullanılmıyor. Depolama cihazları artıkvold
tarafından algılandığında dinamik olarak yapılandırılıyor.EMULATED_STORAGE_SOURCE/TARGET
ortam değişkenleri kaldırıldı ve artık kullanıcıya özel bağlama noktalarını yapılandırmak için Zygote tarafından kullanılmıyor. Bunun yerine, kullanıcı ayırma işlemi artık kullanıcıya özel GID'lerle zorunlu kılınıyor ve birincil ortak depolama alanı, çalışma zamanındavold
tarafından yerine monte ediliyor.- Geliştiriciler, kullanım alanlarına bağlı olarak yolları dinamik veya statik olarak oluşturmaya devam edebilir. UUID'nin yola eklenmesi, geliştiriciler için konumu daha net hale getirmek amacıyla her kartı tanımlar. (Örneğin,
/storage/ABCD-1234/report.txt
,/storage/DCBA-4321/report.txt
'ten farklı bir dosyadır.)
- Geliştiriciler, kullanım alanlarına bağlı olarak yolları dinamik veya statik olarak oluşturmaya devam edebilir. UUID'nin yola eklenmesi, geliştiriciler için konumu daha net hale getirmek amacıyla her kartı tanımlar. (Örneğin,
- Sabit kodlu FUSE hizmetleri, cihaza özgü
init.rc
dosyalarından kaldırıldı ve gerektiğindevold
dosyasından dinamik olarak ayrıldı.
Android 6.0, bu yapılandırma değişikliklerine ek olarak, benimsenebilir depolama alanı kavramını da içerir. Android 6.0 cihazlarda, benimsenmeyen fiziksel medyalar taşınabilir olarak kabul edilir.
Dahili hale getirilebilir depolama alanı
fstab
içinde benimsenebilir bir depolama cihazını belirtmek için fs_mgr_flags
alanında encryptable=userdata
özelliğini kullanın. Aşağıda tipik bir tanım verilmiştir:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
Bir depolama cihazı kabul edildiğinde platform, içeriği siler ve iki bölümü tanımlayan bir GUID bölüm tablosu yazar:
- Gelecekte kullanılmak üzere ayrılmış küçük bir boş
android_meta
bölümü. Bölme türü GUID'si 19A710A2-B3CA-11E4-B026-10604B889DCF'dir. - dm-crypt kullanılarak şifrelenmiş ve çekirdek özelliklerine bağlı olarak
ext4
veyaf2fs
kullanılarak biçimlendirilmiş büyük birandroid_ext
bölümü. Bölüm türü GUID'si 193D1EA4-B3CA-11E4-B075-10604B889DCF.
Taşınabilir depolama birimi
fstab
içinde, encryptable=userdata
gibi başka bir özellik tanımlanmadığı sürece voldmanaged
özelliğine sahip depolama cihazlarının varsayılan olarak taşınabilir olduğu kabul edilir. Örneğin, USB OTG cihazlar için tipik bir tanım aşağıda verilmiştir:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
Platform, bağlamadan önce dosya sistemi türlerini algılamak için blkid
kullanır. Kullanıcılar, dosya sistemi desteklenmediğinde medyayı biçimlendirmeyi seçebilir.