พื้นที่เก็บข้อมูลภายนอกได้รับการจัดการโดยชุดค่าผสมของ vold
init
บริการและบริการระบบ StorageManagerService
ตัวยึดของ
วอลุ่มที่จัดเก็บข้อมูลภายนอกภายนอกจัดการโดย vold
จัดเตรียมระบบเพื่อจัดเตรียมสื่อก่อนแสดงโฆษณาในแอป
หมายเหตุ: ใน Android 8.0 เบราว์เซอร์
เปลี่ยนชื่อชั้นเรียน MountService
รายการเป็น
StorageManagerService
การแมปไฟล์
สำหรับ Android 4.2.2 และรุ่นก่อนหน้า vold.fstab
เฉพาะอุปกรณ์
ไฟล์การกำหนดค่าจะกำหนดการแมปจากอุปกรณ์ Sysfs ไปจนถึงการต่อเชื่อมระบบไฟล์
โดยแต่ละบรรทัดจะมีรูปแบบดังนี้
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
label
: ป้ายกำกับสำหรับระดับเสียงmount_point
: เส้นทางระบบไฟล์ที่ควรต่อเชื่อมวอลุ่มpartition
: หมายเลขพาร์ติชัน (อิงตาม 1) หรือ "อัตโนมัติ" สำหรับพาร์ติชันแรกที่ใช้ได้sysfs_path
: เส้นทาง Sysf อย่างน้อย 1 รายการไปยังอุปกรณ์ที่มอบตัวยึดนี้ได้ คะแนน คั่นด้วยการเว้นวรรค และแต่ละรายการต้องขึ้นต้นด้วย/
flags
: รายการ Flag ที่คั่นด้วยคอมมา (ไม่บังคับ) ต้องไม่มี/
ค่าที่เป็นไปได้ ได้แก่nonremovable
และencryptable
สำหรับ Android รุ่น 4.3 ขึ้นไป ไฟล์ fstab ต่างๆ ที่ init, vold และ
ได้รวมการกู้คืนไว้ในไฟล์ /fstab.<device>
สำหรับภายนอก
วอลุ่มพื้นที่เก็บข้อมูลที่จัดการโดย vold
รายการควรมี
รูปแบบต่อไปนี้:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
src
: เส้นทางภายใต้ sysfs (โดยปกติจะติดตั้งที่ /sys) ไปยังอุปกรณ์ที่ สามารถระบุจุดต่อเชื่อมได้ โดยเส้นทางต้องขึ้นต้นด้วย/
mount_point
: เส้นทางระบบไฟล์ที่ควรต่อเชื่อมวอลุ่มtype
: ประเภทระบบไฟล์บนวอลุ่ม สำหรับการ์ดภายนอก ราคานี้ปกติราคาvfat
mnt_flags
:Vold
ไม่ประมวลผลช่องนี้และควรตั้งค่า ไปยังdefaults
fs_mgr_flags
:Vold
ไม่ดำเนินการกับบรรทัดใดๆ ใน fstab แบบรวม ที่ไม่มีแฟล็กvoldmanaged=
ในช่องนี้ ธงนี้จะต้อง ตามด้วยป้ายกำกับที่อธิบายการ์ด และหมายเลขพาร์ติชันหรือคำauto
ตัวอย่าง:voldmanaged=sdcard:auto
แฟล็กอื่นๆ ที่เป็นไปได้คือnonremovable
encryptable=sdcard
,noemulatedsd
และencryptable=userdata
รายละเอียดการกำหนดค่า
ระบบจะจัดการการโต้ตอบกับพื้นที่เก็บข้อมูลภายนอกในระดับเฟรมเวิร์กขึ้นไป
จนถึงวันที่ StorageManagerService
เนื่องจากมีการเปลี่ยนแปลงการกําหนดค่าใน
Android 6.0 (เช่น การนำการวางซ้อนแหล่งข้อมูล Storage_list.xml ออก)
รายละเอียดการกำหนดค่าจะแบ่งออกเป็น 2 หมวดหมู่
Android 5.x และเก่ากว่า
การกำหนดค่าของ storage_list.xml
เฉพาะอุปกรณ์
ซึ่งโดยทั่วไปจะส่งผ่านการวางซ้อน frameworks/base
จะกำหนด
และข้อจำกัดของอุปกรณ์จัดเก็บข้อมูล องค์ประกอบ <StorageList>
มีองค์ประกอบ <storage>
อย่างน้อย 1 รายการ ซึ่งต้องทำเครื่องหมายอย่างน้อย 1 รายการ
เป็นอีเมลหลัก แอตทริบิวต์ <storage>
ได้แก่
mountPoint
: เส้นทางระบบไฟล์ของการต่อเชื่อมนี้storageDescription
: ทรัพยากรสตริงที่อธิบายการต่อเชื่อมนี้primary
: เป็นจริงหากการต่อเชื่อมนี้เป็นที่จัดเก็บข้อมูลภายนอกหลักremovable
: เป็นจริงหากต่อเชื่อมนี้มีสื่อแบบถอดได้ เช่น อุปกรณ์ SDemulated
: เป็นจริงหากมีการจำลองตัวยึดนี้และมีที่จัดเก็บข้อมูลภายใน อาจใช้ FUSE daemonmtp-reserve
: จำนวน MB ของพื้นที่เก็บข้อมูลที่ MTP ควรสงวนไว้ฟรี พื้นที่เก็บข้อมูล ใช้เมื่อมีการทำเครื่องหมายตัวยึดว่าจำลองเท่านั้นallowMassStorage
: เป็นจริงหากแชร์ต่อเชื่อมนี้ผ่านที่จัดเก็บข้อมูล USB ขนาดใหญ่ได้maxFileSize
: ขนาดไฟล์สูงสุดเป็น MB
อุปกรณ์อาจให้ที่จัดเก็บข้อมูลภายนอกโดยจำลองการไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ระบบไฟล์ที่ไม่ได้รับอนุญาตจากที่จัดเก็บข้อมูลภายใน เป็นไปได้ 1 อย่าง
ได้มาจาก FUSE daemon ใน system/core/sdcard
ซึ่งสามารถ
เพิ่มเป็นบริการ init.rc
เฉพาะอุปกรณ์:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
โดยที่ source_path
คือที่จัดเก็บข้อมูลภายในสำรองและ dest_path
คือ
จุดต่อเชื่อมเป้าหมาย
ในการกำหนดค่าสคริปต์ init.rc
เฉพาะอุปกรณ์ EXTERNAL_STORAGE
ต้องกําหนดตัวแปรสภาพแวดล้อมเป็นเส้นทางไปยังอุปกรณ์ภายนอกหลัก
พื้นที่เก็บข้อมูล เส้นทาง /sdcard
ต้องแก้ไขเป็นตำแหน่งเดียวกันด้วย ซึ่งอาจ
ผ่านลิงก์สัญลักษณ์ หากอุปกรณ์ปรับตำแหน่งของที่จัดเก็บข้อมูลภายนอกระหว่าง
การอัปเดตแพลตฟอร์ม ควรสร้างลิงก์สัญลักษณ์เพื่อให้เส้นทางเดิมทำงานต่อไป
Android 6.0
การกำหนดค่าระบบย่อยของพื้นที่เก็บข้อมูลจะรวมอยู่ใน
ไฟล์ fstab
เฉพาะอุปกรณ์และมีการใช้ไฟล์/ตัวแปรการกำหนดค่าแบบคงที่ย้อนหลังหลายรายการ
ถูกนำออกเพื่อรองรับลักษณะการทำงานแบบไดนามิกมากขึ้น:
- ระบบนำการวางซ้อนแหล่งข้อมูล
storage_list.xml
ออกแล้วและเฟรมเวิร์กจะไม่ใช้อีกต่อไป ตอนนี้อุปกรณ์เก็บข้อมูลจะได้รับการกำหนดค่าแบบไดนามิกเมื่อvold
ตรวจพบ - นำตัวแปรสภาพแวดล้อม
EMULATED_STORAGE_SOURCE/TARGET
ออกแล้วและ Zygote ไม่ได้ใช้ตัวแปรดังกล่าวเพื่อทำสิ่งต่อไปนี้อีกต่อไป กำหนดค่าจุดต่อเชื่อมเฉพาะผู้ใช้ แต่ตอนนี้ระบบจึงบังคับใช้การแยกผู้ใช้แทน ที่มี GID เฉพาะผู้ใช้ และvold
จะต่อเชื่อมกับพื้นที่เก็บข้อมูลหลักที่ใช้ร่วมกันขณะรันไทม์- นักพัฒนาแอปอาจสร้างเส้นทางต่อไปแบบไดนามิกหรือแบบคงที่ ขึ้นอยู่กับ
Use Case ของตน การรวม UUID ไว้ในเส้นทางจะเป็นการระบุการ์ดแต่ละรายการที่ต้องการ
ชัดเจนยิ่งขึ้นสำหรับนักพัฒนาซอฟต์แวร์ (ตัวอย่างเช่น
/storage/ABCD-1234/report.txt
เป็นไฟล์ที่แตกต่างจาก/storage/DCBA-4321/report.txt
อย่างชัดเจน)
- นักพัฒนาแอปอาจสร้างเส้นทางต่อไปแบบไดนามิกหรือแบบคงที่ ขึ้นอยู่กับ
Use Case ของตน การรวม UUID ไว้ในเส้นทางจะเป็นการระบุการ์ดแต่ละรายการที่ต้องการ
ชัดเจนยิ่งขึ้นสำหรับนักพัฒนาซอฟต์แวร์ (ตัวอย่างเช่น
- บริการ FUSE แบบฮาร์ดโค้ดถูกนำออกจากไฟล์
init.rc
เฉพาะอุปกรณ์แล้ว และจะแยกแบบไดนามิกจากvold
เมื่อจำเป็น
นอกจากการเปลี่ยนแปลงการกำหนดค่าเหล่านี้แล้ว Android 6.0 ยังมีแนวคิดเกี่ยวกับ พื้นที่เก็บข้อมูลแบบ Adable สำหรับอุปกรณ์ที่ใช้ Android 6.0 สื่อกายภาพใดๆ ที่ไม่ใช่ ที่ถูกนำไปใช้จะถือว่าพกพาได้
พื้นที่เก็บข้อมูลแบบ Adoptable
หากต้องการระบุอุปกรณ์เก็บข้อมูลแบบ Adable ใน fstab
ให้ใช้แอตทริบิวต์ encryptable=userdata
ในช่อง fs_mgr_flags
โดยคำจำกัดความโดยทั่วไปมีดังนี้
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
เมื่อมีการนำอุปกรณ์เก็บข้อมูลมาใช้ แพลตฟอร์มจะลบเนื้อหาและเขียน ตารางพาร์ติชัน GUID ที่กำหนด 2 พาร์ติชัน ได้แก่
- พาร์ติชัน
android_meta
ที่ว่างเปล่าขนาดเล็กที่สงวนไว้สำหรับการใช้งานในอนาคต GUID ประเภทพาร์ติชันคือ 19A710A2-B3CA-11E4-B026-10604B889DCF - พาร์ติชัน
android_ext
ขนาดใหญ่ที่เข้ารหัสโดยใช้ dm-crypt และจัดรูปแบบโดยใช้ext4
หรือf2fs
ทั้งนี้ขึ้นอยู่กับความสามารถของเคอร์เนล GUID ประเภทพาร์ติชันคือ 193D1EA4-B3CA-11E4-B075-10604B889DCF
ที่จัดเก็บข้อมูลแบบพกพา
ใน fstab
อุปกรณ์จัดเก็บข้อมูลที่มีแอตทริบิวต์ voldmanaged
จะถือว่าพกพาได้โดยค่าเริ่มต้น เว้นแต่จะมีแอตทริบิวต์อื่น
เช่น encryptable=userdata
ถูกกำหนด ต่อไปนี้เป็นคำจำกัดความทั่วไปสำหรับอุปกรณ์ USB OTG
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
แพลตฟอร์มจะใช้ blkid
เพื่อตรวจหาประเภทระบบไฟล์ก่อนต่อเชื่อม และผู้ใช้เลือกที่จะจัดรูปแบบได้
เมื่อระบบไม่รองรับระบบไฟล์