Apple File System: Qué es y por qué es un avance para Apple

Introducción

Los sistemas de archivos suelen ser el “hermano pobre” de la cadena de almacenamiento, ya sea porque el sistema predeterminado es suficiente para nuestras necesidades o porque son la mejor (o única) opción ofrecida por el sistema. Aún con estos antecedentes, el caso de Apple sobrepasa todo lo conocido, pues el sistema HFS tiene 32 años y su “mejora”, HFS+ ya cumplió la mayoría de edad (19 años). Este sistema, que ha sido catalogado por Linus Torvalds como el peor sistema de archivos jamás hecho, tiene sus días contados y hoy le dedicamos un espacio, pues hace aproximadamente cinco semanas (desde el 27 de marzo de 2017), dejó su lugar en iOS para dar paso a un nuevo sistema, uno hecho a medida por y para Apple.

A continuación, le pegamos una repasada a las gracias que trae este sistema.

¿Por qué pasar a Apple File System?

Lo primero que debemos saber es que este sistema de archivo está orientado a dispositivos Flash o SSD. Un lujo que se puede dar Apple pues todos sus dispositivos actuales hacen uso de SSD (desde el iWatch hasta el MacPro). Con este puro enfoque ya debería llamar la atención de quienes usen MacOS o iOS, pero no se quedan solo en eso.

El segundo enfoque es a la encriptación, que ofrece distintos tipos:

  • No encriptar el sistema de archivos
  • Encriptar con una llave única (para metadatos y/o datos)
  • Múltiples llaves
    • Encriptación de metadata
    • Encriptación por archivo
    • Encriptación por región, permitiendo que porciones del sistema de archivos requiera múltiples llaves para ser desencriptado.

La última encriptación es única, ningún otro sistema de archivos lo ofrece. Finalmente, Apple unifica el software de encriptación para todas sus plataformas.
Si ya tenemos tu atención, podemos pasar a lo que son nuevas características que trae APFS.

Clones

Esta característica consiste en que al generar una copia de un archivo, el sistema de archivos en lugar de duplicarlo, escribe solo los metadatos del nuevo archivo, volviendo la duplicación casi instantánea y a costo cercano a cero, a diferencia de HFS+ que duplica los datos.

Clone: En el caso de APFS se tienen dos set de metadatos, pero la información es solo una

Clone: En el caso de APFS se tienen dos set de metadatos, pero la información es solo una

A primera vista no nos parece muy útil, pues no es algo que uno haga cotidianamente; a fin de cuentas; ¿Quién anda duplicando archivos en la misma unidad? Creo que muy pocos, pero inconscientemente SI duplicamos archivos, al menos en iOS.

Como bien sabemos, en iOS cada aplicación tiene su espacio y una aplicación no se puede meter en el espacio del resto. Esto lleva a que si queremos trabajar en una foto o audio, el sistema tiene que generar una copia en el espacio de la aplicación. Si tomamos esa foto con la cámara y después queremos editarla con retrica o instagram, iOS genera una copia duplicando innecesariamente la foto, con el costo de tiempo y espacio que esto implica.

Con esta característica, los softwares de edición deberían tardar menos en “levantar” los datos y además, usar menos espacio pues otra de las gracias es que al trabajar en uno de los clones, cuando uno guarda el archivo, en lugar de guardar la copia, se guarda solo las modificaciones y/o cambios incrementales.

Clone: Al modificar uno de los clones, el sistema no modifica la información adicional. Se guardan los cambios incrementales, ahorrando espacio, ademas de no afectar a las aplicaciones que apunten al archivo no editado.

Clone: Al modificar uno de los clones, el sistema no modifica la información adicional. Se guardan los cambios incrementales, ahorrando espacio, ademas de no afectar a las aplicaciones que apunten al archivo no editado.

Como resumen, con esta característica ahorraremos espacio, tardaremos menos en levantar los archivos y protegeremos nuestra unidad.

Snapshots

