Dlaczego karta SD jest zamontowana na „/ sdcard / external_sd” zamiast „/ sdcard” (lub „/ mnt / sdcard”)?

18

Niedawno zaktualizowałem swój telefon do LG Motion 4G (Android 4 ICS). Widzę, że sdcard jest zamontowany na /sdcard/external_sd. Zauważyłem również, że wydaje się, że jest tak samo z niektórymi nowszymi modelami. Aplikacje oczekują, że sdcard będzie na /sdcard. Zakładam, że producenci chcą uwzględnić dużo pamięci wewnętrznej, ale po co montować pamięć wewnętrzną /sdcard? Czy nie powinno to być sprzeczne z jakąś formą standardu specyfikacji Androida?

Sepero
źródło
4
Jeśli chodzi o „standard specyfikacji”, nie powinno to powodować żadnych problemów: jak można przeczytać w dokumentacji dla programistów dotyczącej pamięci zewnętrznej , aplikacje powinny określać lokalizację / dostępność za pomocą wywołań API (tutaj: getExternalStorageState () ), nie korzystając ze ścieżek zakodowanych na stałe .
Izzy
Dobra uwaga Izzy, ale najwyraźniej niektórzy producenci niesłusznie przekierowują aplikacje do przestrzeni wewnętrznej za pomocą getExternalStorageDirectory (). stackoverflow.com/questions/11281010/...
Sepero,
Ach, dobra racja - jako nie-programista nie zdawałem sobie z tego sprawy. Ale widzę, że Flow dostarczył bardzo dobre wytłumaczenie - ponownie z punktami, których nie byłem świadomy ...
Izzy

Odpowiedzi:

26

Powodem jest historia Androida: pierwsza generacja urządzeń z Androidem miała tylko niewielką ilość pamięci wewnętrznej (około 100-400 MB), pod którą zostało zamontowane /data.

Następnie pojawiły się urządzenia z zewnętrzną kartą SD. Karta SD została zamontowana pod /mnt/sdcard.

Następnie na rynku pojawiły się urządzenia z dużą pamięcią wewnętrzną. To miejsce zostało podzielone, ponieważ /mnt/sdcardstało się domyślnym miejscem dla dużych zbiorów danych z aplikacji, zdjęć i tym podobnych. Więc środowisko Androida musiało mieć katalog /datai /mnt/sdcard. Dlatego jedna partycja była dla /data, a druga dla /mnt/sdcard. To jest powód, dla którego ilość miejsca w pamięci może być niska ( /datapartycja), nawet jeśli jest dużo miejsca /mnt/sdcard.

Ta sytuacja została poprawiona w systemie Android 3.0: /datai /mnt/sdcardteraz wskazują na tę samą partycję. Dobra robota, Google, można było to zrobić wersje temu. To jest również powód, dla którego app2sd nie jest już potrzebny na Androidzie 3.0 lub nowszym: przenosisz dane tylko w tym samym wolumenie.

Teraz dochodzimy do odpowiedzi, jeśli twoje pytanie: Ponieważ /mnt/sdcardjest już zamontowane w pamięci wewnętrznej, zewnętrzna karta SD musi używać innego punktu montowania. Ten punkt montowania nie jest określony przez Google. Mogłoby być

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

Wywołanie API getExternalStorageDirectory()zwykle wskazuje na wewnętrzny katalog pamięci. To zachowanie jest udokumentowane. Istnieją projekty o otwartym kodzie źródłowym, które zapewniają narzędzia do znalezienia zewnętrznego katalogu karty SD w kanoniczny sposób.

Pływ
źródło
Czy to oznacza, że ​​nie ma „przejrzystego sposobu” na określenie karty SD przez aplikacje? Oczywiście isExternalStorageRemovable()trzeba sprawdzić, czy pamięć „zewnętrzna” jest wymienna, a ponadto można określić punkty instalacji (za pomocą mountpolecenia) i sprawdzić flagi instalacji itp. Ale jeśli się tu nie mylę, oznacza to, że każdy programista potrzebuje dowiedzieć się o swojej aplikacji i nie ma dla niego prostego wywołania API?
Izzy
To jest poprawne. Istnieją biblioteki, które połączyłem, które próbują dodać tę funkcję, ale nie ma oficjalnego wywołania API, aby to zrobić.
Flow
Jeśli zarówno pamięć zewnętrzna, jak i /datapartycja zostaną połączone, jak mogę bezpiecznie zamontować / odmontować kartę SD, aby podłączyć ją, powiedzmy, na komputerze? Wydaje mi się, że oddzielne partycje są logiczne i nie rozumiem, dlaczego to wszystko musiało się wydarzyć.
jadkik94,
To nie jest pamięć zewnętrzna, to tak zwane „wewnętrzne SD” i /datapartycja, która się łączy.
Flow
This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Po prostu FYI, to NIE jest prawdą na co najmniej jednym telefonie z Androidem 4.0 (Pantech Burst), gdzie /datajest partycja 1 GB ext4 i 12 GB partycja /mnt/sdcardFAT32.
netvope,
3

Wymuszanie zewnętrznego montowania SD /mnt/sdcardnie ma żadnych technicznych zalet, jest to sposób Google'a, aby pomóc producentom sprzętu stworzyć punkt różnicowania dla telefonów z większą pamięcią wewnętrzną.

