Tại sao thẻ SD được gắn vào Thẻ / sdcard / bên ngoài_ Thay vì thay thế / Thẻ thẻ sd (hoặc Thẻ / mnt / sdcard)?


18

Gần đây tôi đã nâng cấp điện thoại của mình lên LG Motion 4G (Android 4 ICS). Tôi thấy rằng sdcard được gắn kết tại /sdcard/external_sd. Tôi cũng nhận thấy rằng điều này dường như giống với một số mô hình mới hơn. Ứng dụng mong đợi sdcard được tại /sdcard. Tôi giả sử các nhà sản xuất muốn bao gồm nhiều bộ nhớ trong, nhưng tại sao lại gắn bộ nhớ trong /sdcard? Điều này có nên chống lại một số dạng tiêu chuẩn đặc tả của Android không?


4
Đối với "tiêu chuẩn đặc tả", điều này sẽ không có vấn đề gì: Vì bạn có thể đọc tài liệu dành cho nhà phát triển trên Bộ lưu trữ ngoài , các ứng dụng sẽ xác định vị trí / khả dụng bằng cách sử dụng các lệnh gọi API (ở đây: getExternalStorageState () ), không sử dụng các đường dẫn được mã hóa cứng .
Izzy

Điểm hay Izzy, nhưng rõ ràng một số nhà sản xuất đang chuyển hướng sai các ứng dụng vào không gian bên trong thông qua getExternalStorageDirectory (). stackoverflow.com/questions/11281010/ cường
Sepero

À, điểm tốt cũng vậy - với tư cách là một người không phải là nhà phát triển, tôi không nhận thức được điều đó. Nhưng tôi thấy Flow cung cấp một lời giải thích rất tốt - một lần nữa với những điểm tôi không biết ...
Izzy

Câu trả lời:


26

Lý do là lịch sử của Android: Thế hệ thiết bị Android đầu tiên chỉ có một lượng lưu trữ nội bộ nhỏ (khoảng 100-400MiB) được gắn bên dưới /data.

Tiếp theo, các thiết bị có thẻ SD vào thời điểm đó bên ngoài xuất hiện. Thẻ SD được gắn bên dưới /mnt/sdcard.

Sau đó, các thiết bị có bộ nhớ trong lớn đã xuất hiện trên thị trường. Bộ nhớ này được chia phần, vì /mnt/sdcardđã trở thành nơi mặc định cho các khối dữ liệu lớn từ các ứng dụng, hình ảnh và những thứ khác. Vì vậy, môi trường Android phải có một thư mục /data/mnt/sdcard. Vì vậy, một phân vùng là cho /data, cái khác cho /mnt/sdcard. Đây là lý do tại sao không gian lưu trữ của bạn có thể trở nên thấp ( /dataphân vùng) ngay cả khi có nhiều không gian trên /mnt/sdcard.

Tình trạng này đã được cải thiện với Android 3.0: /data/mnt/sdcardhiện đang trỏ đến cùng một phân vùng. Google làm tốt lắm, điều đó có thể đã được thực hiện trước đây. Đó cũng là lý do tại sao app2sd không còn cần thiết trên Android 3.0 trở lên: Bạn sẽ chỉ di chuyển dữ liệu trong cùng một ổ đĩa.

Bây giờ chúng tôi đi đến câu trả lời nếu câu hỏi của bạn: Vì /mnt/sdcardđã được gắn trên bộ nhớ trong, thẻ SD bên ngoài phải sử dụng điểm gắn khác. Và điểm gắn kết này không được chỉ định bởi Google. Nó có thể là

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • v.v.

Cuộc gọi API getExternalStorageDirectory()thường trỏ đến thư mục lưu trữ nội bộ. Hành vi này được ghi lại. Có các dự án nguồn mở cung cấp các công cụ để tìm thư mục thẻ SD bên ngoài theo cách chính tắc.