Esta característica consiste en generar “instantáneas” de los archivos seleccionados. Una forma limpia de generar respaldos dentro del mismo disco, sin necesidad de duplicar el espacio utilizado. Al igual que clonar, los cambios realizados son incrementales (Es decir, se guarda sólo la diferencia entre los cambios, no una copia completa). Como “contra”, al borrar archivos, no se libera el espacio mientras el archivo esté en una snapshot.

Snapshots: se genera una instantánea del sistema. Si se modifican archivos dentro de la instantánea, los datos no son borrados y los cambios realizados se guardan como incrementales, manteniendo la integridad de la instantánea en todo momento.

Snapshots: se genera una instantánea del sistema. Si se modifican archivos dentro de la instantánea, los datos no son borrados y los cambios realizados se guardan como incrementales, manteniendo la integridad de la instantánea en todo momento.

Otra de las ventajas es que en cualquier momento se puede levantar la instantánea, haciendo que cualquier cambio realizado sea deshecho. Si me preguntan a mí, es una característica excelente para equipos compartidos, pues te permite generar una instantánea y cada cierto tiempo invocarla para tener una instalación “limpia” sin necesidad de formatear y sin perder archivos nuevos (esto esperando que APFS en su versión final para MacOS permita booteo).

Space Sharing

La característica de espacio compartido es ideal para quienes nos gusta tener múltiples particiones. Uno de los principales problemas de esta práctica es definir cuánto espacio se deja para cada partición. Con APFS esto ya no será un problema, pues no define las particiones de manera rígida (inclusive si no tienen formato APFS, pero están dentro del contenedor), permitiendo que cada una pueda crecer o achicarse según demanda. Con esto, todos los volúmenes que sean parte del contenedor APFS reportarán el mismo espacio libre, que es igual al total de espacio libre (Por ejemplo, si tenemos una unidad de 1024 GiB, con 200 GiB ocupados en una partición y 124 GiB ocupados en otra, ambas particiones indicarán que disponen de 700 GiB libres (1024-200-124)). Esto último simplifica el cálculo de espacio en la unidad por parte del usuario, evitando que tenga que sumar el espacio en cada unidad, además del clásico “rebalanceo” cuando uno queda corto de espacio en una partición.

Cálculo mejorado de espacio utilizado (Fast Directory Sizing)

¿Cuántas veces no hemos querido saber cuántos archivos tiene un directorio o cuánto espacio está utilizando y tenemos que esperar segundos o hasta minutos antes de tener nuestra respuesta?

Esto es porque épicamente los sistemas de archivos recorren el directorio de manera recursiva, contando la cantidad de archivos y sumando el peso. La forma simple de solucionar esto sería que al haber una modificación, el sistema fuese actualizando el valor desde la carpeta modificada hasta el nivel más alto, pero esto genera un problema: la forma segura de hacer esta actualización sería “bloqueando” el directorio modificado e ir subiendo hasta la raíz.

Esta operación es una violación en los sistemas de archivo, lo que complica una actualización rápida y segura. APFS soluciona esto almacenando el tamaño de directorios en un espacio especial, lo que permite tener esta información casi instantáneamente al ser solicitada. El sistema utiliza las operaciones “atómicas” para actualizar el tamaño de directorios, por lo que es esperable que esta información siempre está actualizada.
Como contra tiene que esto tiene un costo de espacio, el cual en los sistemas actuales es despreciable al lado de las ventajas.

Atomic Safe-Save

Los usuarios finales y/o que estamos acostumbrados a Windows, no entenderemos mucho sobre este problema que tenía HFS+, pero una vez explicado, se hace evidente esta necesidad.

Cuando uno guarda un archivo, lo que ocurre es lo siguiente:

Renombrado/guardado de archivos: El archivo temporal y el original "intercambian" nombres. Una vez finalizado el intercambio, el archivo temporal es borrado (en caso de guardado).

Renombrado/guardado de archivos: El archivo temporal y el original “intercambian” nombres. Una vez finalizado el intercambio, el archivo temporal es borrado (en caso de guardado).

