Use la tarjeta SD como almacenamiento interno y deje de escribir en la memoria interna para siempre

Los smartphones parecen morir después de dos años de uso, como si supieran que acabas de pagar la última cuota.
La razón común parece ser la falla de la memoria interna.
Estoy tratando desesperadamente de que mi teléfono escape de este cruel destino.
La idea que inicialmente tenía parecía simple, pero la web no parecía compartir mi optimismo.
Esta es la idea:
- crear particiones ext4 en la tarjeta SD
- montar en el arranque las particiones de la tarjeta SD /datay /cache(y tal vez /preloady /efssi alguna vez se escriben)

Me gustaría saber qué tiene de malo esta idea y por qué no funciona, pero la pregunta principal es:
¿Puedo dejar de escribir en la memoria interna para siempre?

He visto todas las aplicaciones que existen (app2sd, link2sd, DirecoryBind, s2e, lo que sea) y todas parecen reubicar subdirectorios, nunca el principal /data.
Cualquier ayuda será muy apreciada.
¡Gracias!

¡Bienvenidos a los entusiastas de Android! ¿Ha probado la función de búsqueda de nuestro sitio y ha verificado detrás de las etiquetas utilizadas (la mayoría de ellas tienen un wiki adjunto)? Esa pregunta ya se hizo aquí más de una vez. Y además, tengo 2 teléfonos Android que ya uso durante 5 años y más, mi dispositivo principal actual lo uso durante aproximadamente 3 años. Nada murió hasta ahora (excepto una tarjeta SD, que se reemplazó fácilmente).
Hola @Izzy, encontré mucho sobre cómo aumentar la memoria, nada que responda a la pregunta real en el título. Ese es exactamente mi punto, es fácil tirar y reemplazar una tarjeta SD, no puedo decir lo mismo de un teléfono
Creo que Android Marshmallow tiene esta función incorporada, pero esto no es tan relevante para todos los demás que todavía usan Lollipop y más. Esperemos que pueda ayudar a algunos usuarios.
@ LJD200 casi correcto. MM permite fusionar los dos. Pero OP quiere usar solo lo externo y no tocar lo interno en absoluto, por lo que no funcionará.
Acabo de actualizar CyanogenMod 13 (Android 6) versión NOCTURNA. Me dieron por vencido después de 2 días de investigaciones y foros que no respondían y comencé a ver videos sobre cómo reemplazar emmc :-) ¡ajá! @Izzy, escribir solo una vez podría estar bien, lo que quiero evitar es un reemplazo continuo de archivos por aplicaciones o Android mismo.
Básicamente, eso significaría un DirectoryBind de /dataa algún lugar en la tarjeta externa, y lo mismo para /cache. Todo lo demás es principalmente de solo lectura.
@Izzy, ¿puedo hacer eso con DirectoryBind? ¿Es eso sencillo? ¿2 particiones ext4 en la tarjeta SD enlazadas a /data y /cache? Mientras tanto, estoy monitoreando cómo le está yendo a Android Marshmallow. El almacenamiento emulado está en emmc, ¡no feliz!
Nunca he usado DirectoryBind, por lo que no puedo decir cuán simple es en realidad. Solo sé que es posible desde el punto técnico.
Hace un tiempo encontré esta publicación Montar una carpeta desde una sd externa como /data y parece ser aceptado por todos. Todavía no puedo entenderlo: todo lo que puedo ver es que la partición de DATOS se está montando en la tarjeta SD, ¡los archivos aún están almacenados en la partición! He notado que @Izzy propone esto como una solución incluso en días más recientes
Parece que tienes razón con eso, Claudio: es solo que el punto de montaje está allí, con el almacenamiento real todavía donde siempre ha estado. Yo diría que coloque un comentario allí para señalarlo. Pero aparte de eso, la respuesta no está relacionada con DirectoryBind.
No puedo comentar, no hay suficiente reputación. Cualquier solución es buena para mí, siempre y cuando funcione.

Respuestas (3)

¡Eureka!
Así es como lo he hecho:

Partición y formato de la tarjeta SD