Điều đó có nghĩa là không có "cách minh bạch" cho các ứng dụng để xác định thẻ SD? Tất nhiên, isExternalStorageRemovable()phải xem liệu bộ lưu trữ "bên ngoài" có thể tháo rời hay không, cộng với người ta có thể xác định các điểm gắn kết (sử dụng mountlệnh) và kiểm tra các cờ gắn kết, v.v. Nhưng nếu tôi không bị nhầm ở đây, điều này vẫn có nghĩa là mỗi nhà phát triển cần để tự mình tìm ra ứng dụng của mình và không có lệnh gọi API đơn giản nào để làm điều đó cho anh ta?
Izzy

Đúng rồi. Có những thư viện mà tôi đã liên kết cố gắng thêm tính năng đó, nhưng không có lệnh gọi API chính thức nào để làm như vậy.
Lưu lượng

Nếu cả bộ nhớ ngoài và /dataphân vùng được hợp nhất, làm thế nào tôi có thể gắn / ngắt kết nối thẻ SD của mình một cách an toàn để cắm nó vào PC của tôi? Dường như với tôi rằng việc có các phân vùng riêng biệt là hợp lý và tôi không hiểu tại sao tất cả những điều đó đã xảy ra.
jadkik94

Đây không phải là bộ nhớ ngoài, nó được gọi là "SD nội bộ" và /dataphân vùng được hợp nhất.
Lưu lượng

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Chỉ là FYI, điều đó KHÔNG đúng với ít nhất một điện thoại chạy Android 4.0 (Pantech Burst), trong đó /dataphân vùng ext4 1GB và /mnt/sdcardlà phân vùng FAT32 12GB.
netvope

3

Buộc gắn SD bên ngoài /mnt/sdcardkhông có giá trị kỹ thuật, đó là cách của Google để giúp các nhà cung cấp phần cứng tạo điểm khác biệt cho điện thoại có nhiều bộ nhớ trong hơn.

Không có lý do tại sao các ứng dụng phải tìm cách xác định vị trí của thẻ bên ngoài khi /mnt/sdcardrõ ràng là vị trí của thẻ sdcard và cách nạp thẻ SD bên ngoài không xác định của Google là một cách khác ít hơn so với âm mưu thân thiện với người tiêu dùng để làm cho thẻ SD bên ngoài trở nên ít hữu ích hơn thiết bị Android mới hơn. KHÔNG có lý do tại sao /data/mnt/sdcardphải được sáp nhập vào cùng một phân vùng trên phiên bản Android mới hơn ngoại trừ nhà sản xuất để phân biệt điện thoại có bộ nhớ trong lớn hơn với các đơn vị chi phí thấp hơn với bộ nhớ trong ít hơn. Ngay cả khi việc hợp nhất phải được thực hiện, Google vẫn có thể xác định rõ ràng TIÊU CHUẨNđiểm gắn mới cho thẻ SD bên ngoài thay vì để nó hoàn toàn mơ hồ. Điều này hoàn toàn có tác dụng chống lại việc "phân khúc" thêm hệ thống sinh thái Android bằng một thiết kế vụng về để giúp nhà cung cấp phân biệt điện thoại cao cấp hơn với các đơn vị giá rẻ hơn với bộ nhớ tích hợp ít hơn.

Các tệp nhị phân của ứng dụng Android rất nhỏ, điện thoại có 1-2 Gigs bộ nhớ trong nên có đủ dung lượng cho hàng trăm ứng dụng và tất cả dữ liệu lớn có thể được giấu an toàn trên thẻ SD bên ngoài. Nhưng sau đó, các nhà cung cấp nhận ra rằng họ phải có cách để phân biệt sản phẩm cao cấp của họ và tuyên bố bộ nhớ trong cao hơn trở thành một phần của sơ đồ đó và làm tê liệt tính hữu dụng của bộ nhớ ngoài là phần tích hợp khác mà sơ đồ này yêu cầu để nó hoạt động hoàn toàn do đó API ít hữu ích hơn để tìm thẻ sd bên ngoài và các điểm gắn không chuẩn.

