การจัดเก็บที่นำมาใช้

Android รองรับอุปกรณ์เสริมที่จัดเก็บข้อมูลภายนอก (เช่น การ์ด SD) มาโดยตลอด แต่ในอดีตอุปกรณ์เสริมเหล่านี้จำกัดอยู่เพียงพื้นที่จัดเก็บไฟล์ธรรมดา เนื่องจากความไม่ถาวรที่คาดหวังไว้และการปกป้องข้อมูลขั้นต่ำที่นำเสนอให้กับที่จัด เก็บข้อมูลภายนอกแบบเดิม Android 6.0 นำเสนอความสามารถใน การนำ สื่อจัดเก็บข้อมูลภายนอกมาทำหน้าที่เหมือนที่จัดเก็บข้อมูลภายใน

เมื่อใช้สื่อเก็บข้อมูลภายนอก สื่อนั้นจะถูกฟอร์แมตและเข้ารหัสเพื่อให้ใช้งานได้กับอุปกรณ์ Android เครื่องเดียวในแต่ละครั้ง เนื่องจากสื่อมีความเชื่อมโยงอย่างมากกับอุปกรณ์ Android ที่นำมาใช้ จึงสามารถจัดเก็บทั้งแอปและข้อมูลส่วนตัวสำหรับผู้ใช้ทุกคนได้อย่างปลอดภัย

เมื่อผู้ใช้ใส่สื่อจัดเก็บข้อมูลใหม่ (เช่น การ์ด SD) ในตำแหน่งที่นำมาใช้ได้ Android จะถามพวกเขาว่าต้องการใช้สื่ออย่างไร พวกเขาสามารถเลือกที่จะนำสื่อมาใช้ ซึ่งจัดรูปแบบและเข้ารหัส หรืออาจใช้สื่อต่อไปตามที่เป็นอยู่สำหรับการจัดเก็บไฟล์แบบธรรมดา หากพวกเขาเลือกที่จะนำมาใช้ แพลตฟอร์มจะเสนอให้ย้ายเนื้อหาที่เก็บข้อมูลที่ใช้ร่วมกันหลัก (โดยทั่วไปจะติดตั้งที่ /sdcard ) ไปยังสื่อที่เพิ่งนำมาใช้ เพื่อเพิ่มพื้นที่อันมีค่าบนที่จัดเก็บข้อมูลภายใน ต่างจากพื้นที่จัดเก็บข้อมูลแบบเดิมซึ่งจำกัดอยู่ที่ 2TB เนื่องจากใช้ MBR พื้นที่จัดเก็บข้อมูลที่ปรับใช้ได้ใช้ GPT ดังนั้นจึงมีขีดจำกัดพื้นที่จัดเก็บไฟล์ที่ ~9ZB

สามารถวางแอปบนสื่อจัดเก็บข้อมูลที่นำมาใช้เฉพาะเมื่อนักพัฒนาซอฟต์แวร์ระบุการสนับสนุนผ่านแอตทริบิวต์ android:installLocation การติดตั้งแอพที่รองรับใหม่จะถูกวางไว้บนอุปกรณ์จัดเก็บข้อมูลที่มีพื้นที่ว่างมากที่สุดโดยอัตโนมัติ และผู้ใช้สามารถย้ายแอพที่รองรับระหว่างอุปกรณ์จัดเก็บข้อมูลในแอพ การตั้งค่า แอพที่ย้ายไปยังสื่อที่นำมาใช้จะถูกจดจำในขณะที่สื่อถูกดีดออก และกลับมาอีกครั้งเมื่อใส่สื่อกลับเข้าไปใหม่

ความปลอดภัย

แพลตฟอร์มนี้จะสุ่มสร้างคีย์เข้ารหัสสำหรับอุปกรณ์แต่ละเครื่องที่นำมาใช้และจัดเก็บไว้ในที่จัดเก็บข้อมูลภายในของอุปกรณ์ Android สิ่งนี้ทำให้สื่อที่นำมาใช้มีความปลอดภัยเท่ากับที่จัดเก็บข้อมูลภายในอย่างมีประสิทธิภาพ คีย์จะเชื่อมโยงกับอุปกรณ์ที่นำมาใช้โดยอิงตาม GUID ของพาร์ติชันที่นำมาใช้

หากอุปกรณ์ได้รับการกำหนดค่าให้ใช้ การเข้ารหัสตามไฟล์ (FBE) บนที่จัดเก็บข้อมูลภายใน พื้นที่จัดเก็บข้อมูลที่ปรับใช้ได้จะใช้ทั้ง การเข้ารหัส FBE และเมตาดาต้า มิฉะนั้น พื้นที่จัดเก็บข้อมูลที่ปรับใช้ได้จะใช้ การเข้ารหัสทั้งดิสก์ (FDE)

