Чому SD-карта встановлена ​​на “/ sdcard / external_sd” замість “/ sdcard” (або “/ mnt / sdcard”)?


18

Нещодавно я оновив телефон до LG Motion 4G (Android 4 ICS). Я бачу, що sdcard встановлено на /sdcard/external_sd. Я також зауважив, що це схоже на деякі новіші моделі. Програми очікують, що SDCard буде на /sdcard. Я припускаю, що виробники хочуть включити багато внутрішнього сховища, але навіщо монтувати внутрішнє сховище /sdcard? Чи не повинно це бути проти певної форми стандарту специфікації Android?


4
Щодо "стандарту специфікацій", це не повинно викликати проблем: Як ви можете прочитати в документації для розробників на зовнішньому сховищі , програми повинні визначати місцеположення / доступність за допомогою викликів API (тут: getExternalStorageState () ), не використовуючи жорстко кодовані шляхи .
Іззі

Хороший момент Іззі, але, мабуть, деякі виробники помилково перенаправляють програми у внутрішній простір через getExternalStorageDirectory (). stackoverflow.com/questions/11281010 / ...
Sepero

Так, добре - як не розробник я про це не знав. Але я бачу, що Потік дав дуже хороше пояснення - знову ж таки, з пунктами, про які я не знав ...
Іззи

Відповіді:


26

Причина - історія Android: Перше покоління Android-пристроїв мала лише невелику кількість внутрішнього сховища (близько 100-400MiB), під яке було встановлено /data.

Далі вийшли пристрої з, на той час зовнішньою, SD-картою. SD-карта була встановлена ​​під /mnt/sdcard.

Після цього на ринок вийшли пристрої з великим внутрішнім сховищем. Це сховище було розділене, оскільки воно /mnt/sdcardстало місцем для великих груп даних із програм, зображень тощо. Отже, середовище Android повинно було мати каталог /dataта /mnt/sdcardкаталог. Тому одна секція була для /data, інша для /mnt/sdcard. З цієї причини у вас може зберігатися місце для зберігання ( /dataрозділ), навіть якщо на ньому багато місця /mnt/sdcard.

Цю ситуацію покращили за допомогою Android 3.0: /dataі /mnt/sdcardтепер вказують на той самий розділ. Гарна робота Google, яка могла бути зроблена версії тому. Що також є причиною того, що app2sd більше не потрібен на Android 3.0 або новішої версії: ви переміщуватимете дані лише в тому ж обсязі.

Тепер ми підійдемо до відповіді, якщо ваше питання: Оскільки /mnt/sdcardвже встановлено на внутрішньому сховищі, зовнішня SD-карта повинна використовувати іншу точку монтажу. І ця точка монтажу Google не визначає. Це може бути

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • тощо.

Виклик API getExternalStorageDirectory()зазвичай вказує на внутрішній каталог зберігання. Така поведінка задокументована. Існують проекти з відкритим кодом, які надають інструменти для канонічного пошуку зовнішнього каталогу SD-карт.


Чи означає це, що додатки не мають "прозорого способу" визначення програми SD? Звичайно, там isExternalStorageRemovable()слід побачити, чи можна видалити "зовнішнє" сховище, плюс можна було визначити точки монтажу (за допомогою mountкоманди) та перевірити наявність прапорів кріплення тощо. Але якщо я тут не помиляюся, це все одно означає, що кожен розробник потребує щоб сам розібратися в його додатку, і для нього немає простого дзвінка API?
Izzy

Це правильно. Є бібліотеки, які я пов’язав, які намагаються додати цю функцію, але для цього немає офіційного виклику API.
Потік

Якщо і зовнішній накопичувач, і /dataрозділ об'єднані, як я можу безпечно змонтувати / відключити свою SD-карту, щоб підключити її, скажімо, до свого ПК? Мені здається, що мати окремі розділи логічно, і я не бачу, чому все це мало статися.
jadkik94

Це не зовнішня пам'ять, це, так званий, "внутрішній SD" і /dataрозділ, який об'єднується.
Потік

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Просто FYI, це НЕ вірно принаймні на одному телефоні під керуванням Android 4.0 (Pantech Burst), де /dataє 1 ГБ ext4-розділ і /mnt/sdcardє 12 ГБ FAT32-розділом.
netvope

3

Примушування зовнішнього кріплення SD далеко не /mnt/sdcardмає жодних технічних достоїнств, саме Google допомагає постачальникам обладнання в створенні точки розрізнення для телефонів з більшою кількістю внутрішньої пам'яті.