Sin saber qué particiones habría podido reubicar, decidí recrear mi tarjeta SD exactamente con el mismo diseño de la memoria interna de mi Samsung Galaxy S III.
USERDATAes la última partición y hay una buena razón para ello:
el tamaño de mi tarjeta SD es mayor que la memoria interna y la mejor opción ha sido ampliar USERDATAhasta el sector más lejano posible.

El siguiente trabajo se ha realizado en mi PC con Linux:

parted /dev/sdb mklabel gpt \
mkpart  BOTA0      ext2     8192s          16383s \
mkpart  BOTA1      ext2    16384s          24575s \
mkpart  EFS        ext2    24576s          65535s \
mkpart  PARAM      ext2    65536s          81919s \
mkpart  BOOT       ext2    81920s          98303s \
mkpart  RECOVERY   ext2    98304s         114687s \
mkpart  RADIO      ext2   114688s         180223s \
mkpart  CACHE      ext2   180224s        2277375s \
mkpart  SYSTEM     ext2  2277376s        5423103s \
mkpart  HIDDEN     ext2  5423104s        6569983s \
mkpart  OTA        ext2  6569984s        6586367s \
mkpart  USERDATA   ext2  6586368s       60749824s

Bien, particiones creadas.
Ahora, todavía imitando mi dispositivo Android, formateo las particiones en consecuencia:

# /efs
mkfs.ext4  /dev/sdb3   -E root_owner=1001:1000
# /system
mkfs.ext4  /dev/sdb9   -E root_owner=0:0         -L system
# /cache
mkfs.ext4  /dev/sdb8   -E root_owner=1000:2001
# /preload
mkfs.ext4  /dev/sdb10  -E root_owner=0:0
# /data
mkfs.ext4  /dev/sdb12  -E root_owner=1000:1000

La tarjeta SD está lista, ahora puedo "hacer una copia de seguridad" de los archivos de emmc en la partición de la tarjeta SD adecuada, cuidando de preservar los atributos del archivo.

Editarfstab

En las versiones no demasiado antiguas de Android, fstabel archivo parece estar siempre ubicado en /.
Los archivos en /se almacenan en la BOOTpartición ( boot.img);
es hora de aprender a editar el boot.img.
Aquí hay dos tutoriales muy útiles que lo pondrán en marcha:
CÓMO: desempaquetar, editar y volver a empaquetar imágenes de arranque
Manipulación de boot.img de Android
un pequeño consejo:
Edite el ramdisk en su dispositivo Android.
Pasé tres días frustrado tratando de hacerlo en mi PC, supongo que es una cuestión de "endianidad".

Al editar el ramdisk, ordene name-list(entrada estándar) para cpio.
Pasé tres años frustrando fallas recurrentes al azar.


Mi fstabantes:

/dev/block/mmcblk0p3        /efs            ext4        noatime,nosuid,nodev,journal_async_commit,errors=panic      wait
/dev/block/mmcblk0p9        /system         ext4        ro,noatime      wait
/dev/block/mmcblk0p8        /cache          ext4        noatime,nosuid,nodev,journal_async_commit,errors=panic      wait
/dev/block/mmcblk0p10       /preload        ext4        noatime,nosuid,nodev,journal_async_commit       wait
/dev/block/mmcblk0p12       /data           ext4        noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic      wait,check,encryptable=footer

Mi fstabdespués:

/dev/block/mmcblk0p3        /efs            ext4        noatime,nosuid,nodev,journal_async_commit,errors=panic      wait
/dev/block/mmcblk1p9        /system         ext4        ro,noatime      wait
/dev/block/mmcblk1p8        /cache          ext4        noatime,nosuid,nodev,journal_async_commit,errors=panic      wait
/dev/block/mmcblk1p10       /preload        ext4        noatime,nosuid,nodev,journal_async_commit       wait
/dev/block/mmcblk1p12       /data           ext4        noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic      wait,check,encryptable=footer

Todo lo que he cambiado es el número de bloque (de 0 a 1).
Todavía no me atrevía a mudarme EFS, alguien dijo que de alguna manera podrías bloquear el dispositivo jugando con eso, todavía estudiando el tema; Sé que Android sigue escribiendo EFS(lo estoy monitoreando).