เค้าโครงบนดิสก์ของอุปกรณ์ที่นำมาใช้จะสะท้อนพาร์ติชันข้อมูลภายในอย่างใกล้ชิด รวมถึงป้ายกำกับ SELinux ฯลฯ เมื่ออุปกรณ์ Android รองรับผู้ใช้หลายราย อุปกรณ์จัดเก็บข้อมูลที่นำมาใช้ยังรองรับผู้ใช้หลายคนที่มีระดับการแยกเดียวกันกับภายใน พื้นที่จัดเก็บ.

เนื่องจากเนื้อหาของอุปกรณ์จัดเก็บข้อมูลที่นำมาใช้นั้นเชื่อมโยงอย่างแน่นหนากับอุปกรณ์ Android ที่นำมาใช้ คีย์การเข้ารหัสจึงไม่ควรแยกออกจากอุปกรณ์หลัก ดังนั้นจึงไม่สามารถต่อเชื่อมอุปกรณ์จัดเก็บข้อมูลที่อื่นได้

หากอุปกรณ์ของคุณใช้ FBE โปรดดู เอกสาร FBE และ เอกสารการเข้ารหัสข้อมูลเมตา สำหรับวิธีกำหนดค่า FBE และการเข้ารหัสข้อมูลเมตาบนพื้นที่จัดเก็บข้อมูลที่ปรับใช้ได้

ประสิทธิภาพและความเสถียร

ควรพิจารณานำไปใช้เฉพาะสื่อจัดเก็บข้อมูลภายนอกในตำแหน่งที่มั่นคง เช่น ช่องภายในช่องใส่แบตเตอรี่หรือด้านหลังฝาครอบป้องกัน เพื่อช่วยหลีกเลี่ยงการสูญเสียข้อมูลโดยไม่ตั้งใจหรือความเสียหาย โดยเฉพาะอย่างยิ่ง อุปกรณ์ USB ที่เชื่อมต่อกับโทรศัพท์หรือแท็บเล็ตไม่ควรได้รับการพิจารณาให้นำไปใช้ ข้อยกเว้นทั่วไปประการหนึ่งคือไดรฟ์ USB ภายนอกที่เชื่อมต่อกับอุปกรณ์แบบทีวี เนื่องจากโดยทั่วไปแล้วทีวีทั้งเครื่องจะติดตั้งในตำแหน่งที่มั่นคง

เมื่อผู้ใช้ใช้อุปกรณ์จัดเก็บข้อมูลใหม่ แพลตฟอร์มจะเรียกใช้การวัดประสิทธิภาพและเปรียบเทียบประสิทธิภาพกับที่จัดเก็บข้อมูลภายใน หากอุปกรณ์ที่นำมาใช้ทำงานช้ากว่าที่จัดเก็บข้อมูลภายในอย่างมาก แพลตฟอร์มจะเตือนผู้ใช้เกี่ยวกับประสบการณ์การใช้งานที่ลดลง เกณฑ์มาตรฐานนี้มาจากพฤติกรรม I/O จริงของแอป Android ยอดนิยม ปัจจุบัน การใช้งาน AOSP จะเตือนผู้ใช้ที่เกินเกณฑ์เดียวเท่านั้น แต่ผู้ผลิตอุปกรณ์อาจปรับเปลี่ยนเพิ่มเติม เช่น การปฏิเสธการใช้งานโดยสิ้นเชิงหากการ์ดทำงานช้ามาก

อุปกรณ์ที่นำไปใช้จะต้องได้รับการฟอร์แมตด้วยระบบไฟล์ที่รองรับสิทธิ์ POSIX และแอตทริบิวต์เพิ่มเติม เช่น ext4 หรือ f2fs เพื่อประสิทธิภาพสูงสุด ขอแนะนำให้ใช้ระบบไฟล์ f2fs สำหรับอุปกรณ์จัดเก็บข้อมูลแบบแฟลช

เมื่อดำเนินการบำรุงรักษาที่ไม่ได้ใช้งานเป็นระยะ แพลตฟอร์มจะออก FI_TRIM ให้กับสื่อที่นำมาใช้ เช่นเดียวกับที่ทำกับที่จัดเก็บข้อมูลภายใน ข้อมูลจำเพาะของการ์ด SD ปัจจุบันไม่รองรับคำสั่ง DISCARD แต่เคอร์เนลจะถอยกลับไปที่คำสั่ง ERASE แทน ซึ่งเฟิร์มแวร์การ์ด SD อาจเลือกใช้เพื่อวัตถุประสงค์ในการเพิ่มประสิทธิภาพ

การทดสอบ

หากต้องการทดสอบว่าที่เก็บข้อมูลที่ปรับใช้นั้นใช้งานได้ ให้รันการทดสอบ CTS นี้:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

หากต้องการตรวจสอบพฤติกรรมของไดรฟ์ USB และการ์ด SD เมื่ออุปกรณ์ไม่มีช่องเสียบในตัวหรือเมื่อใช้ขั้วต่อ USB สำหรับการเชื่อมต่อ adb ที่ใช้งานอยู่ ให้ใช้:

adb shell sm set-virtual-disk true