Немає жодних причин, чому програми повинні знайти спосіб знайти зовнішню карту, коли /mnt/sdcardчітко повинно було бути картка sdcard, а невизначений спосіб завантаження зовнішньої SD-картки Google - це ще не менш зручний для споживача змову зробити зовнішню SD-картку менш корисною для новіші пристрої Android. Немає жодної причини, чому/data і /mnt/sdcardдовелося об'єднувати їх у один і той же розділ на новішій версії Android, за винятком того, щоб виробник розмежував телефони з більшою внутрішньою пам’яттю від менших одиниць вартості з меншою кількістю внутрішньої пам’яті. Навіть якби злиття довелося зробити, Google міг би чітко визначити СТАНДАРТУнова точка кріплення для зовнішніх SD-карт замість того, щоб залишати її повністю розпливкою. Це повністю працює проти запобігання подальшої "сегментації" екосистеми Android за допомогою незграбної конструкції, яка допомагає виробникам розмежувати телефони більш високого класу від дешевших одиниць з меншою вбудованою пам'яттю.

Бінарні програми додатків для Android невеликі, у телефонів з 1-2 гігами внутрішньої пам’яті повинно бути набагато більше місця для сотень додатків, і всі великі дані можуть бути безпечно викладені на зовнішню SD-карту. Але потім продавці зрозуміли, що вони повинні мати спосіб розмежувати свій вищий кінцевий продукт, і заявляючи, що більш висока внутрішня пам'ять стає частиною цієї схеми, і калічить корисність зовнішньої пам’яті - інша цілісна частина, яку ця схема вимагає, щоб вона повністю працювала. менш корисний API для пошуку зовнішніх SD карт та нестандартних точок кріплення.

Отже: Ні, встановлення SD-карти в іншому місці /mnt/sdcard- це не що інше, як бізнес-стратегія продажу нових телефонів з більш високою ціною в новій версії Android, не більше того. Уявіть собі, якщо Nexus 4 8GB та Nexus 16GB можуть одночасно використовувати 64 Гб зовнішньої SD карти для додатків та медіа, чи є причина комусь придбати версію 16 Гб? Ці додаткові 8 ГБ пам'яті NAND, безумовно, не коштують різниці в ціні $ 50, якщо задіяні зовнішні SD-карти. Оскільки більшість компонентів у смартфоні майже повинні бути однаковими (оперативна пам'ять, процесор, радіо), єдиною областю, що залишилася для отримання більшої запасу прибутку, є внутрішній простір пам’яті, а отже, і дивна точка кріплення зовнішньої пам’яті.

Також кожен помічав відсутність зовнішньої підтримки SD від поточного врожаю Android-пристроїв з фірмовою маркою Google? Ця тенденція буде постійно розширюватися на пристроях Android "найвищий рівень". Зовнішня підтримка SD-карт була ключовою відмінністю для пристроїв Android, щоб здолати домінування iPhone на ринку мобільних пристроїв. Тепер, коли Android є вищою версією у грі з числами, мало необхідності в цій практиці скорочення прибутку набагато довше.

Мене не здивує Android 5.0, зовнішня підтримка SD-картки була б минулим. Оскільки, якщо програмам важко знайти зовнішні SD-картки, то більшість програм просто використовуватимуть відомі /dataта /mnt/sdcardлокації; більшість додатків використовують все більше і більше збережених даних для своєї роботи, жива стратегія розмітки продукту створюється "з повітря" "просто не монтуючи зовнішню SD-карту на /mnt/sdcard.


1
Тепер це я називаю стіною тексту . Здається, також трохи нерозумно. Будь ласка, додайте до своєї відповіді кілька абзаців. Також я не розумію, чому немає "причин для злиття /dataі /mnt/sdcard", як я чітко бачу причину: уникати фрагментації внутрішнього сховища.
Потік

1
Це, безумовно, була скандалом, Дізі, але незалежно, я ціную ваш внесок. Ура
Сеперо

І тут є ще одне: на пристроях, які розміщують xternal SD-карту всередині внутрішньої (наприклад, /sdcard/external_sdна LG P880), резервне копіювання "спільного зберігання" включає в себе і те , і створює величезний архів. Ніякого способу резервного копіювання внутрішнього SD лише за допомогою простого підходу. Що не має особливого сенсу, оскільки є набагато простіші способи резервного копіювання зовнішньої карти. Факт, який зводить мене з розуму, як я маю згаданий пристрій ...
Izzy

2

Вам слід знати (якщо вони вкорінені), ви можете зайти в /system/etc/vold.fstab і поміняти точки монтажу на / sdcard та /mnt/external_sd...., це дозволить вашій sdcard бути на / sdcard, як ви очікуєте а решта "внутрішнього сховища" буде встановлено на / mnt / external_sd або якщо ви віддаєте перевагу / sdcard / external_sd /


Це працює з деякими моделями телефонів, але не з усіма. Не працює для мого LG Motion 4G, Android 4.0.4. Thx
Sepero
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.