En mi Nexus S encriptado uso un montaje temporal tmpfs en /sdcard en CWM. Tiene suficiente RAM para mantener la nueva ROM en memoria durante la actualización:
Descarga tu ROM a /tmp/update.zip y arranca en modo de recuperación. Luego inicia sesión a través de 'adb shell':
## en la máquina host haz:
me@workstation:/tmp$ adb shell
## ahora en el dispositivo en modo 'adb shell'...
~ # mount -t tmpfs none /sdcard/
## el siguiente comando no es necesario, solo muestra el punto de montaje recién creado
~ # df -h
Filesystem Size Used Available Use% Mounted on
[...]
none 172.4M 0 172.4M 0% /sdcard
~ # exit
## de nuevo en la máquina host
me@workstation:/tmp$ adb push update.zip /sdcard/
5567 KB/s (131676307 bytes in 23.097s)
Luego sigue los pasos habituales de actualización 'instalar zip desde sdcard'.
EDICIÓN: A partir de ICS/Jelly Bean hay un nuevo método adb sideload
Funciona con CWM a partir de la versión 6.0.1.5 en adelante y necesitas Android SDK platform-tools v16 o superior. Si estás en CWM puedes ver una nueva entrada instalar zip desde sideload si es compatible.
El método antiguo aún funciona:
Si sideload no funciona, aún puedes usar el método tmpfs. CWM espera que /data/media sea la ubicación para el update.zip ahora, sin embargo, el punto de montaje tiene que ser /data así que debes hacer esto ahora:
me@workstation$ adb shell
~ # mount -t tmpfs none /data
~ # mkdir /data/media
## Continúa con 'adb push update.zip /data/media' y luego como arriba
Motivo:
A partir de ICS+ el diseño propuesto de la partición ha cambiado. Ya no debería haber una partición de sdcard formateada en FAT, ahora el almacenamiento externo reside dentro de /data/ (/data/media). Para seguir siendo compatible, un montaje FUSE emula las propiedades antiguas de FAT (derechos de acceso y demás). Puedes ver esto cuando hay un montaje de fuse en /storage/sdcard0, se parece a esto:
shell@android:/ $ mount | grep fuse
[...]
/dev/fuse /storage/sdcard0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,... 0 0
[...]