Vì vậy: Không, gắn thẻ SD ở một nơi khác ngoài /mnt/sdcardchiến lược kinh doanh bán điện thoại mới có giá cao hơn trong phiên bản Android mới hơn, không có gì hơn thế. Chỉ cần tưởng tượng, nếu cả Nexus 4 8GB và Nexus 16GB đều có thể sử dụng 64GB thẻ sd ngoài cho ứng dụng và phương tiện, có lý do nào để bất cứ ai mua phiên bản 16 GB không? Bộ nhớ NAND 8 GB thêm đó chắc chắn không đáng giá 50 đô la nếu có thẻ SD bên ngoài. Vì hầu hết các thành phần trong điện thoại thông minh khá giống nhau (RAM, bộ xử lý, radio), khu vực duy nhất còn lại để có thêm lợi nhuận là không gian bộ nhớ trong và do đó là điểm gắn bộ nhớ ngoài kỳ lạ.

Ngoài ra mọi người cũng nhận thấy sự vắng mặt của hỗ trợ SD bên ngoài từ các thiết bị Android mang nhãn hiệu "Google" hiện tại? Xu hướng này sẽ tiếp tục mở rộng trong các thiết bị Android "hàng đầu". Hỗ trợ thẻ SD bên ngoài là điểm khác biệt chính cho các thiết bị Android để vượt qua sự thống trị của iPhone trên thị trường di động. Giờ đây, với sự thống trị tối cao của Android trong trò chơi số, có rất ít nhu cầu về hoạt động khai thác lợi nhuận này được duy trì lâu hơn nữa.

Tôi sẽ không ngạc nhiên với Android 5.0, hỗ trợ thẻ SD bên ngoài sẽ là quá khứ. Bởi vì nếu các ứng dụng khó tìm thấy thẻ SD bên ngoài, thì hầu hết chương trình sẽ chỉ đơn giản là sử dụng các vị trí /data/mnt/sdcardđịa điểm đã biết, với hầu hết các ứng dụng sử dụng ngày càng nhiều dữ liệu được lưu trữ cho hoạt động của nó, một chiến lược đánh dấu sản phẩm sôi động được tạo ra từ "không khí mỏng "Đơn giản bằng cách không gắn thẻ SD bên ngoài tại /mnt/sdcard.


1
Bây giờ, đó là những gì tôi gọi là một bức tường văn bản . Có vẻ cũng hơi ồ ạt. Vui lòng thêm một số đoạn vào câu trả lời của bạn. Ngoài ra tôi không hiểu tại sao "không có lý do để hợp nhất /data/mnt/sdcard", vì tôi thấy rõ một lý do: Tránh sự phân mảnh của bộ nhớ trong.
Lưu lượng

1
Đó chắc chắn là một lời ca ngợi, Deecee, nhưng bất kể, tôi đánh giá cao đầu vào của bạn. Chúc mừng
Sepero

Và còn một điều nữa: với các thiết bị đặt thẻ SD xternal bên trong thẻ bên trong (ví dụ: /sdcard/external_sdtrên LG P880), sao lưu "bộ nhớ chia sẻ" bao gồm cả hai và tạo ra một kho lưu trữ khổng lồ. Không có cách nào để sao lưu SD nội bộ chỉ trong một cách tiếp cận dễ dàng. Điều này không có ý nghĩa gì nhiều, vì có nhiều cách dễ dàng hơn để sao lưu thẻ bên ngoài. Một sự thật khiến tôi phát điên, vì tôi có thiết bị được đề cập ...
Izzy

2

Bạn nên lưu ý (nếu đã root), bạn có thể truy cập /system/etc/vold.fstab và trao đổi các điểm gắn kết cho / sdcard và /mnt/external_sd.... điều này sẽ cho phép sdcard của bạn được bật / sdcard như bạn mong đợi và "bộ nhớ trong" còn lại sẽ được gắn vào / mnt / bên ngoài_sd hoặc nếu bạn thích / sdcard / bên ngoài_sd /


Điều này hoạt động với một số mô hình điện thoại, nhưng không phải tất cả. Nó không hoạt động cho LG Motion 4G, Android 4.0.4 của tôi. Thx
Sepero
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.