Pourquoi la carte SD est-elle montée sur «/ sdcard / external_sd» au lieu de «/ sdcard» (ou «/ mnt / sdcard»)?

18

J'ai récemment mis à niveau mon téléphone vers un LG Motion 4G (Android 4 ICS). Je vois que la carte SD est montée à /sdcard/external_sd. J'ai également remarqué que cela semble être le même avec certains autres modèles plus récents. Les applications s'attendent à ce que la carte SD soit à /sdcard. Je suppose que les fabricants souhaitent inclure beaucoup de stockage interne, mais pourquoi monter le stockage interne sur /sdcard? Cela ne devrait-il pas être contraire à une forme de norme de spécification Android?

Sepero
la source
4
Quant à la "norme de spécification", cela ne devrait poser aucun problème: comme vous pouvez le lire dans la documentation des développeurs sur le stockage externe , les applications doivent déterminer l'emplacement / la disponibilité à l'aide d'appels d'API (ici: getExternalStorageState () ), sans utiliser de chemins codés en dur .
Izzy
Bon point Izzy, mais apparemment, certains fabricants redirigent à tort des applications vers l'espace interne via getExternalStorageDirectory (). stackoverflow.com/questions/11281010/…
Sepero
Ah, bon point également - en tant que non-développeur, je n'étais pas au courant de cela. Mais je vois que Flow a fourni une très bonne explication - encore une fois avec des points que je ne connaissais pas ...
Izzy

Réponses:

26

La raison en est l'histoire d'Android: la première génération d'appareils Android n'avait qu'une petite quantité de stockage interne (environ 100 à 400 Mo) qui était montée sous /data.

Ensuite, des appareils avec une carte SD, alors externe, sont sortis. La carte SD était montée sous /mnt/sdcard.

Après cela, des appareils avec un grand stockage interne sont arrivés sur le marché. Ce stockage était fractionné, car il /mnt/sdcardétait devenu l'emplacement par défaut pour les blocs de Big Data à partir d'applications, d'images et autres. L'environnement Android devait donc avoir un répertoire /dataet /mnt/sdcard. Par conséquent, une partition était pour /data, l'autre pour /mnt/sdcard. C'est la raison pour laquelle votre espace de stockage peut devenir faible (la /datapartition) même s'il y a beaucoup d'espace dessus /mnt/sdcard.

Cette situation a été améliorée avec Android 3.0: /dataet /mnt/sdcardpointe désormais vers la même partition. Bon travail Google, qui aurait pu être fait il y a des versions. C'est également la raison pour laquelle app2sd n'est plus nécessaire sur Android 3.0 ou supérieur: vous ne déplaceriez les données que dans le même volume.

Nous arrivons maintenant à la réponse à votre question: étant donné qu'elle /mnt/sdcardest déjà montée sur le stockage interne, une carte SD externe doit utiliser un point de montage différent. Et ce point de montage n'est pas spécifié par Google. Il pourrait être

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

L'appel d'API getExternalStorageDirectory()pointe généralement vers le répertoire de stockage interne. Ce comportement est documenté. Il existe des projets open source qui fournissent des outils pour trouver le répertoire externe de la carte SD de manière canonique.

