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 những phụ kiện này trước đây chỉ giới hạn ở việc lưu trữ tệp đơn giản, do tính vô thường dự kiến ​​của chúng 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 phương tiện lưu trữ bên ngoài được sử dụng, nó sẽ được định dạng và mã hóa để chỉ hoạt động với một thiết bị Android duy nhất tại một thời điểm. Bởi vì phương tiện được liên kết chặt chẽ với thiết bị Android đã sử dụng nó, 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, 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 nó để lưu trữ tệp đơn giản. Nếu họ chọn áp dụng, nền tảng sẽ đề nghị di chuyển nội dung lưu trữ chia sẻ 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ộ nhớ truyền thống, bị giới hạn ở 2TB do sử dụng MBR , bộ nhớ 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 lượt cài đặt mới của các ứng dụng được hỗ trợ sẽ tự động được đặt trên thiết bị lưu trữ có dung lượng trống nhiều 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 có hiệu quả làm cho phương tiện được sử dụng an toàn như bộ nhớ trong. Các khóa được liên kết với các thiết bị được thông qua 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ể chấp nhận sử dụng cả FBE và mã hóa siêu dữ liệu . Nếu không, bộ nhớ có thể chấp nhận sử dụng mã hóa toàn đĩa (FDE).

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

Vì nội dung của thiết bị lưu trữ được sử dụng được gắn chặt với thiết bị Android đã sử dụng thiết bị đó, các khóa mã hóa sẽ không thể giải nén được từ thiết bị mẹ và do đó 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 FBE và tà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ỉ 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 mất mát hoặc hỏng dữ liệu ngẫu nhiên. Đặ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 sẽ là ổ USB bên 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 một điểm chuẩn và so sánh hiệu suất của nó 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ị xuống cấp. Đ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 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 thông qua 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ì không hoạt động định kỳ, nền tảng FI_TRIM cho phương tiện được sử dụng giống như đối với bộ nhớ trong. Đặc điểm kỹ thuật thẻ SD hiện tại không hỗ trợ lệnh DISCARD ; nhưng hạt nhân thay vào đó rơi trở lại lệnh ERASE , mà phần sụn thẻ SD có thể chọn để sử dụng cho mục đích tối ưu hóa.

Thử nghiệm

Để kiểm tra xem bộ nhớ có thể sử dụng có hoạt động hay không, hãy chạy bài kiểm tra 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