macOS 10.13 High Sierra: sobre el bug de las imágenes sparsebundle y APFS

El problema

El problema es que sobre un tipo específico de imagen de disco que puede crear macOS llamada sparsebundle cuando está formateada como APFS[note]Esto no ocurre con HFS+[/note], en concreto, macOS 10.13 High Sierra hasta la versión 10.3.2 y se pueden perder datos[note]Aparentemente en macOS 10.13.3 High Sierra Apple ha solucionado el problema[/note]. El bug lo descubrió el desarrollador de Carbon Copy Cloner, que explica el problema en un artículo en su blog.

Qué es una imagen sparsebundle

Una imagen de disco dispersa o como la denomina Apple, imagen de disco de paquete dinámico, es una imagen de disco en expansión automática. Hay dos tipos de imágenes de este tipo:

  • Imagen de disco dinámica: Creas una imagen de disco dinámica con la Utilidad de Discos y conforme vas añadiendo archivos, esta va a gestionar el espacio real de archivos ocupados. El problema es que cuando retiras esos archivos de la imagen de disco, ésta no decrece automáticamente reflejando la cantidad de espacio borrado, es decir, va empujando el tamaño del archivo que gestiona la imagen hasta el máximo pero luego no decrece. Explicado de forma sencilla, si creas una imagen de disco dinámica de 100 MB como límite de tamaño y le añades 54 MB adicionales, el archivo del que depende la imagen de disco crecerá hasta los 54 MB. Si borras 50 MB, el archivo seguirá ocupando ese tamaño[note]Los 4 MB que has dejado más los 50 MB que has borrado[/note] independientemente del espacio libre que quede dentro de la imagen.
  • Imagen de disco de paquete dinámico[note]O sparsebundle[/note]: Esta imagen es esencialmente lo mismo, la única diferencia es que mientras que la primera imagen crece y luego no escala hacia abajo cuando borras información, este tipo de imagen de disco es en realidad un montón de archivos pequeños[note]Aproximadamente 8 megabytes cada uno[/note] que puede escalar hacia arriba y hacia abajo. Funcionan y se ven de la misma manera, pero puedes hacer clic con el botón alternativo del ratón en el archivo de imagen de disco y al seleccionar «mostrar el contenido del paquete» y se muestra una estructura de carpetas y archivos. En la carpeta band se ven los archivos de 8 megabytes individuales. Se mantiene el límite de tamaño que se especifica al crear la imagen sparsebundle, pero es capaz de forma inteligente de aumentar y reducir el tamaño del archivo de disco que ocupa.

    Este tipo de imágenes se introdujo en OS X 10.5 para dar mejor soporte a Time Machine[note]especialmente con FileVault, donde todo el directorio de inicio es en realidad una imagen sparsebundle[/note]. Anteriormente, un programa de copia de seguridad consideraba la imagen como un solo archivo, y si se tenía que hacer algún cambio en ella, tendría que volver a copiar toda la imagen. Con un sparsebundle, sólo copia los segmentos de 8 Mb que se han cambiado desde la última copia de seguridad, por lo que las copias de seguridad son mucho más rápidas.

¿El problema? diskimages-helper

La aplicación diskimages-helper trabaja silenciosamente en segundo plano, respondiendo a las peticiones del sistema de archivos hechas al volumen de la imagen del disco. Es esencialmente un intermediario. Hay un archivo de imagen de disco en el disco, pero las aplicaciones no interactúan directamente con el archivo, sino que necesitan interactuar con un sistema de archivos. Así que la aplicación diskimages-helper presenta una interfaz de sistema de archivos por encima de ese archivo de imagen de disco. Cuando haces una petición de escritura a un volumen de imagen de disco montado, la petición va a la aplicación diskimages-helper, que traduce esa petición en cambios al archivo de imagen de disco.

Cuando tu creas una imagen de disco del tipo sparsebundle[note]Recuerda que tiene un tamaño máximo que puedes definir a la hora de crearla[/note], el archivo creado lo suficientemente grande como para albergar un poco de espacio preasignado para las estructuras del sistema de archivos. A medida que copias archivos al volumen de imagen del disco, el archivo asociado crece. Aquí yace el el problema. Cuando intentamos copiar datos a la imagen de disco por encima de la capacidad asignada cuando se creó la imagen, entonces lo que debería ocurrir es que diskimages-helper debería avisarnos que no queda espacio en la imagen, pero simplemente no lo hace, y copia información a la imagen de disco, tanta como puede hasta que llega al límite de su capacidad, y el resto del archivo o archivos se pierde. Así, lo que ocurre es que cuando intentamos recuperar esos archivos, dan error, y el sistema adicionalmente es incapaz de mostrar una alerta indicando que no están completos, sino que simplemente los trata como un archivo corrupto más.

¿Es grave, doctor?

Nah. El problema solo afecta a las imágenes de disco sparsebundle que haya podido crear el usuario solo si están formateadas en APFS y no afecta a las operaciones del día a día de los usuarios con sus discos duros internos y externos. De hecho, lo interesante de este asunto es que posiblemente Apple ya estaba al tanto de este problema, por lo que impidió con el lanzamiento de macOS 10.13 High Sierra que las copias de seguridad de Time Machine[note]Que en resumen, no son más que un sparsebundle a lo bestia[/note] se pudiera realizar en volúmenes formateados con APFS[note]Guiño-Guiño[/note]. De todas maneras, en la reciente actualización macOS 10.13.3 High Sierra yo diría que Apple ha solucionado este problema, aunque estoy todavía realizando algunas pruebas al respecto.

Deja una respuesta