Nie ma powodu, dla którego aplikacje musiałyby znaleźć sposób na zlokalizowanie karty zewnętrznej, gdy /mnt/sdcardwyraźnie było to miejsce, w którym powinna być karta SD, a niezdefiniowany sposób ładowania zewnętrznej karty SD przez Google jest kolejną mało przyjazną dla konsumenta działką, aby zewnętrzna karta SD była mniej przydatna w nowsze urządzenia z Androidem. Nie ma powodu, dlaczego /datai /mnt/sdcardmusiały być połączone w tej samej partycji na nowszej wersji Androida wyjątkiem producenta do odróżnienia telefony z większej pamięci wewnętrznej z niższych jednostek lotniczych z pamięcią mniej wewnętrznego. Nawet gdyby scalenie musiało zostać wykonane, Google mógłby jasno zdefiniować STANDARDnowy punkt montażowy dla zewnętrznych kart SD zamiast pozostawiać całkowicie niejasny. Jest to całkowicie przeciwdziałające zapobieganiu dalszej „segmentacji” ekosystemu Androida przez niezdarny projekt, który pomaga sprzedawcom odróżnić telefony wyższej klasy od tańszych jednostek o mniejszej wbudowanej pamięci.

Pliki binarne aplikacji na Androida są małe, telefony z 1-2 gigabajtami pamięci wewnętrznej powinny mieć o wiele więcej miejsca niż setki aplikacji, a wszystkie duże dane można bezpiecznie schować na zewnętrznej karcie SD. Ale potem dostawcy zdali sobie sprawę, że muszą mieć sposób na wyróżnienie swojego wyższego produktu końcowego, a twierdzenie, że wyższa pamięć wewnętrzna stała się częścią tego schematu, a paraliżująca użyteczność pamięci zewnętrznej to kolejna zintegrowana część, której ten schemat wymagał, aby działał w pełni, dlatego mniej pomocny interfejs API do wyszukiwania zewnętrznych kart SD i niestandardowych punktów montażowych.

A więc: Nie, montowanie karty SD w innym miejscu /mnt/sdcardjest niczym innym, jak strategią biznesową dotyczącą sprzedaży droższych nowych telefonów pod nowszą wersją Androida, nic więcej. Wyobraź sobie, że jeśli Nexus 4 8 GB i Nexus 16 GB mogą używać 64 GB zewnętrznej karty SD do aplikacji i multimediów, czy istnieje powód, aby ktokolwiek kupił wersję 16 GB? Te dodatkowe 8 GB pamięci NAND z pewnością nie jest warte różnicy w cenie 50 USD, jeśli w grę wchodzą zewnętrzne karty SD. Ponieważ większość elementów smartfona musi być prawie taka sama (pamięć RAM, procesor, radia), jedynym obszarem pozostałym do uzyskania większej marży zysku jest przestrzeń pamięci wewnętrznej, a tym samym dziwny punkt montowania pamięci zewnętrznej.

Czy wszyscy też zauważyli brak zewnętrznej obsługi SD w bieżącej ofercie urządzeń z Androidem marki „Google”? Trend ten będzie się rozwijał na urządzeniach z Androidem „najwyższego poziomu”. Obsługa zewnętrznych kart SD była kluczowym wyróżnikiem urządzeń z Androidem, aby wyprzedzić dominację iPhone'a na rynku mobilnym. Teraz, gdy Androidem rządzi gra liczbowa, nie ma potrzeby, aby ta praktyka ograniczania zysków była utrzymywana o wiele dłużej.

Android 5.0 mnie nie zaskoczy, obsługa zewnętrznych kart SD byłaby już przeszłością. Ponieważ jeśli aplikacjom trudno jest znaleźć zewnętrzną kartę SD, wówczas większość programów po prostu korzysta ze znanych /datai /mnt/sdcardlokalizacji, a większość aplikacji wykorzystuje do przechowywania coraz więcej danych, dzięki czemu „z powietrza” powstaje dynamiczna strategia znakowania produktów „po prostu nie montuj zewnętrznej karty SD w /mnt/sdcard.

Deecee
źródło
1
To właśnie nazywam ścianą tekstu . Wydaje się też, że jest trochę zepsuty. Dodaj kilka akapitów do swojej odpowiedzi. Również nie rozumiem dlaczego „nie ma powodów do scalenia /datai /mnt/sdcard”, jak wyraźnie widać powód: Unikanie fragmentacji pamięci wewnętrznej.
Flow
1
To zdecydowanie był rant, Deecee, ale mimo wszystko doceniam twój wkład. Pozdrawiam
Sepero,
I jest jeszcze jedna rzecz: w przypadku urządzeń umieszczających kartę Xternal SD wewnątrz karty wewnętrznej (np. /sdcard/external_sdW LG P880) tworzenie kopii zapasowej „pamięci wspólnej” obejmuje obie te rzeczy i tworzy ogromne archiwum. Nie ma możliwości wykonania kopii zapasowej wewnętrznej karty SD tylko w prosty sposób. To nie ma większego sensu, ponieważ istnieją znacznie łatwiejsze sposoby tworzenia kopii zapasowej karty zewnętrznej. Fakt, który doprowadza mnie do szału, ponieważ mam wspomniane urządzenie ...
Izzy
2

Powinieneś zdawać sobie sprawę (jeśli jesteś zrootowany), że możesz przejść do /system/etc/vold.fstab i zamienić punkty montowania dla / sdcard i /mnt/external_sd..... Pozwoli to na włączenie twojej sdcard na / sdcard zgodnie z oczekiwaniami a pozostała „pamięć wewnętrzna” zostanie zamontowana na / mnt / external_sd lub jeśli wolisz / sdcard / external_sd /

Rudi Pittman
źródło
Działa to z niektórymi modelami telefonów, ale nie ze wszystkimi. To nie działa na moim LG Motion 4G, Android 4.0.4. Thx
Sepero,