SD 카드가“/ sdcard”(또는“/ mnt / sdcard”) 대신“/ sdcard / external_sd”에 마운트 된 이유는 무엇입니까?


18

최근에 휴대폰을 LG Motion 4G (Android 4 ICS)로 업그레이드했습니다. sdcard가에 마운트되어 있음을 알았습니다 /sdcard/external_sd. 또한 이것은 다른 최신 모델과 동일한 것으로 보입니다. 앱은 SD 카드가에있을 것으로 예상합니다 /sdcard. 제조업체가 많은 내부 저장소를 포함하려고하지만 내부 저장소를에 마운트하는 이유는 /sdcard무엇입니까? 이것이 어떤 형태의 안드로이드 사양 표준에 위배되지 않아야합니까?


4
"사양 표준"과 관련하여 문제가 발생하지 않습니다. External Storage 개발자 문서에서 읽을 수 있듯이 앱은 하드 코딩 된 경로를 사용하지 않고 API 호출 (여기서는 getExternalStorageState () )을 사용하여 위치 / 가용성을 결정해야 합니다. .
Izzy

좋은 지적이지만, 일부 제조업체는 getExternalStorageDirectory ()를 통해 앱을 내부 공간으로 잘못 리디렉션하고 있습니다. stackoverflow.com/questions/11281010/…
Sepero

아, 좋은 지적입니다. 비 개발자로서 나는 그것을 알지 못했습니다. 그러나 Flow가 아주 잘 설명해
주었을 것

답변:


26

그 이유는 Android의 역사입니다. 1 세대 Android 기기에는 적은 양의 내부 저장소 (약 100-400MiB) 만 장착되어 /data있습니다.

다음으로 당시 SD 카드가 외부에있는 장치가 나왔습니다. SD 카드가 아래에 장착되었습니다 /mnt/sdcard.

그 후 내부 스토리지가 큰 장치가 출시되었습니다. 이 스토리지는 /mnt/sdcard앱, 사진 등에서 빅 데이터 청크의 기본 위치가 되었기 때문에 분할 되었습니다. 따라서 Android 환경에는 /data/mnt/sdcard디렉토리 가 있어야했습니다 . 따라서 하나의 파티션은 다른 파티션을위한 것 /data입니다 /mnt/sdcard. 이것이 /data충분한 공간이 있어도 스토리지 공간이 부족 해지는 이유입니다 ( 파티션) /mnt/sdcard.

이러한 상황은 안드로이드 3.0로 개선되었다 : /data그리고 /mnt/sdcard지금 같은 파티션을 가리키고있다. 버전이 좋았을 수도 있습니다. Android 3.0 이상에서 app2sd가 더 이상 필요하지 않은 이유도 있습니다. 동일한 볼륨 내에서만 데이터를 이동할 수 있습니다.

이제 우리는 당신의 질문에 대한 답을 얻습니다 : /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 카드를 안전하게 마운트 / 마운트 해제하여 PC에 연결할 수 있습니까? 별도의 파티션을 갖는 것이 논리적이며 왜 모든 일이 발생했는지 알 수 없습니다.
jadkik94

외부 저장소가 아니라 소위 "내부 SD"와 /data병합 되는 파티션입니다.
흐름

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. 참고 /data로 1GB ext4 파티션이고 /mnt/sdcard12GB FAT32 파티션 인 Android 4.0 (Pantech Burst)을 실행하는 하나 이상의 휴대 전화에서는 그렇지 않습니다 .
netvope

3

외부 SD 마운트를 멀리 /mnt/sdcard하는 것은 기술적 인 장점이 없으며, 하드웨어 공급 업체가 더 많은 내부 메모리를 가진 전화기의 차별화 지점을 만들도록 돕는 Google의 방법입니다.

