Lưu trữ có thể chấp nhận

Android luôn hỗ trợ các phụ kiện lưu trữ bên ngoài (chẳng hạn như thẻ SD), nhưng trước đây, các phụ kiện này chỉ giới hạn ở phạm vi lưu trữ tệp đơn giản do tính không ổn định và khả năng bảo vệ dữ liệu tối thiểu được cung cấp cho 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 lưu trữ bên ngoài để hoạt động giống như bộ nhớ trong.

Khi sử dụng phương tiện lưu trữ bên ngoài, phương tiện lưu trữ bên ngoài sẽ được định dạng và mã hóa để chỉ hoạt động với một thiết bị Android tại một thời điểm. Vì phương tiện được liên kết chặt chẽ với thiết bị Android sử dụng nó nên phương tiện 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 lắp phương tiện lưu trữ mới (chẳng hạn như thẻ SD) vào một vị trí có thể sử dụng được, Android sẽ hỏi họ muốn sử dụng phương tiện đó như thế nào. Họ có thể chọn sử dụng phương tiện, định dạng và mã hóa nó hoặc họ có thể tiếp tục sử dụng phương tiện đó để lưu trữ tệp đơn giản. Nếu họ chọn áp 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 chấp nhận, giải phóng không gian có giá trị trên bộ nhớ trong. Không giống như bộ lưu trữ truyền thống, bị giới hạn ở 2TB do sử dụng MBR , bộ lưu trữ có thể chấp nhận sử dụng GPT và do đó có giới hạn lưu trữ tệp là ~9ZB.

Ứng dụng chỉ có thể được đặt trên phương tiện lưu trữ được chấp nhận khi nhà phát triển đã chỉ định hỗ trợ thông qua thuộc tính android:installLocation . Các bản 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 chuyển sang phương tiện được sử dụng sẽ được ghi nhớ trong khi phương tiện được đẩy ra và quay trở lại khi phương tiện được lắp lại.

Bảo vệ

Nền tảng này tạo ngẫu nhiên các khóa mã hóa cho từng thiết bị được sử dụng và lưu trữ chúng trên bộ nhớ trong của thiết bị Android. Điều này làm cho phương tiện được chấp nhận trở nên an toàn một cách hiệu quả như bộ nhớ trong. Các khóa đượ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ã hóa dựa trên tệp (FBE) trên bộ nhớ trong thì bộ nhớ có thể sử dụng sẽ sử dụng cả FBE và mã hóa siêu dữ liệu . Mặt khác, bộ lưu trữ có thể chấp nhận sẽ sử dụng mã hóa toàn bộ đĩa (FDE).

Bố cục trên đĩa của thiết bị được chấp nhận phản ánh chặt chẽ phân vùng dữ liệu nội bộ, bao gồm 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 chấp nhận cũng hỗ trợ nhiều người dùng với cùng mức độ cách ly như nội bộ kho.

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

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

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

Chỉ các phương tiện lưu trữ bên ngoài ở những vị trí ổn định, chẳng hạn như khe cắm bên trong ngăn chứa pin hoặc phía sau nắp bảo vệ, mới được xem xét sử dụng để giúp tránh vô tình mất hoặc hỏng dữ liệu. Đặc biệt, 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 không bao giờ được xem xét sử dụng. Một ngoại lệ phổ biến 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 điểm chuẩn và so sánh hiệu suất của thiết bị đó 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, nền tảng sẽ cảnh báo người dùng về trải nghiệm có thể bị suy giảm. Điểm chuẩn này được lấy từ hoạt động 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 vượt quá một ngưỡng duy nhất, nhưng các nhà sản xuất thiết bị có thể điều chỉnh điều này hơn nữa, chẳng hạn như từ chối hoàn toàn việc áp 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 hệ thống tệp hỗ trợ quyền POSIX và các thuộc tính mở rộng, chẳng hạn như ext4 hoặc f2fs . Để có hiệu suất tối ưu, hệ thống tệp f2fs được khuyến nghị cho các thiết bị lưu trữ dựa trên flash.

Khi thực hiện bảo trì nhàn rỗi định kỳ, nền tảng sẽ cấp FI_TRIM cho phương tiệ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 quay trở lại lệnh ERASE , phần sụn thẻ SD có thể chọn sử dụng cho mục đích tối ưu hóa.

Kiểm tra

Để kiểm tra xem bộ nhớ có thể sử dụng có đang hoạt động hay không, hãy chạy thử nghiệm CTS này:

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

Để xác minh hoạt động 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 kết nối adb đang hoạt động, hãy sử dụng:

adb shell sm set-virtual-disk true