Cihaz yapılandırması

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.fstabyapı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ğerler nonremovable ve encryptable'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 genellikle vfat olur.
  • mnt_flags: Vold bu alanı yoksayar ve defaults olarak ayarlanmalıdır
  • fs_mgr_flags: Vold, birleşik fstab'da bu alanda voldmanaged= 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ı veya auto kelimesi gelmelidir. Örnek: voldmanaged=sdcard:auto. Olası diğer işaretler nonremovable, encryptable=sdcard, noemulatedsd ve encryptable=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ık vold 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ında vold 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.)
  • Sabit kodlu FUSE hizmetleri, cihaza özgü init.rc dosyalarından kaldırıldı ve gerektiğinde vold 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 veya f2fs kullanılarak biçimlendirilmiş büyük bir android_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.