SDカードが「/ sdcard」(または「/ mnt / sdcard」)ではなく「/ sdcard / external_sd」にマウントされるのはなぜですか?


18

最近、携帯電話をLG Motion 4G(Android 4 ICS)にアップグレードしました。SDカードがにマウントされていることがわかり/sdcard/external_sdます。また、これは他のいくつかの新しいモデルと同じように見えることに気付きました。アプリは、SDカードがであると期待しています/sdcard。メーカーは多くの内部ストレージを含めたいと思っていますが、なぜ内部ストレージをマウントするの/sdcardですか?これは、何らかの形式のAndroid仕様標準に反するべきではありませんか?


4
「仕様標準」に関しては、これで問題は発生しないはずです。外部ストレージの開発者向けドキュメントで読むことができるように、アプリはハードコードされたパスを使用せずにAPI呼び出し(ここではgetExternalStorageState())を使用して場所/ 可用性を決定する必要があります。
イジー

Izzyの良い点ですが、明らかにメーカーによってはgetExternalStorageDirectory()を介してアプリを内部空間に誤ってリダイレクトしているようです。stackoverflow.com/questions/11281010/...
Sepero

ああ、良い点も-開発者ではないので、私はそれを知りませんでした。しかし、Flowが非常に良い説明を提供していることを確認します-ここでも気づいていない点があります...
Izzy

回答:


26

その理由は、Androidの歴史です。Androidデバイスの第1世代には、にマウントされた内部ストレージがわずか(100〜400MiB程度)しかありませんでした/data

次に、その時点で外部のSDカードを備えたデバイスが登場しました。SDカードはの下にマウントされました/mnt/sdcard

その後、大規模な内部ストレージを備えたデバイスが市場に登場しました。/mnt/sdcardアプリ、写真などからのビッグデータチャンクのデフォルトの場所になったため、このストレージは分割されました。そのため、Android環境には/dataand /mnt/sdcardディレクトリが必要でした。したがって、1つのパーティションはのため/dataに、もう1つのパーティションはのために使用されました/mnt/sdcard。これは、に/data十分なスペースがある場合でも、ストレージスペースが少なくなる(パーティション)理由です/mnt/sdcard

この状況は、Android 3.0で改善されました。/dataそして/mnt/sdcard今、同じパーティションを指しています。Googleの仕事は順調です。それは前のバージョンでできていたはずです。これは、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コールはありませんか?
イジー

そのとおりです。その機能を追加しようとリンクしたライブラリがありますが、そうするための公式の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。ちなみに、Android 4.0(Pantech Burst)を実行している少なくとも1台の電話で/dataは、これは当てはまりません。1GBext4パーティションと/mnt/sdcard12GB FAT32パーティションです。
netvope

3

外部SDマウントを強制的に解除する/mnt/sdcardことは技術的なメリットがありません。これは、ハードウェアベンダーがより多くの内部メモリを備えた電話機の差別化ポイントを作成できるようにするGoogleの方法です。

/mnt/sdcard明らかにSDカードがあるべき場所であったときにアプリケーションが外部カードを見つける方法を見つけなければならない理由はありません。外部SDカードをロードするGoogleの未定義の方法は、外部SDカードを新しいAndroidデバイス。なぜ理由がない/data/mnt/sdcard少ない内部メモリと低コストユニットから大きな内部メモリと分化の携帯電話へのメーカーを除いてのAndroidの新しいバージョンに同じパーティションにマージする必要がありましたが。マージを行う必要があったとしても、Googleは標準を明確に定義できたはずです。外付けSDカードを完全に曖昧にするのではなく、新しいマウントポイント。これは、Androidエコシステムのさらなる「セグメンテーション」を防止するために完全に機能しています。

Androidアプリのバイナリは非常に小さく、1〜2ギガの内部メモリを搭載した携帯電話は、数百のアプリに十分なスペースを確保する必要があり、すべての大きなデータは外部SDカードに安全に格納できます。しかし、ベンダーはハイエンド製品を差別化する方法が必要であることに気付き、より高い内部メモリがそのスキームの一部になり、外部メモリの有用性を損なうことは、このスキームがこれを完全に機能させるために必要な他の統合された部分です。外部SDカードと標準化されていないマウントポイントを見つけるのにあまり役に立たないAPI。

だから:いいえ、SDカードを別の場所にマウントすること/mnt/sdcardは、新しいバージョンのAndroidでより高価な新しい携帯電話を販売するためのビジネス戦略に他なりません。Nexus 4 8GBとNexus 16GBの両方がアプリケーションとメディアに64GBの外部SDカードを使用できる場合、16 GBバージョンを購入する理由はありますか?外付けのSDカードが関係する場合、その余分な8 GBのNANDメモリーが50ドルの価格差に値するとは限りません。スマートフォンのほとんどのコンポーネント(RAM、プロセッサ、無線)はほとんど同じである必要があるため、利益率を高めるために残されている唯一の領域は内部メモリスペースであり、したがって奇妙な外部メモリのマウントポイントです。

また、「Google」ブランドのAndroidデバイスの現在の収穫から外部SDサポートがないことに誰もが気づいていますか?この傾向は、「最上位」のAndroidデバイスで拡大し続けます。外部SDカードのサポートは、Androidデバイスがモバイル市場でiPhoneの優位性を追い抜くための重要な差別化でした。Androidが数字ゲームで最高の裁定を下すようになった今、この利益の奪い取りの練習をずっと長く続ける必要はほとんどありません。

Android 5.0には驚かないでしょう。外部SDカードのサポートは過去のものになります。それは見た目にSDカードを見つけるために、アプリケーションには難しい場合は、ほとんどのプログラムは、単に知られて使用されますので/data/mnt/sdcard、ほとんどのアプリはその動作のために、より多く保存されたデータを使用して、戦略まで活気のある製品マークが「空中から作成され、場所を"単に外付けSDカードをマウントしないことで/mnt/sdcard


1
今、私はそれをテキストの壁と呼んでいます。少し不満もあるようです。回答にいくつかの段落を追加してください。また、内部ストレージの断片化を回避する理由が明確にわかるように/data/mnt/sdcard「マージする理由がない」という理由もわかりません。
フロー

1
それは間違いなく、Deeceeの暴言でしたが、それにもかかわらず、私はあなたの意見に感謝します。乾杯
-Sepero

さらにもう1つあります。xSDカードを内部カード(/sdcard/external_sdLG P880など)内に配置すると、「共有ストレージ」のバックアップには両方が含まれ、巨大なアーカイブが作成されます。簡単な方法でのみ内部SDをバックアップする方法はありません。外部カードをバックアップするはるかに簡単な方法があるため、これはあまり意味がありません。上記のデバイスを持っているので、私を夢中にさせる事実...
イジー

2

(ルート化されている場合)/system/etc/vold.fstabに移動し、/ sdcardと/ mnt / external_sdのマウントポイントを交換できることに注意する必要があります。残りの「内部ストレージ」は/ 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.