Sistema de archivos jerárquico
Sistema de archivos jerárquico (HFS) es un sistema de archivos patentado desarrollado por Apple Inc. para su uso en sistemas informáticos que ejecutan Mac OS. Diseñado originalmente para su uso en disquetes y discos duros, también se puede encontrar en medios de sólo lectura, como los CD-ROM. HFS también se conoce como Mac OS Standard (o HFS Standard), mientras que su sucesor, HFS Plus, también se denomina Mac OS Extended (o HFS extendido).
Con la introducción de Mac OS X 10.6, Apple eliminó la compatibilidad para formatear o escribir discos e imágenes HFS, que siguen admitiéndose como volúmenes de solo lectura. A partir de macOS 10.15, los discos HFS ya no se pueden leer.
Historia
Apple presentó HFS en septiembre de 1985, específicamente para admitir la primera unidad de disco duro de Apple para Macintosh, reemplazando el Sistema de archivos de Macintosh (MFS), el sistema de archivos original que se había introducido más de un año y medio antes. con la primera computadora Macintosh. HFS se basó en gran medida en el primer sistema operativo jerárquico (SOS) de Apple para el fallido Apple III, que también sirvió como base para los sistemas de archivos jerárquicos en Apple IIe y Apple Lisa. HFS fue desarrollado por Patrick Dirks y Bill Bruffey. Compartió una serie de características de diseño con MFS que no estaban disponibles en otros sistemas de archivos de la época (como FAT de DOS). Los archivos pueden tener varias bifurcaciones (normalmente una bifurcación de datos y una de recursos), lo que permite que los datos principales del archivo se almacenen por separado de los recursos, como los íconos, que podrían necesitar ser localizados. Se hacía referencia a los archivos con ID de archivo únicos en lugar de nombres de archivo, y los nombres de archivo podían tener hasta 31 caracteres.
Sin embargo, MFS se optimizó para usarse en medios muy pequeños y lentos, a saber, disquetes, por lo que se introdujo HFS para superar algunos de los problemas de rendimiento que surgieron con la introducción de medios más grandes, en particular, discos duros. La principal preocupación era el tiempo necesario para mostrar el contenido de una carpeta. Bajo MFS, toda la información de la lista de archivos y directorios se almacenaba en un solo archivo, que el sistema tenía que buscar para crear una lista de los archivos almacenados en una carpeta en particular. Esto funcionó bien con un sistema con unos pocos cientos de kilobytes de almacenamiento y quizás un centenar de archivos, pero a medida que los sistemas crecían en megabytes y miles de archivos, el rendimiento se degradaba rápidamente.
La solución fue reemplazar la estructura de directorios de MFS con una más adecuada para sistemas de archivos más grandes. HFS reemplazó la estructura de tabla plana con el Archivo de catálogo que usa una estructura de árbol B que se puede buscar muy rápidamente sin importar el tamaño. HFS también rediseñó varias estructuras para poder contener números más grandes, los enteros de 16 bits fueron reemplazados por 32 bits casi universalmente. Curiosamente, uno de los pocos lugares en los que este "aumento de tamaño" no tuvo lugar fue el propio directorio de archivos, que limita HFS a un total de 65.535 archivos en cada disco lógico.
Si bien HFS es un formato de sistema de archivos patentado, está bien documentado; normalmente hay soluciones disponibles para acceder a discos con formato HFS desde la mayoría de los sistemas operativos modernos.
Apple introdujo HFS por necesidad con su primera oferta de disco duro de 20 MB para Macintosh en septiembre de 1985, donde se cargaba en la RAM desde un disquete MFS en el arranque usando un archivo de parche ("Disco duro 20 34;). Sin embargo, HFS no se introdujo ampliamente hasta que se incluyó en la ROM de 128 K que debutó con Macintosh Plus en enero de 1986 junto con la unidad de disquete más grande de 800 KB para Macintosh que también usaba HFS. La introducción de HFS fue el primer avance de Apple en dejar atrás un modelo de computadora Macintosh: la Macintosh 128K original, que carecía de memoria suficiente para cargar el código HFS y se suspendió de inmediato.
En 1998, Apple presentó HFS Plus para abordar la asignación ineficiente de espacio en disco en HFS y agregar otras mejoras. HFS aún es compatible con las versiones actuales de Mac OS, pero a partir de Mac OS X, no se puede usar un volumen HFS para arrancar y, a partir de Mac OS X 10.6 (Snow Leopard), los volúmenes HFS son de solo lectura y no se pueden crear o actualizado. En macOS Sierra (10.12), las notas de la versión de Apple indican que "El sistema de archivos estándar HFS ya no es compatible." Sin embargo, la compatibilidad con el estándar HFS de solo lectura siguió funcionando hasta el lanzamiento de macOS 10.15.
Diseño
Un volumen de almacenamiento está inherentemente dividido en bloques lógicos de 512 bytes. El sistema de archivos jerárquico agrupa estos bloques lógicos en bloques de asignación, que pueden contener uno o más bloques lógicos, según el tamaño total del volumen. HFS utiliza un valor de 16 bits para abordar los bloques de asignación, lo que limita la cantidad de bloques de asignación a 65 535 (216-1).
Cinco estructuras componen un volumen HFS:
- Los bloques lógicos 0 y 1 del volumen son los Bloques de arranque, que contiene información de inicio del sistema. Por ejemplo, los nombres de los archivos del Sistema y Shell (generalmente el Buscador) que se cargan al inicio.
- El bloque lógico 2 contiene el Master Directory Block (aka MDB). Esto define una amplia variedad de datos sobre el volumen en sí, por ejemplo los sellos de fecha y hora para cuando se creó el volumen, la ubicación de las otras estructuras de volumen como el Volume Bitmap o el tamaño de estructuras lógicas como bloques de asignación. También hay un duplicado del MDB llamado el Alternate Master Directory Block (aka MDB suplente) situado en el extremo opuesto del volumen en el segundo a último bloque lógico. Esto está pensado principalmente para uso por utilidades de disco y sólo se actualiza cuando el archivo de catálogo o los archivos de desbordamiento de los archivos crecen en tamaño.
- El bloque lógico 3 es el bloque inicial del bloque Volumen Bitmap, que mantiene un seguimiento de qué bloques de asignación están en uso y que son libres. Cada bloque de asignación en el volumen está representado por un poco en el mapa: si el bit está fijado entonces el bloque está en uso; si está claro entonces el bloque es libre de ser utilizado. Dado que el Bitmap Volume debe tener un poco para representar cada bloque de asignación, su tamaño se determina por el tamaño del volumen mismo.
- El Archivo de desbordamiento es un árbol B que contiene extensiones adicionales que registran los bloques de asignación que se asignan a los archivos, una vez que se utilizan los tres niveles iniciales en el archivo de catálogo. Las versiones posteriores también agregaron la capacidad para el archivo de flujo de serie para almacenar extensiones que registran bloques malos, para evitar que el sistema de archivos trate de asignar un bloque malo a un archivo.
- El Catálogo es otro B-tree que contiene registros para todos los archivos y directorios almacenados en el volumen. Almacena cuatro tipos de registros. Cada archivo consiste en un registro de lectura de archivos y un registro de archivos mientras que cada directorio consiste en un registro de lectura de directorios y un registro de directorios. Archivos y directorios en el Archivo del Catálogo están localizados por sus únicos ID de Nodo (o CNID).
- A Archivo Thread Record almacena sólo el nombre del archivo y el CNID de su directorio padre.
- A Registro de archivos almacena una variedad de metadatos sobre el archivo incluyendo su CNID, el tamaño del archivo, tres vecestamps (cuando el archivo fue creado, modificado por última vez, respaldado por última vez), las primeras extensiones de archivo de los datos y tenedores de recursos y punteros de los primeros datos y extensión de recursos del archivo en el archivo de desbordamiento de patentes. El Registro de Archivo también almacena dos campos de 16 bytes que son usados por el Buscador para almacenar atributos sobre el archivo incluyendo cosas como su código creador, código de tipo, la ventana que el archivo debe aparecer y su ubicación dentro de la ventana.
- A Directorio Thread Record almacena sólo el nombre del directorio y el CNID de su directorio padre.
- A Catálogo que almacena datos como el número de archivos almacenados dentro del directorio, el CNID del directorio, tres vecestamps (cuando se creó el directorio, última modificación, última copia de seguridad). Como el Registro de archivos, el Registro de directorios también almacena dos campos de 16 byte para su uso por el Buscador. Estas cosas almacenan como la anchura, la altura y las coordenadas x & y para la ventana utilizada para mostrar el contenido del directorio, el modo de visualización (imagen de vista, vista de lista, etc.) de la ventana y la posición de la barra de desplazamiento de la ventana.
Limitaciones
El archivo de catálogo, que almacena todos los registros de archivos y directorios en una sola estructura de datos, genera problemas de rendimiento cuando el sistema permite la multitarea, ya que solo un programa puede escribir en esta estructura a la vez, lo que significa que muchos programas pueden estar esperando en cola debido a un programa "acaparando" el sistema. También es un problema serio de confiabilidad, ya que el daño a este archivo puede destruir todo el sistema de archivos. Esto contrasta con otros sistemas de archivos que almacenan registros de archivos y directorios en estructuras separadas (como el sistema de archivos FAT de DOS o el sistema de archivos Unix), donde tener una estructura distribuida en el disco significa que dañar un solo directorio generalmente no es un problema. fatal y es posible que los datos se reconstruyan con los datos retenidos en las partes no dañadas.
Además, el límite de 65 535 bloques de asignación dio como resultado que los archivos tuvieran un "mínimo" tamaño equivalente a 1/65,535 del tamaño del disco. Por lo tanto, cualquier volumen dado, sin importar su tamaño, solo podría almacenar un máximo de 65.535 archivos. Además, a cualquier archivo se le asignaría más espacio del que realmente necesita, hasta el tamaño del bloque de asignación. Cuando los discos eran pequeños, esto tenía pocas consecuencias, porque el tamaño del bloque de asignación individual era trivial, pero a medida que los discos comenzaron a acercarse a la marca de 1 GB, la cantidad de espacio más pequeña que podía ocupar cualquier archivo (un solo bloque de asignación) se volvió excesivamente grande., desperdiciando cantidades significativas de espacio en disco. Por ejemplo, en un disco de 1 GB, el tamaño del bloque de asignación en HFS es de 16 KB, por lo que incluso un archivo de 1 byte ocuparía 16 KB de espacio en disco. Esta situación era un problema menor para los usuarios que tenían archivos grandes (como imágenes, bases de datos o audio) porque estos archivos más grandes desperdiciaban menos espacio como porcentaje del tamaño de su archivo. Los usuarios con muchos archivos pequeños, por otro lado, podrían perder una gran cantidad de espacio debido al gran tamaño del bloque de asignación. Esto hizo que la partición de discos en volúmenes lógicos más pequeños fuera muy atractiva para los usuarios de Mac, porque los documentos pequeños almacenados en un volumen más pequeño ocuparían mucho menos espacio que si residieran en una partición grande. El mismo problema existía en el sistema de archivos FAT16.
HFS guarda las mayúsculas y minúsculas de un archivo que se crea o cambia de nombre, pero que no distingue entre mayúsculas y minúsculas en la operación.
Contenido relacionado
Z/OS
Gramática regular
Estándar de Internet