애플리케이션이 외부 카드를 찾는 방법을 찾아야 할 이유가 없습니다 /mnt/sdcardSD 카드가 있어야했던 곳이 분명 외부 SD 카드를로드하는 Google의 정의되지 않은 방법은 외부 SD 카드의 유용성을 낮추기위한 소비자 친화적 인 음모가 아닙니다. 최신 Android 기기. 왜 이유가 /data/mnt/sdcard적은 내부 메모리와 낮은 비용 단위에서 더 큰 내부 메모리와 차별화 전화에 제조 업체를 제외하고 안드로이드의 최신 버전에 동일한 파티션에 병합했다가. 병합을 수행해야하더라도 Google은 표준 을 명확하게 정의 할 수있었습니다.외부 SD 카드의 새로운 장착 지점을 완전히 모호하게 만들지 마십시오. 이것은 서투른 디자인으로 안드로이드 에코 시스템의 "세분화"를 막기 위해 완전히 노력하고 있으며 내장 메모리가 적은 저가형 장치와 고급 휴대 전화의 벤더 차별화를 돕습니다.

Android 앱 바이너리는 크기가 작으며 1-2Gig의 내부 메모리가있는 휴대폰은 수백 개의 앱을위한 충분한 공간을 확보해야하며 모든 대용량 데이터를 외부 SD 카드에 안전하게 넣을 수 있습니다. 그러나 공급 업체는 고급 제품을 차별화 할 수있는 방법이 필요하다는 사실을 깨달았으며 더 높은 내부 메모리가 해당 체계의 일부가된다고 주장하고 외부 메모리의 유용성을 저해하는 것은이 체계가 완전히 작동하기 위해 필요한 다른 통합 된 부분입니다. 외부 sd 카드 및 표준화되지 않은 장착 지점을 찾는 데 덜 유용한 API.

따라서 /mnt/sdcard, 아닙니다. 새로운 버전의 Android에서 고가의 새 휴대 전화를 판매하기위한 비즈니스 전략 외에 SD 카드를 다른 곳에 설치 하는 것은 그 이상입니다. Nexus 4 8GB와 Nexus 16GB가 모두 응용 프로그램 및 미디어에 64GB의 외부 sd 카드를 사용할 수 있다면 누구나 16GB 버전을 구매해야하는 이유가 있다고 상상해보십시오. 외부 SD 카드가 포함 된 경우 추가 8GB의 NAND 메모리는 반드시 $ 50의 가격 차이가 아닙니다. 스마트 폰의 대부분의 구성 요소는 거의 동일해야하므로 (RAM, 프로세서, 라디오), 더 많은 수익 마진을 남길 수있는 유일한 영역은 내부 메모리 공간이며, 따라서 이상한 외부 메모리 장착 지점입니다.

또한 모든 사람들이 현재 "Google"브랜드 Android 기기에서 외부 SD 지원이 없다는 것을 알고 있습니까? 이 트렌드는 "최상위"Android 기기에서 계속 확장 될 것입니다. 외부 SD 카드 지원은 Android 기기가 모바일 시장에서 iPhone의 지배력을 능가하는 주요 차별화 요소였습니다. 이제 숫자 게임에서 최고의 안드로이드 판결로,이 이익 담금 관행을 훨씬 더 오래 유지할 필요가 거의 없습니다.

안드로이드 5.0에 놀라지 않을 것입니다. 외부 SD 카드 지원은 과거의 일이었습니다. 그것의 하드 앱은 외관의 SD 카드를 찾을 수 있다면, 대부분의 프로그램은 단순히 알려진 사용하기 때문에 /data그리고 /mnt/sdcard대부분의 응용 프로그램이 작동을위한 더 많은 저장 데이터를 사용하여, 위치, 전략까지 활기찬 제품 마크는 "허공 작성 "에 외부 SD 카드를 마운트하지 않아도됩니다 /mnt/sdcard.


1
이것이 바로 텍스트 벽 이라고하는 것 입니다 . 약간의 칙칙한 것 같습니다. 답변에 단락을 추가하십시오. "병합 할 이유가없는 이유 또한 나는하지 않습니다 /data그리고 /mnt/sdcard"나는 분명히 이유가로 : 내부 스토리지의 분열을 방지.
흐름

1
그건 분명 맹렬한 일이지만, Deecee, 당신의 의견에 감사드립니다. 건배
Sepero

한 가지 더 중요한 점은 xternal SD 카드를 내부 카드 (예 : /sdcard/external_sdLG 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.