Ok, no hay perdida de documentos en caso de corte de luz o necesidad de recurrir a recuperar de alguna manera el archivo, pues en el peor de los casos, perdemos los cambios si por alguna extraña razón se pierde la energía en la pequeña ventana que ocurre el intercambio. En MacOS es otro tema, pues existen los Bundles, que corresponden a archivos-directorios.

Como es de esperar, los bundles al ser guardados estos archivos tienen otro tratamiento (como directorio). Esto produce que en HFS+ pudiese haber pérdida de documentos en caso de un corte de luz, pues para guardar los cambios, se requiere primero “mover” el archivo original para dar espacio al nuevo. Si hay corte en ese momento, se pierde el original.

En APFS esto no ocurre, pues el guardado ocurre de una manera que para el usuario: pasó o no pasó sin intermedios, similar a lo que muestra la figura arriba. Todo esto ocurre a un nivel interno, por lo que resulta transparente para el usuario y simple para el programador, pues él solo llama a la función que hace el trabajo.

Otros cambios

Otros cambios incluidos son:

  • Sistema de archivos predeterminadamente sensible a mayúsculas y minúsculas: /CaPa9 y /capa9 son rutas distintas. Si bien existía en HFS+, no era el predeterminado. De igual manera, si el usuario necesita, APFS permite obviar esa sensibilidad.
  • Timestamp de nanosegundo vs segundo utilizado por HFS+
  • Protección contra fallos: APFS utiliza un esquema copy-on-write de los metadatos para asegurar que el sistema de archivos está protegido contra fallos.
  • Archivos “dispersos“, el archivo utiliza el espacio real y no el lógico.
  • Flexibilidad a futuro: Soporte para agregar etiquetas a los archivos sin que esto implique problemas de retr0compatibilidad (las nuevas etiquetas se ignorarán)

Limitaciones

Como limitaciones actuales, se tienen:

  • No se puede utilizar como disco de inicio. Se espera futuras iteraciones de MacOS permitan iniciar con APFS.
  • No se pueden realizar respaldos en Time Machine.
  • Los volúmenes APFS no pueden ser encriptados con FileVault.
  • No se puede utilizar para Fusion Drives

Estas limitaciones son temporales y se espera que en futuras versiones de MacOS y Time Machine se pueda usar APFS sin problemas.

Conclusiones

Con esto ya hemos recorrido las principales mejoras del nuevo sistema de archivos, que como pueden ver, es una mejora notable a HFS+. ¿Ahora, qué ventaja hemos visto en uso del nuevo sistema de archivos? iOS en general es un sistema que funciona bien, sobretodo en equipos de la última o penúltima generación, por lo que es difícil notar cambios significativos entre versiones. Sobre el aprovechamiento de las características, se puede observar que es efectivo, al menos las funciones “clone” han sido aprovechadas por Apple, pues hay reportes en la red que muestran usuarios que han tenido una reducción de espacio utilizado después de la actualización. En mi caso no puedo dar fe de eso, pues el equipo que tenía disponible para utilizar era nuevo y venía con iOS 9.3. Aun así, fue extraño ver que saltar de una versión antigua a una más nueva liberara espacio:

Pasar de iOS 9.3.2 a 10.3.1, para quienes estamos acostumbrados a Android es una experiencia incómodamente placentera: ganar 5 GB y mejoras de sistema.

Pasar de iOS 9.3.2 a 10.3.1, para quienes estamos acostumbrados a Android es una experiencia incómodamente placentera: ganar 5 GB y mejoras de sistema.

Al cierre final y para quienes dudan de la estabilidad que pueda tener APFS, desde el 27 de Marzo a la fecha, Apple ha actualizado millones de dispositivos (todos los que soportan 10.3) sin reportes de fallos, aún cuando el cambio de sistema de archivos fue realizado “en caliente”.

Referencias:

WWDC2016: https://developer.apple.com/videos/play/wwdc2016/701/ (Nota: Usar Edge o Safari para ver. No es compatible con chrome)
Guía técnica para desarrolladores: https://developer.apple.com/…/APFS_Guide/Introduction/Introduction.html

Comentarios