Conclusiones y más consultas

Así es como reubiqué la mayor parte de mis datos de almacenamiento interno en mi tarjeta SD externa.
Las cosas son un poco lentas, como era de esperar, pero Android parece funcionar perfectamente;
Siempre puedo invertir en una tarjeta SD más rápida en el futuro.
Hice todo esto con mi stock ROM de Samsung Galaxy S III, obviamente tendrás que adaptarte a tus circunstancias.
Cuando finalmente instalé CyanogenMod 13 (no queremos firmware estándar, ¿verdad?) las cosas fueron un poco diferentes.
Con un borrado /data, CM pasa algún tiempo completando el arranque /datay, en cierto punto, simplemente se da por vencido, se reinicia y pasa al modo de recuperación.
Después de varios intentos me di por vencido y lo reubiqué /systemen la memoria interna, ahora todo está bien.
yo se que/systemestá montado como solo lectura, pero noté que la vida útil de emmc se define como la cantidad de ciclos de lectura/escritura, lo que tal vez sugiera que, a diferencia de los discos duros, la lectura es tan perjudicial como la escritura.
Si ese es el caso, estaría muy agradecido si alguien pudiera decirme por qué en CM no puedo reubicarme con éxito /system.

¿Cuál es el golpe de rendimiento?
Hola @Jonathan, ha pasado un tiempo. Como dije, las cosas eran bastante lentas, a veces me ponía nervioso y terminé reinstalando un sistema operativo nuevo de la manera tradicional. Estaba usando un Kingston 32GB Micro SD U1 HC I Class 10 de £ 5, tal vez sería suficiente invertir en una tarjeta de especificaciones más altas. Haznos saber que tal te va. Por cierto, mi teléfono está a punto de cumplir 7 años y, cruzando los dedos, todavía goza de buena salud 🥳

@Claudio has planteado una muy buena inquietud. Teniendo algunos conocimientos integrados, puedo dar una idea sobre esto:

Cuando enciende un dispositivo, está programado para arrancar desde una ubicación de memoria específica. Esta ubicación de memoria está conectada a la memoria interna.

Por lo general, en los dispositivos integrados de demostración , tenemos un pequeño interruptor que podemos usar para cambiar entre diferentes dispositivos BOOT; puede ser un puerto interno, externo o incluso serie.

Pero en dispositivos de producción o comerciales, este interruptor se eliminará.

Por lo tanto, es casi imposible arrancar directamente desde la memoria externa.

Desearía que algunas empresas pudieran proporcionar una opción (como un interruptor) para arrancar desde la memoria externa, incluso si la memoria interna falla.

Nunca sucederá ... Hacer que cargar y arrancar código arbitrario (2 cosas separadas, ambas difíciles de lograr) sea mucho más fácil es simplemente borrar sus esfuerzos anteriores de bloquearlo.
Gracias @kumar por este útil conocimiento. Tal vez no era obvio en mi descripción, pero nunca intenté ubicarme boot.imgen un lugar que no fuera el emmc.

Pude iniciar con éxito desde la tarjeta SD en QMobile Z8 por:

  • Replicar la tabla de particiones eMMC mediante la partición de la tarjeta SD en una máquina Ubuntu usando partedyfdisk
  • Flashear imágenes de firmware de fábrica a estas particiones recién creadas usandodd
  • Modificación de los archivos fstab.qcom e init.tegra.rc en el kernel ( boot.img) y los archivos recovery.fstab y uneventd.rc en la recuperación de TWRP para iniciar el montaje y el arranque desde la tarjeta SDC en lugar de la memoria interna

Tuvo éxito después de algunos experimentos. Creo que este método debería ser aplicable a cualquier dispositivo con una configuración similar. Sin embargo, los archivos a editar pueden variar de un dispositivo a otro.

Si desea colocar solo los datos externos de las aplicaciones en la tarjeta SD y no toda la partición, puede editar fstab en boot.img y la lista de almacenamiento en framework-res.apk en Android 5 y versiones anteriores.

Para más detalles: [CÓMO] ARRANCAR DESDE LA TARJETA SD [EXITOSAMENTE] en QMobile Z8 con eMMC BRICKED/DEAD