Harici depolama, vold
init hizmeti ve StorageManagerService
sistem hizmetinin birleşimiyle yönetilir. Fiziksel harici depolama birimlerinin montajı, medyayı uygulamalara sunmadan önce hazırlamak için hazırlama işlemlerini gerçekleştiren vold
tarafından gerçekleştirilir.
Not: Android 8.0'da MountService
sınıfı, StorageManagerService
olarak yeniden adlandırıldı.
Dosya eşlemeleri
Android 4.2.2 ve öncesi için, cihaza özel vold.fstab
yapılandırma dosyası, sysfs cihazlarından dosya sistemi bağlama noktalarına eşlemeleri tanımlar ve her satır şu formatı izler:
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
-
label
: Birimin etiketi. -
mount_point
: Birimin bağlanması gereken dosya sistemi yolu. -
partition
: Bölüm numarası (1 tabanlı) veya ilk kullanılabilir bölüm için 'otomatik'. -
sysfs_path
: Bu bağlama noktasını sağlayabilecek cihazlara giden bir veya daha fazla sysfs yolu. Boşluklarla ayrılmıştır ve her biri/
ile başlamalıdır. -
flags
: İsteğe bağlı virgülle ayrılmış bayrak listesi,/
içermemelidir. Olası değerler arasındanonremovable
veencryptable
değerler bulunur.
Android 4.3 ve sonraki sürümleri için 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şlerin aşağıdaki formatta olması gerekir:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
-
src
: Bağlama noktasını sağlayabilecek aygıta giden, sysfs altında (genellikle /sys konumuna bağlanır) bir yol. Yol/
ile başlamalıdır. -
mount_point
: Birimin bağlanması gereken dosya sistemi yolu. -
type
: Birimdeki dosya sisteminin türü. Harici kartlar için bu genelliklevfat
. -
mnt_flags
:Vold
bu alanı yok sayar vedefaults
ayarlanması gerekir -
fs_mgr_flags
:Vold
, birleştirilmiş fstab'da bu alandavoldmanaged=
bayrağını içermeyen tüm satırları yok sayar. Bu bayrağın ardından kartı tanımlayan bir etiket ve bir bölüm numarası veyaauto
kelimesi gelmelidir. İşte bir örnek:voldmanaged=sdcard:auto
. Diğer olası bayraklarnonremovable
,encryptable=sdcard
,noemulatedsd
veencryptable=userdata
.
Yapılandırma ayrıntıları
Çerçeve düzeyindeki ve üzerindeki harici depolama etkileşimleri, StorageManagerService
aracılığıyla gerçekleştirilir. Android 6.0'daki yapılandırma değişiklikleri nedeniyle (storage_list.xml kaynak katmanının kaldırılması gibi), yapılandırma ayrıntıları iki kategoriye ayrılmıştır.
Android 5.x ve öncesi
Tipik olarak bir frameworks/base
katmanı aracılığıyla sağlanan cihaza özel storage_list.xml
yapılandırma dosyası, depolama cihazlarının niteliklerini ve kısıtlamalarını tanımlar. <StorageList>
öğesi bir veya daha fazla <storage>
öğesi içerir ve bunlardan tam olarak birinin birincil olarak işaretlenmesi gerekir. <storage>
özellikleri şunları içerir:
-
mountPoint
: bu montajın dosya sistemi yolu. -
storageDescription
: bu bağlamayı açıklayan dize kaynağı. -
primary
: bu montaj birincil harici depolama ise doğru. -
removable
: bu montajda fiziksel bir SD kart gibi çıkarılabilir bir ortam varsa doğru. -
emulated
: eğer bu montaj öykünülmüşse ve muhtemelen bir FUSE arka plan programı kullanılarak dahili depolama tarafından destekleniyorsa doğrudur. -
mtp-reserve
: MTP'nin ücretsiz depolama için ayırması gereken MB depolama alanı sayısı. Yalnızca montaj öykünülmüş olarak işaretlendiğinde kullanılır. -
allowMassStorage
: Bu montaj USB yığın depolama yoluyla paylaşılabiliyorsa doğrudur. -
maxFileSize
: MB cinsinden maksimum dosya boyutu.
Cihazlar, dahili depolama tarafından desteklenen, büyük/küçük harfe duyarlı olmayan, izinsiz bir dosya sistemini taklit ederek harici depolama sağlayabilir. Olası bir uygulama, cihaza özel init.rc
hizmeti olarak eklenebilen system/core/sdcard
içindeki FUSE arka plan programı tarafından sağlanır:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
source_path
, arkadaki dahili depolama alanıdır ve dest_path
ise hedef bağlama noktasıdır.
Cihaza özel bir init.rc
betiğini yapılandırırken EXTERNAL_STORAGE
ortam değişkeni, birincil harici depolamanın yolu olarak tanımlanmalıdır. /sdcard
yolu da muhtemelen bir sembolik bağlantı aracılığıyla aynı konuma çözümlenmelidir. Bir cihaz, platform güncellemeleri arasında harici depolamanın konumunu 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 aygıta özgü fstab
dosyasında yoğunlaşmıştır ve daha dinamik davranışı desteklemek için çeşitli geçmiş statik yapılandırma dosyaları/değişkenleri kaldırılmıştır:
-
storage_list.xml
kaynak kaplaması kaldırıldı ve artık çerçeve tarafından kullanılmıyor. Depolama aygıtları 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 Zygote tarafından kullanıcıya özel bağlama noktalarını yapılandırmak için kullanılmıyor. Bunun yerine, kullanıcı ayrımı artık kullanıcıya özel GID'lerle uygulanıyor ve birincil paylaşılan depolama, çalışma zamanındavold
tarafından yerine monte ediliyor.- Geliştiriciler, kullanım senaryolarına bağlı olarak dinamik veya statik olarak yollar oluşturmaya devam edebilir. UUID'nin yola dahil edilmesi, geliştiriciler için konumu daha net hale getirmek amacıyla her bir kartı tanımlar. (Örneğin,
/storage/ABCD-1234/report.txt
,/storage/DCBA-4321/report.txt
dosyasından açıkça farklı bir dosyadır.)
- Geliştiriciler, kullanım senaryolarına bağlı olarak dinamik veya statik olarak yollar oluşturmaya devam edebilir. UUID'nin yola dahil edilmesi, geliştiriciler için konumu daha net hale getirmek amacıyla her bir kartı tanımlar. (Örneğin,
- Sabit kodlu FUSE hizmetleri, cihaza özgü
init.rc
dosyalarından kaldırıldı ve bunun yerine gerektiğinde dinamik olarakvold
çatallandı.
Bu yapılandırma değişikliklerine ek olarak Android 6.0, uyarlanabilir depolama kavramını da içeriyor. Android 6.0 cihazları için benimsenmeyen herhangi bir fiziksel medya, taşınabilir olarak görülüyor.
Kabul edilebilir depolama
fstab
benimsenebilir bir depolama aygıtını belirtmek için fs_mgr_flags
alanındaki encryptable=userdata
özelliğini kullanın. İşte tipik bir tanım:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
Bir depolama aygıtı benimsendiğinde platform, içeriği siler ve iki bölümü tanımlayan bir GUID bölümleme tablosu yazar:
- ileride kullanılmak üzere ayrılmış küçük, boş bir
android_meta
bölümü. Bölüm türü GUID'si 19A710A2-B3CA-11E4-B026-10604B889DCF'dir. - dm-crypt kullanılarak şifrelenen ve çekirdek özelliklerine bağlı olarak
ext4
veyaf2fs
kullanılarak biçimlendirilen büyük birandroid_ext
bölümü. Bölüm türü GUID'si 193D1EA4-B3CA-11E4-B075-10604B889DCF'dir.
Taşınabilir depolama
fstab
, voldmanaged
özniteliğine sahip depolama aygıtları encryptable=userdata
gibi başka bir öznitelik tanımlanmadığı sürece varsayılan olarak taşınabilir olarak 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, montaj öncesinde dosya sistemi türlerini tespit etmek için blkid
kullanıyor ve kullanıcılar, dosya sistemi desteklenmediğinde medyayı biçimlendirmeyi seçebiliyor.