El sistema de archivos del dispositivo móvil es la forma de organizar, almacenar y nombrar los datos en la memoria flash. Según Android Developers, 2026, los sistemas operativos móviles utilizan una estructura jerárquica de directorios donde cada aplicación funciona en un sandbox aislado. Esta arquitectura evita el acceso no autorizado a los datos y garantiza un funcionamiento estable del sistema cuando se ejecutan múltiples aplicaciones simultáneamente.
Puntos clave
El sistema de archivos es un componente software del sistema operativo que gestiona cómo se escriben, leen y organizan los datos en el soporte físico. En los dispositivos móviles, el sistema de archivos realiza funciones críticas: gestión del espacio de memoria flash, control de acceso a archivos basado en permisos, registro de cambios para recuperación tras fallos y optimización de escritura teniendo en cuenta las particularidades de la memoria flash NAND.
A diferencia de los sistemas operativos de escritorio, los sistemas de archivos móviles se diseñan teniendo en cuenta el número limitado de ciclos de reescritura de la memoria flash. Las celdas NAND soportan un número limitado de operaciones de borrado: de 3.000 a 10.000 ciclos para memorias TLC y MLC, respectivamente. Para prolongar la vida del almacenamiento, los sistemas de archivos emplean mecanismos de wear leveling (nivelación de desgaste) y comandos TRIM. F2FS, desarrollada por Samsung específicamente para memoria flash, tiene en cuenta la geometría de la matriz NAND y coloca los datos de forma que se minimice la fragmentación y el número de operaciones de borrado de bloques.
Los dispositivos móviles modernos utilizan una combinación de varios sistemas de archivos. La memoria interna (partición /data) se formatea como EXT4 o F2FS en Android y como APFS en iOS. Las tarjetas SD tradicionalmente usan exFAT para archivos de más de 4 GB o FAT32 para máxima compatibilidad. La partición /system en Android suele montarse solo lectura y utiliza EXT4 o EROFS (Enhanced Read-Only File System), un sistema de archivos comprimido desarrollado por Huawei para reducir el tamaño de la partición del sistema.
La jerarquía de directorios de Android se basa en la estructura Linux con raíz en /. Cada partición tiene su propio sistema de archivos, permisos de acceso y propósito. Una aplicación solo puede acceder a un conjunto limitado de directorios; el resto está protegido por permisos root.
| Ruta | Partición | Sistema de archivos | Acceso para la app |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Solo su sandbox |
| /system | System | EROFS / EXT4 | Solo lectura (root) |
| /sdcard | External | exFAT / FAT32 | Con permiso |
| /cache | Cache | EXT4 | Solo root |
| /vendor | Vendor | EROFS / EXT4 | Solo lectura (root) |
La partición /data es la partición principal para almacenar datos de usuario, aplicaciones instaladas y sus configuraciones. Cada aplicación recibe su propio directorio en /data/data/<package_name>/. Dentro de este directorio, el sistema crea automáticamente subdirectorios: files/ para archivos de la aplicación, cache/ para archivos temporales, databases/ para bases de datos SQLite, shared_prefs/ para SharedPreferences. Los permisos de acceso a este directorio se establecen al instalar la aplicación y no pueden modificarse sin acceso root. La partición /data se formatea como F2FS en la mayoría de dispositivos modernos, lo que proporciona hasta un 40% más de velocidad de escritura aleatoria en comparación con EXT4.
La partición /system contiene el sistema operativo, las aplicaciones del sistema y las bibliotecas. Esta partición se monta solo lectura para evitar la modificación accidental o malintencionada de los archivos del sistema. En dispositivos con Android 10+ y Project Treble, la partición /system es dinámica y puede actualizarse mediante paquetes OTA sin necesidad de un flasheo completo. Para las aplicaciones, la partición /system es inaccesible; cualquier intento de escritura lanza una excepción SecurityException. Sin embargo, las aplicaciones pueden leer algunos archivos de /system, como fuentes del sistema y archivos de configuración, si tienen los permisos adecuados.
El punto de montaje /sdcard es un enlace simbólico a la partición de almacenamiento externo emulado o físico. En dispositivos sin tarjeta SD, /sdcard apunta a una subpartición dentro de /data designada para acceso compartido. Esta partición es visible para el usuario cuando el dispositivo se conecta a un ordenador mediante el protocolo MTP. Las aplicaciones acceden a /sdcard mediante los permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE, y a partir de Android 10, a través de Scoped Storage con la API MediaStore. El tamaño de /sdcard suele ser del 60–80% de la memoria flash total, y el resto se reserva para la partición /data.
En iOS, el sistema de archivos se organiza mediante contenedores Sandbox de aplicaciones. Cada aplicación recibe un directorio aislado cuyo acceso está restringido a nivel del kernel XNU. La partición de usuario utiliza APFS (Apple File System), introducida en iOS 10.3. APFS admite instantáneas, clonación de archivos y cifrado a nivel de archivo, lo que la hace óptima para dispositivos móviles.
Un contenedor Sandbox de iOS incluye cuatro directorios principales: Documents, Library, tmp y SystemData. Cada directorio tiene su propia política de copia de seguridad, período de retención de datos y nivel de acceso. Documents se incluye automáticamente en las copias de seguridad de iCloud e iTunes. Library contiene los subdirectorios Caches (sin respaldo), Preferences (con respaldo) y Application Support (con respaldo). El directorio tmp es para archivos temporales que iOS puede eliminar cuando el almacenamiento escasea; no se incluye en las copias de seguridad. SystemData es usado por el propio sistema y es inaccesible para las aplicaciones a través de las API estándar.
let fm = FileManager.default
let documents = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let caches = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let appSupport = fm.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first!
Cada directorio del contenedor Sandbox tiene su propia clase de protección. iOS admite cuatro clases: Complete Protection (archivo inaccesible cuando el dispositivo está bloqueado), Protected Unless Open (archivos ya abiertos accesibles al bloquear), Protected Until First User Authentication (archivos accesibles tras el primer desbloqueo) y No Protection (archivos siempre accesibles tras el arranque). Por defecto, todos los archivos en Documents y Library reciben la clase Complete Protection, lo que garantiza la máxima protección de los datos del usuario. Al crear un archivo, se puede especificar explícitamente otra clase de protección si una aplicación en segundo plano necesita acceder a los datos mientras el dispositivo está bloqueado.
El control de acceso a los archivos en dispositivos móviles es una diferencia clave entre Android e iOS. Android utiliza el modelo clásico de permisos Linux (lectura, escritura, ejecución) con extensiones para el aislamiento de aplicaciones. iOS utiliza un modelo Sandbox más estricto, donde cada aplicación se ejecuta en un contenedor aislado y no tiene acceso a los archivos de otras aplicaciones sin mecanismos especiales.
En Android, cada aplicación se ejecuta con un UID (User ID) independiente. Todos los archivos creados por una aplicación en su sandbox pertenecen a este UID y son invisibles para otras aplicaciones. Para acceder a directorios compartidos (almacenamiento externo), la aplicación debe solicitar los permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE. A partir de Android 11, los permisos deben solicitarse en tiempo de ejecución, y una aplicación con targetSdkVersion 30+ debe usar SAF para acceder a archivos de otras aplicaciones. La violación del modelo de permisos provoca una SecurityException, que se maneja con un bloque try-catch estándar. Google Play verifica automáticamente el cumplimiento de la política de permisos antes de la publicación.
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
REQUEST_CODE
)
}
El Sandbox de iOS está implementado a nivel del kernel XNU y no permite que la aplicación salga de su contenedor. Incluso si la aplicación obtiene acceso a un URI de archivo externo a través de Document Picker, el sistema operativo crea una copia temporal en el contenedor de la aplicación en lugar de proporcionar acceso directo al original. Para compartir archivos entre aplicaciones, iOS utiliza los mecanismos Share Sheet y UIActivityViewController, que copian un archivo del contenedor de una aplicación al de otra. Para el almacenamiento seguro de credenciales (tokens, contraseñas, claves), iOS proporciona Keychain, un almacén cifrado accesible al sistema a nivel de kernel. Keychain no forma parte del contenedor Sandbox y es administrado por un demonio independiente securityd, lo que proporciona una capa adicional de protección incluso en caso de compromiso de la aplicación.
La elección del sistema de archivos afecta directamente al rendimiento y la fiabilidad del almacenamiento. Cada sistema de archivos tiene su propia arquitectura, optimizaciones y limitaciones. Es útil que un desarrollador comprenda estas diferencias para predecir el comportamiento de la aplicación en diferentes dispositivos.
Al desarrollar aplicaciones, tenga en cuenta que los diferentes sistemas de archivos tienen distintos límites de longitud de nombre de archivo (255 bytes para EXT4 y F2FS, 255 caracteres Unicode para APFS), tamaño máximo de archivo y soporte de caracteres especiales. Por ejemplo, APFS permite caracteres Unicode en los nombres de archivo, incluidos emojis, mientras que EXT4 se limita a ASCII. Si su aplicación crea archivos con nombres en diferentes idiomas, pruebe en todos los dispositivos objetivo: un nombre de archivo creado correctamente en APFS puede truncarse en EXT4.
El trabajo fiable con el sistema de archivos del dispositivo móvil requiere seguir varias reglas clave. Se basan en el análisis de errores típicos de desarrolladores y las recomendaciones de la documentación oficial.
context.filesDir en Android, NSSearchPathForDirectoriesInDomains en iOS. Las rutas codificadas cambian entre versiones del SO y dispositivosFile.getUsableSpace() en Android y URLResourceValues.volumeAvailableCapacityKey en iOS. Advierta al usuario si el espacio libre es insuficienteisExcludedFromBackup. En Android, prefiera cacheDir para archivos temporalesPreste especial atención a las diferencias multiplataforma. Las rutas de archivos en Android usan barras inclinadas (/data/data/.../files/), en iOS — esquema URL (file:///var/mobile/.../Documents/). Si su aplicación utiliza un framework multiplataforma (Flutter, React Native, Kotlin Multiplatform), unifique las operaciones de archivos mediante adaptadores de plataforma. Por ejemplo, Flutter proporciona el paquete path_provider, que devuelve la ruta correcta a Documents o filesDir en ambas plataformas sin escribir código dependiente de la plataforma. Nunca concatene rutas con operaciones de cadenas; use File.join() o URL.appendingPathComponent(), que manejan correctamente los separadores en diferentes plataformas.
Preguntas frecuentes
En dispositivos Android modernos (11+) para la partición /data se utiliza F2FS. En dispositivos antiguos — EXT4. La partición /system usa EROFS o EXT4. Las tarjetas SD se formatean como exFAT o FAT32 según la capacidad.
APFS admite instantáneas, clonación de archivos, cifrado a nivel de archivo y sumas de verificación. EXT4 tiene registro por diario y una compatibilidad más amplia. APFS está optimizado para SSD, mientras que EXT4 es un sistema de archivos universal.
Use FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). El método devuelve un array de URLs, siendo el primer elemento el directorio Documents principal del contenedor Sandbox de la aplicación.
Scoped Storage es un modelo de acceso introducido en Android 10 que restringe el acceso directo al sistema de archivos. Las aplicaciones solo pueden leer sus propios archivos sin permiso. La API MediaStore se utiliza para acceder a archivos multimedia compartidos.
exFAT es preferible para tarjetas SD de más de 32 GB, ya que admite archivos de más de 4 GB. FAT32 ofrece la máxima compatibilidad con dispositivos antiguos, pero limita el tamaño del archivo a 4 GB.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.