Bộ nhớ thích ứng

Android luôn hỗ trợ các phụ kiện bộ nhớ ngoài (chẳng hạn như thẻ SD), nhưng trước đây, các phụ kiện này chỉ được dùng để lưu trữ tệp đơn giản do tính chất tạm thời và khả năng bảo vệ dữ liệu tối thiểu của bộ nhớ ngoài truyền thống. Android 6.0 đã giới thiệu khả năng sử dụng phương tiện bộ nhớ ngoài để hoạt động như bộ nhớ trong.

Khi phương tiện bộ nhớ ngoài được sử dụng, phương tiện đó sẽ được định dạng và mã hoá để chỉ hoạt động với một thiết bị Android tại một thời điểm. Vì nội dung nghe nhìn được liên kết chặt chẽ với thiết bị Android đã sử dụng nội dung đó, nên thiết bị có thể lưu trữ an toàn cả ứng dụng và dữ liệu riêng tư cho tất cả người dùng.

Khi người dùng chèn phương tiện lưu trữ mới (chẳng hạn như thẻ SD) vào một vị trí có thể chấp nhận được, Android sẽ hỏi họ muốn sử dụng phương tiện đó như thế nào. Người dùng có thể chọn sử dụng phương tiện, định dạng và mã hoá phương tiện đó hoặc tiếp tục sử dụng phương tiện đó như hiện có để lưu trữ tệp đơn giản. Nếu người dùng chọn sử dụng, nền tảng sẽ đề xuất di chuyển nội dung bộ nhớ dùng chung chính (thường được gắn tại /sdcard) sang phương tiện mới được sử dụng, giúp giải phóng không gian có giá trị trên bộ nhớ trong. Không giống như bộ nhớ truyền thống bị giới hạn ở mức 2TB do sử dụng MBR, bộ nhớ có thể thích ứng sử dụng GPT và do đó có giới hạn lưu trữ tệp là khoảng 9ZB.

Bạn chỉ có thể đặt ứng dụng trên phương tiện bộ nhớ được chấp nhận khi nhà phát triển đã cho biết hỗ trợ thông qua thuộc tính android:installLocation. Các lượt cài đặt mới của ứng dụng được hỗ trợ sẽ tự động được đặt trên thiết bị lưu trữ có nhiều dung lượng trống nhất và người dùng có thể di chuyển các ứng dụng được hỗ trợ giữa các thiết bị lưu trữ trong ứng dụng Cài đặt. Các ứng dụng được di chuyển sang phương tiện được hỗ trợ sẽ được ghi nhớ trong khi phương tiện được đẩy ra và quay lại khi phương tiện được chèn lại.

Bảo mật

Nền tảng này tạo ngẫu nhiên khoá mã hoá cho từng thiết bị được hỗ trợ và lưu trữ các khoá đó trên bộ nhớ trong của thiết bị Android. Điều này giúp phương tiện được sử dụng trở nên an toàn như bộ nhớ trong. Các khoá được liên kết với các thiết bị được chấp nhận dựa trên GUID phân vùng được chấp nhận.

Nếu thiết bị được định cấu hình để sử dụng mã hoá dựa trên tệp (FBE) trên bộ nhớ trong, thì bộ nhớ có thể chuyển đổi sẽ sử dụng cả FBE và mã hoá siêu dữ liệu. Nếu không, bộ nhớ có thể chuyển đổi sẽ sử dụng công nghệ mã hoá toàn bộ ổ đĩa (FDE).

Bố cục trên ổ đĩa của thiết bị được sử dụng phản ánh gần như chính xác phân vùng dữ liệu nội bộ, bao gồm cả nhãn SELinux, v.v. Khi nhiều người dùng được hỗ trợ trên thiết bị Android, thiết bị lưu trữ được sử dụng cũng hỗ trợ nhiều người dùng với cùng mức độ tách biệt như bộ nhớ trong.

Vì nội dung của thiết bị lưu trữ được nhận dạng liên kết chặt chẽ với thiết bị Android đã nhận dạng thiết bị lưu trữ đó, nên không thể trích xuất khoá mã hoá từ thiết bị gốc. Do đó, bạn không thể gắn thiết bị lưu trữ ở nơi khác.

Nếu thiết bị của bạn sử dụng FBE, hãy xem tài liệu về FBEtài liệu về mã hoá siêu dữ liệu để biết cách định cấu hình FBE và mã hoá siêu dữ liệu trên bộ nhớ có thể chuyển đổi.

Hiệu suất và độ ổn định

Chỉ nên sử dụng phương tiện lưu trữ ngoài ở những vị trí ổn định, chẳng hạn như khe cắm bên trong ngăn pin hoặc phía sau nắp bảo vệ để tránh tình trạng mất hoặc hỏng dữ liệu do vô tình. Cụ thể, bạn không bao giờ nên xem xét việc sử dụng các thiết bị USB được kết nối với điện thoại hoặc máy tính bảng. Một ngoại lệ thường gặp là ổ USB ngoài được kết nối với thiết bị kiểu TV, vì toàn bộ TV thường được lắp đặt ở một vị trí ổn định.

Khi người dùng sử dụng thiết bị lưu trữ mới, nền tảng sẽ chạy phép đo điểm chuẩn và so sánh hiệu suất của thiết bị lưu trữ đó với bộ nhớ trong. Nếu thiết bị được sử dụng chậm hơn đáng kể so với bộ nhớ trong, thì nền tảng sẽ cảnh báo người dùng về việc trải nghiệm có thể bị giảm sút. Điểm chuẩn này được lấy từ hành vi I/O thực tế của các ứng dụng Android phổ biến. Hiện tại, việc triển khai AOSP sẽ chỉ cảnh báo người dùng khi vượt quá một ngưỡng duy nhất, nhưng nhà sản xuất thiết bị có thể điều chỉnh thêm, chẳng hạn như từ chối hoàn toàn việc sử dụng nếu thẻ cực kỳ chậm.

Các thiết bị được chấp nhận phải được định dạng bằng một hệ thống tệp hỗ trợ các quyền và thuộc tính mở rộng POSIX, chẳng hạn như ext4 hoặc f2fs. Để đạt được hiệu suất tối ưu, bạn nên sử dụng hệ thống tệp f2fs cho các thiết bị lưu trữ dựa trên flash.

Khi thực hiện bảo trì định kỳ khi không hoạt động, nền tảng sẽ phát hành FI_TRIM cho nội dung nghe nhìn được chấp nhận giống như đối với bộ nhớ trong. Thông số kỹ thuật thẻ SD hiện tại không hỗ trợ lệnh DISCARD; nhưng thay vào đó, hạt nhân sẽ quay lại lệnh ERASE mà phần mềm của thẻ SD có thể chọn sử dụng cho mục đích tối ưu hoá.

Thử nghiệm

Để kiểm tra xem bộ nhớ có thể mở rộng có hoạt động hay không, hãy chạy kiểm thử CTS này:

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

Để xác minh hành vi của ổ USB và thẻ SD khi thiết bị không có khe cắm tích hợp hoặc khi đầu nối USB đang được sử dụng cho một kết nối adb đang hoạt động, hãy sử dụng:

adb shell sm set-virtual-disk true