Couler
la source
Cela signifie-t-il qu'il n'y a pas de «moyen transparent» pour les applications de déterminer la carte SD? Bien sûr, il isExternalStorageRemovable()faut voir si le stockage "externe" est amovible, plus on pourrait déterminer les points de montage (à l'aide de la mountcommande) et vérifier les indicateurs de montage, etc. Mais si je ne me trompe pas ici, cela signifie toujours que chaque développeur a besoin pour comprendre lui-même son application, et il n'y a pas d'appel API simple pour le faire pour lui?
Izzy
C'est correct. Il y a les bibliothèques que j'ai liées qui essaient d'ajouter cette fonctionnalité, mais il n'y a aucun appel d'API officiel pour le faire.
Flow
Si le stockage externe et la /datapartition sont fusionnés, comment pourrais-je monter / démonter en toute sécurité ma carte SD pour la brancher, disons, sur mon PC? Il me semble qu'avoir des partitions séparées est logique et je ne vois pas pourquoi tout cela devait arriver.
jadkik94
Ce n'est pas le stockage externe, c'est la soi-disant «SD interne» et la /datapartition qui est fusionnée.
Flow du
This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Juste pour info, ce n'est PAS vrai sur au moins un téléphone fonctionnant sous Android 4.0 (Pantech Burst), où se /datatrouve une partition ext4 de 1 Go et /mnt/sdcardune partition FAT32 de 12 Go.
netvope
3

Forcer le montage SD externe à l'écart /mnt/sdcardn'a aucun mérite technique, c'est la façon dont Google aide les fournisseurs de matériel à créer un point de différenciation pour les téléphones avec plus de mémoire interne.

Il n'y a aucune raison pour que les applications doivent trouver un moyen de localiser la carte externe quand /mnt/sdcardétait clairement l'endroit où la carte SD aurait dû être et la manière indéfinie de Google de charger la carte SD externe est un autre complot moins convivial que de rendre la carte SD externe moins utile dans appareils Android plus récents. Il n'y a AUCUNE raison pour laquelle /dataet /mnt/sdcarda dû être fusionné dans la même partition sur la version la plus récente d'Android, à l'exception du fabricant pour différencier les téléphones avec une mémoire interne plus grande des unités à moindre coût avec moins de mémoire interne. Même si la fusion devait être effectuée, Google aurait pu clairement définir un STANDARDnouveau point de montage pour les cartes SD externes au lieu de le laisser complètement vague. Cela empêche complètement la «segmentation» de l'écosystème Android par une conception maladroite pour aider le fournisseur à différencier les téléphones haut de gamme des unités moins coûteuses avec moins de mémoire intégrée.

Les binaires des applications Android sont minuscules, les téléphones avec 1 à 2 Go de mémoire interne devraient avoir bien plus que suffisamment d'espace pour des centaines d'applications, et toutes les grandes données pourraient être stockées en toute sécurité sur une carte SD externe. Mais ensuite, les fournisseurs ont réalisé qu'ils devaient avoir un moyen de différencier leur produit haut de gamme, et prétendre qu'une mémoire interne plus élevée fait partie de ce schéma et paralyser l'utilité de la mémoire externe est l'autre partie intégrée de ce schéma requise pour que cela fonctionne pleinement, d'où la API moins utile pour trouver des cartes SD externes et les points de montage non standardisés.

Donc: Non, monter une carte SD à un endroit autre que /mnt/sdcardn'est rien d'autre qu'une stratégie commerciale pour vendre de nouveaux téléphones plus chers sous une nouvelle version d'Android, rien de plus. Imaginez, si le Nexus 4 8 Go et le Nexus 16 Go peuvent tous deux utiliser 64 Go de carte SD externe pour les applications et les médias, y a-t-il une raison pour que quelqu'un achète la version 16 Go? Ces 8 Go supplémentaires de mémoire NAND ne valent certainement pas 50 $ de différence de prix si des cartes SD externes sont impliquées. Étant donné que la plupart des composants d'un téléphone intelligent doivent à peu près être les mêmes (RAM, processeur, radios), la seule zone restante pour plus de marge bénéficiaire est l'espace de mémoire interne, et donc le point de montage étrange de mémoire externe.

Est-ce que tout le monde a également remarqué l'absence de prise en charge SD externe de la récolte actuelle d'appareils Android de marque "Google"? Cette tendance va continuer à se développer dans les appareils Android de «haut niveau». La prise en charge de la carte SD externe était une différenciation clé pour les appareils Android pour dépasser la domination de l'iPhone sur le marché mobile. Maintenant, avec Android qui règne en maître dans le jeu des chiffres, il n'est plus nécessaire de maintenir cette pratique de sapage des bénéfices beaucoup plus longtemps.

Je ne serai pas surpris par Android 5.0, le support de la carte SD externe serait une chose du passé. Parce que s'il est difficile pour les applications de trouver une carte SD externe, la plupart des programmes utiliseront simplement les emplacements connus /dataet /mnt/sdcard, avec la plupart des applications utilisent de plus en plus de données stockées pour son fonctionnement, une stratégie de balisage de produit dynamique est créée à partir de rien "simplement en ne montant pas de carte SD externe sur /mnt/sdcard.

Deecee
la source
1
Maintenant, c'est ce que j'appelle un mur de texte . Semble également un peu délirant. Veuillez ajouter quelques paragraphes à votre réponse. De plus, je ne comprends pas pourquoi il n'y a "aucune raison de fusionner " /dataet /mnt/sdcard, comme je vois clairement une raison: éviter la fragmentation du stockage interne.
Flow du
1
C'était définitivement une diatribe, Deecee, mais malgré tout, j'apprécie votre contribution. Vive
Sepero
Et il y a une chose de plus: avec les appareils plaçant la carte SD externe à l' intérieur de la carte interne (par exemple /sdcard/external_sdsur le LG P880), la sauvegarde du "stockage partagé" inclut les deux , et crée une énorme archive. Aucun moyen de sauvegarder la SD interne uniquement dans une approche facile. Ce qui n'a pas beaucoup de sens, car il existe des moyens beaucoup plus faciles de sauvegarder la carte externe. Un fait qui me rend fou, car j'ai l'appareil mentionné ...
Izzy
2

Vous devez être conscient (si rooté) que vous pouvez aller dans /system/etc/vold.fstab et échanger les points de montage pour / sdcard et /mnt/external_sd.... cela permettra à votre carte sd d'être sur / sdcard comme vous vous y attendez et le "stockage interne" restant sera monté sur / mnt / external_sd ou si vous préférez / sdcard / external_sd /

Rudi Pittman
la source
Cela fonctionne avec certains modèles de téléphones, mais pas tous. Cela ne fonctionne pas pour mon LG Motion 4G, Android 4.0.4. Thx
Sepero