Disponible la versión 6 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Tecnología del PC

[Home]  [Inicio]  [Índice]


8.1.2  Discos:  Estructura lógica

§1  Generalidades

Una vez conocidas las características físicas de los discos duros, acometeremos aquí una descripción de cómo están organizados los datos en su interior;  cómo es la estructura lógica que los alberga.  Empezaremos advirtiendo que en éste, como en otros aspectos de la informática, la estructura está organizada en niveles.  En este caso, la estructura de más alto nivel es lo que conocemos como Sistema de Ficheros ("File System") que será tratada con mayor detalle en el siguiente capítulo ( 8.1.2a).  Antes debemos introducir algunos conceptos imprescindibles para manejarnos en el tema con un mínimo de vocabulario.

El uso y la experiencia ha consagrado distintos sistemas de ficheros en los distintos Sistemas Operativos y disposiciones hardware.  Pero en todo caso, su fin último es siempre el mismo: conseguir un mecanismo que proporcione la forma más rápida, segura y flexible de almacenar y recuperar los datos en los sistemas de disco.  En nuestra descripción seguiremos el orden que creemos más didáctico para el interesado que desee una visión general sobre el asunto, sin otro requisito previo que la necesaria dosis de curiosidad.

Adelantaremos que la forma de organización de los niveles altos, en especial el Sistema de Ficheros en su conjunto, es característico de cada SO particular.  Aunque las interioridades de su funcionamiento son propias de cada disco (dependen del fabricante) las interfaces de bajo nivel son universales.  Ya que las unidades físicas pueden ser montadas en equipos muy distintos y deben ser utilizadas con cualquier sistema operativo.

Un poco de historia:  la primera unidad de disco duro (almacenamiento magnético) que pudiera considerarse como tal, con capacidad de acceso aleatorio ("random access"), fue el famoso RAMAC. Un equipo de IBM que apareció comercialmente en Septiembre de 1956. El sistema, dotado con 50 platos de 24 pulgadas de diámetro (unos 60 cm) recubiertos de óxido de hierro, ocupaba el espacio de un refrigerador grande, y generaba tanto calor que disponía de un compresor de aire para refrigerar las cabezas de lectura/escritura.  A pesar de su aparatosidad, la capacidad era de solo 5 MB. El elevado número de platos y su desmesurado tamaño se debían a que su densidad de grabación era de 2.000 bits por pulgada cuadrada. Es decir, de unos 3 bits por mm2. A los estándares actuales (2006) de 100 Gigabits por pulgada cuadrada, podemos considerar que la distancias entre bits en las superficie de grabación eran interestelares.  De acuerdo con los expertos, también para los discos duros existe versión de la Ley de Moore, según la cual, la capacidad de las unidades se duplica aproximadamente cada 23 meses. Aunque en tecnología es muy difícil ejercer de adivino, todos los indicios apuntan a que el fin del disco duro giratorio está próximo. La disminución de precios en las memorias flash apunta en el sentido que los próximos discos serán de estado sólido (estáticos,   8.2.1a).

En realidad, IBM no vendía la unidad, sino que la alquilaba con servicio de mantenimiento incluido -algo muy normal en la época- a razón de 35.000 Dólares anuales (el equivalente a 250.000 dólares actuales).

Puede obtener información adicional en "Happy Birthday to the Hard Drive" un artículo de Terri Wells aparecido en Developer Shed www.devhardware.com    

§2  Pistas, sectores y clusters

Los partículas magnéticas de la superficie del disco se utilizan en grupos dispuestos en círculos concéntricos denominados pistas ("Tracks"), que se numeran desde el exterior al interior comenzando por la cero [1].

En las unidades modernas se suele utilizar ambas superficies de cada plato ("Platter"), de los que puede haber varios en la misma unidad [2].  Las pistas de todos los platos equidistantes del eje conforman un cilindro ("Cylinder") y las cabezas de lectura/escritura están construidas de forma que todas están situadas sobre el mismo cilindro.

Recordemos que existen dos mecanismos; uno mecánico y otro eléctrico, que permiten a las cabezas leer/escribir sobre cualquier punto: el movimiento ("Seeking") hace que puedan situarse rápidamente sobre cualquier cilindro.  Por su parte el mecanismo de conmutación hace que sea una u otra cabeza la que lee/escribe en cada momento.  Recordemos también que hay tantas pistas como número de cilindros x número de platos x 2, y que en los discos duros, la velocidad de rotación angular es constante [3].  En las unidades actuales oscila entre 4.200, 15.000 rpm.

Además de las pistas concéntricas, la superficie del disco se supone dividida en sectores circulares.  La intersección de cada sector sobre las pistas se conoce como sector.  La capacidad de cada sector es de  512 bytes.  Naturalmente, el número de sectores configura la capacidad total de la unidad.  Esta puede variar desde un par de miles de sectores en un humilde disquete, a cientos de millones en una unidad de gran capacidad.

Nota:  Observe que al referirse a discos duros, un sector no se refiere a la cuña completa, sino al trozo de pista intersectado por los radios que delimitan lo que en geometría es el sector circular.  También que los los sectores tienen distinta longitud según su distancia al centro.   Circunstancia esta que tiene importantes consecuencias prácticas.

Dado que las pistas exteriores son más largas que las interiores, y con objeto de no aumentar la densidad lineal de los datos, es práctica común en los discos modernos (no así en los disquetes) que el número de sectores sea menor en las pistas interiores que en las exteriores.  O lo que es lo mismo: que el valor SPT ("Sectors per track") no sea igual en todos los cilindros (algunos programas de diagnóstico que proporcionan el valor SPT de la unidad, se refieren -en su caso- a las pistas exteriores).  Esta técnica de grabación se conoce como zoned-bit recording y señala que no todas las pistas tienen igual número de sectores.

§3  Valores CHS

Hemos señalado ( 6.2) que en las unidades modernas, la identificación de cada sector viene determinada por su número n dentro del total N de sectores disponibles en la unidad.  Lo que se conoce como direccionamiento LBA ("Logical Block Addressing).  Sin embargo, por razones históricas, es costumbre designarlos mediante tres valores (que se representan por sus iniciales inglesas): número de cilindro C;  número de cabeza H y número de sector dentro de la pista S.  Así que en la literatura especializada encontrará repetidamente el acrónimo CHS para referirse a esta terna de valores que corresponden con las características "lógicas" (que no físicas) de la unidad.

En la época de los primeros PCs, la designación CHS correspondía efectivamente con las características físicas de las unidades de disco.  Sin embargo, en las unidades modernas estos valores no guardan ninguna relación con la física del dispositivo.  Existe un algoritmo que traslada estos tres valores a los parámetros internos del sistema.  Por ejemplo.  El portátil en que escribo, dispone de una unidad Toshiba MK6025GAS con 117.210.240 sectores, lo que hace un total de 60.011.642.880 bytes (60.01 GB según el fabricante [8]).  Sus especificaciones técnicas señalan que la unidad tiene dos platos y 4 cabezas a las que corresponden las siguientes "características lógicas":


Cabezas H = 16

Cilindros C = 16,383

Sectores por pista en la zona cero [9]  S = 63

§4  Formateo de bajo nivel

El número de sectores y pistas viene determinado por el fabricante de la unidad y su organización se realiza en un proceso denominado formateo de bajo nivel, o formateo físico, que incluye ciertas operaciones de verificación para comprobar que las cabezas son capaces de leer/escribir sin error, cualquier patrón de bits en todos y cada uno de los bytes de las superficies.  En caso de haber alguno erróneo (lo que es relativamente frecuente), estos bytes malos se apuntan en una tabla interna de la propia unidad y no vuelven a utilizarse.

Nota:  Algunos sistemas de fichero.  Por ejemplo NTFS ( 8.1.2a) tienen la capacidad de realizar esta anotación en run-time ("Hot fixing"), de forma que si detectan un byte defectuoso, es anotado para que no vuelva a ser utilizado por la unidad.

Actualmente los discos vienen formateados de bajo nivel y probados, por lo que el formateo físico es ráramente necesario.  Hasta fechas relativamente recientes, era frecuente encontrar la tabla de sectores defectuosos anotada por el fabricante en la propia carátula de la unidad.  En cambio, antaño era imprescindible realizar este formateo sobre las unidades nuevas mediante herramientas software especiales.  Entonces era frecuente que el formateo de bajo nivel y comprobación de un disco Winchester de 5+5 MB tardara varias horas!! [5].

Nota:  En épocas en que las unidades de disco eran terriblemente caras (un disco Winchester podía costar el equivalente a un automovil actual de tipo medio), si el disco empezaba a dar problemas de lectura/escritura, la terapia consistía en volver a realizar un formateo de bajo nivel y recomprobar el estado de la superficie (volver a pasar el "dkinit"). Si existían nuevos bits defectuosos, eran añadidos a la tabla de defectos y la unidad volvía a ser puesta en explotación cruzando los dedos.  En cambio, el costo de las unidades actuales hace que excepcionalmente haya que reparar o recuperar un disco [6].  Es más, el mantenimiento actual es tipo proactivo, en el sentido de que se monitorizan determinados parámetros de funcionamiento y la unidad es desechada a la más mínima señal de que pueda presentar un fallo.

§5  Unidad de asignación

Los sectores constituyen la menor cantidad de información que las cabezas pueden leer/escribir cada vez, lo que significa que la unidad puede leer/escribir como mínimo la información contenida en un sector (que para el sistema estará libre u ocupado, pero nunca a medias).  A este respecto es importante señalar que el SO ráramente utiliza esta cantidad directamente.  Esto significaría, sobre todo en unidades grandes, tener la información demasiado fragmentada (contenedores unitarios demasiado pequeños).  Por esta razón, se utilizan múltiplos de esta cantidad en forma de agrupaciones de sectores contiguos denominadas unidad de asignación ("Cluster") [4].

Nota:  Los sectores por cluster utilizados por Microsoft en sus sistemas de ficheros son:  1, 2, 4, 8, 16, 32, 64 y 128.

§6  Formateo de alto nivel

El tamaño del cluster (número de sectores), que conforma la unidad mínima de lectura/escritura,  depende del sistema de ficheros utilizado y de la capacidad de la unidad (puede ser distinto para cada disco).  Su determinación, junto con la creación de determinadas estructuras auxiliares, que comentaremos más adelante ( 8.1.2a), se realiza mediante el denominado formateo de alto nivel, o formateo lógico, que es realizado por una utilidad del SO.   En los sistemas ext2 (Linux) es la utilidad mke2fs; en los sistemas FAT (MS-DOS/Windows), es la utilidad format.com.  El cuadro adjunto muestra las respuestas obtenidas al ejecutar esta última sobre una unidad de 4 GBytes.

Comprobando el formato del disco
Grabando los clústeres no válidos actuales
Completado.
Comprobando 4.001,45 MB
Formato completado.
Escribiendo la tabla de asignación de archivos
Completado.
Calculando espacio libre (esto puede tardar algunos minutos)...
Completado

¿Nombre del volumen? (11 caracteres, Entrar para ninguno)?

4.187.631.616 bytes de espacio total en disco
4.187.631.616 bytes disponibles en disco

4.096 bytes en cada unidad de asignación.
1.022.370 unidades de asignación libres en disco

El número de serie del volumen es 304A-0FEF

Nota:  El caso de los disquetes es una excepción sobre lo comentado.  Aunque estas unidades pueden venir del fabricante con un formateo de alto nivel al estilo MS-DOS, format.com realiza en ellas los formateos de alto y bajo nivel simultáneamente.  Por supuesto, un disquete HD de 3.5" puede sufrir distintos formatos en una máquina DOS/Windows, en una Linux o en un Mac.  La tabla adjunta muestra la distribución de los disquetes formateados bajo MS-DOS. 

Capacidad nominal 360 KB. 1.2 MB. 720 KB. 1.44 MB. 2.88 MB.
Tamaño (diámetro) 5.25" 5.25" 3.5" 3.5" 3.5"
Designación DD HD DD HD EHD
Sectores por cluster 2 1 2 1 2
Pistas por cara 40 80 80 80 80
Sectores por pista 9 15 9 18 36

Fig. 3

Fig. 4

La figura 3 muestra el resultado después del formateo de alto nivel de un disquete 3.5" HD en MS-DOS/Windows (la unidad está totalmente vacía).  En este caso el cluster es de un sector y la capacidad total coincide con el producto: 2847 clusters x 512 bytes/cluster = 1.457.664 bytes.  Sin embargo, las unidades de asignación anunciadas no corresponden con el total teórico de la tabla anterior, que debería ser:  80 pistas/cara x 18 sectores/pista x 2 caras = 2880 clusters.  Los 33 clusters perdidos corresponden a distintas estructuras de bajo nivel, no utilizables directamente por el usuario, a las que tendremos ocasión de referirnos más adelante, que son creadas durante el formateo de alto nivel (los resultados mostrados en el cuadro se refieren a capacidades utilizables por el usuario).

La figura 4 muestra el resultado de la utilidad scandisk [7] en una unidad de 4 GB. formateada con la misma utilidad que el disquete anterior (la unidad contiene algunos datos de usuario).  Puede verse que en esta ocasión el cluster es de 8 sectores (4.096 bytes) y que la capacidad total coincide con el producto del más de un millón de clusters existentes en la unidad por el tamaño de cada uno (4.187.623.424 = 4.096 x 1.022.369).  También en este caso los valores se refieren a capacidad útil, una vez deducido el espacio requerido por las estructuras del formato lógico.

En los sistemas Windows y MS-DOS, puede utilizar la utilidad chkdsk.exe seguida del nombre de la unidad A:; C:; D:; etc. para obtener información sobre sus discos (unidades lógicas) [10].  Por ejemplo, en una unidad de 300 GB nominales, el formateo lógico con format.com, ha construido un Sistema de Ficheros FAT32 con las siguientes características (en el momento del análisis la unidad contiene algunos datos de usuario):

292.954.048 KB de espacio total en disco
277.057.632 KB libres

32.768 bytes en cada unidad de asignación
9.154.814 total de unidades de asignación en el disco
8.658.051 unidades de asignación libres en disco

Como puede verse, el cluster es enorme, 64 sectores, y proporcionado al tamaño de la unidad.  Es significativo que en estas unidades muy grandes, el almacenamiento de gran número de ficheros pequeños (de menos de 32 KB) puede suponer un terrible desaprovechamiento del espacio.  Por lo que dependiendo de su uso, es recomendable dividirlas en varias unidades lógicas ( 8.1.2c1).  Aunque la capacidad de esta unidad es unas 70 veces mayor que la del ejemplo anterior, solo tiene 8.9 veces más clusters que aquel.  En esta ocasión es un Seagate Barracuda ST3300831AS, que según especificaciones del fabricante, tiene 586,072,368 sectores en modo LBA. Es decir, 300,069,052,416 Bytes.  Puede verse que las estructuras necesarias para el formateo de alto nivel suponen un espacio considerable.  Aún considerando KBytes de 1024 bytes, el espacio total (utilizable) del disco resulta ser 84 MB menor que su capacidad teórica!!.  La diferencia corresponde al espacio ocupado por los metadatos (datos sobre los datos).

Nota:  En realidad, la elección del tamaño de la partición, que como hemos visto, influye en el tamaño del cluster y en el aprovechamiento del espacio, es una cuestión de equilibrio.  Tamaños de cluster pequeños aprovechan mejor el espacio, pero conducen a muchas unidades de asignación en la unidad, y por ende, a grandes estructuras de metadatos (por ejemplo tablas FAT 8.1.2a1)  Por contra, tamaños grandes de cluster tienden a desaprovechar el espacio, pero conducen a estructuras más reducidas.

§7  Principio de operación

Los discos comienzan a escribirse del exterior al interior, siendo los datos que primero se graban los que más rápido se acceden y más velocidad de transferencia poseen, ya que la velocidad lineal de las pistas exteriores es mayor que en las interiores.

Contra lo que podría parecer, el llenado no se produce comenzando por una superficie y continuando en la siguiente, sino por cilindros. De forma que una vez llenados los clusters del cilindro exterior, se continúa con el adyacente.  Este procedimiento tiende a minimizar los movimientos de cabeza ("seeking"), de forma que para leer una serie de sectores sucesivos, basta la conmutación de cabezas mientras estas se mantienen sobre el mismo cilindro (la "conmutación" es un proceso electrónico incomparablemente más rápido que el "seeking" que implica movimiento mecánico).

§8  Fragmentación

La escritura secuencial de ficheros no produce huecos en la estructura de datos, ya que cada nuevo fichero supone la utilización de una serie de clusters sucesivos después del último ocupado.  El problema comienza cuando se borran ficheros intermedios.  Entonces aparecen zonas intermedias de clusters desocupados que tienden a rellenarse la próxima vez que se escribe un fichero.  Pero entonces, los clusters que componen el nuevo fichero no son contiguos y las operaciones de lectura/escritura tienen que proceder a saltos, con el consiguiente perjuicio para el rendimiento del sistema.  El problema, conocido como fragmentación externa, afecta a unos sistemas de ficheros más que a otros, pero empieza a ser especialmente acusado cuando la unidad está casi llena (por encima del 80% de su capacidad).

La fragmentación tiende a ser especialmente acusada en unidades en las que se escriben y borran gran cantidad de ficheros o cuando estos cambian su tamaño.  El problema es similar al que ocurre con la memoria en las aplicaciones que la utilizan extensivamente.  Para evitar sus efectos indeseables, existen herramientas como el conocido (y denostado) defragmentador de Windows (defrag.exe) que reacomodan sistemáticamente los datos reuniendo los cluster dispersos de un mismo fichero.

El problema de la fragmentación externa, junto con algunas otras necesidades de los grandes sistemas, que deben funcionar ininterrumpidamente durante semanas o meses con grandísimas cargas de trabajo en condiciones críticas, ha obligado a algunos sistemas de ficheros a dotarse de ciertas habilidades especiales.  Por ejemplo, conocer rápidamente si existe suficiente espacio contiguo en algún sitio de la unidad para colocar un fichero, en lugar de instalarlo (seguramente fragmentado) empezando en el primer sitio libre.

Una extensión ("extent") es un conjunto grande de clusters contiguos en un fichero.  Se define mediante una terna de valores:  el desplazamiento inicial respecto al principio del fichero;  el cluster de comienzo y la longitud (número) de clusters contiguos.  El sistema de ficheros mantiene una tabla de extensiones que le permite encontrar rápidamente el espacio adecuado para un nuevo fichero.

Existe el malentendido generalizado, de que la fragmentación es un problema exclusivo de los Sistemas DOS/Windows que no afecta a los sistemas Unix/Linux. Cuando en realidad no es cierto, ya que todos los sistemas de ficheros conocidos padecen del mismo defecto cuando se utilizan en las mismas circunstancias.

Probablemente el malentendido tiene su origen en que en sistemas mono usuario, tales como DOS/Windows, o incluso un sistema Linux de escritorio, la utilización de recursos se debe a la acción de un solo usuario, y por lo que se refiere al disco, los accesos suelen ser secuenciales sobre el mismo fichero.  En estas condiciones, la fragmentación puede ser un elemento determinate en el rendimiento global del proceso.  Por contra, en los sistemas multiusuario, especialmente si están muy cargados (muchos usuarios solicitando recursos distintos al mismo tiempo), son las peticiones al sistema de ficheros las que son de naturaleza fragmentada.  En estas condiciones el disco tiene que atender secuencialmente peticiones de trozos de ficheros distintos, lo que supone una penalización del rendimiento con independencia de que tales ficheros sean contiguos o no (aunque evidentemente, el hecho de que sean discontinuos no facilita las cosas).

Los efectos negativos de esta forma de utilización, que podíamos denominar de demanda fragmentada, se ven atenuados por el hecho de que las unidades modernas disponen de la capacidad NCQ ("Native Command Queing"), que permite que un dispositivo reciba un conjunto de órdenes y las reordene para conseguir el máximo rendimiento con el mínimo movimiento de cabezas.  Otras características propias de sistemas avanzados son el cacheado de disco, la lectura adelantada y la escritura retrasada ( 5.2).

Según los expertos, el argumento final es que, en un sistema multiusuario-multitaréa, la sobrecarga inherente a la fragmentación de ficheros es despreciable frente a la derivada de la fragmentación de la demanda.  Por lo que es muy raro que se requiera defragmentar las unidades lógicas.  Máxime si se utiliza el sistema de ficheros ext2/ext3, que son inherentemente más resistente a la fragmentación que los sistemas FAT o NTFS.  A pesar de todo, aunque raras, existen herramientas para defragmentar discos Linux.  En cualquier caso, la recomendación de los expertos para estas situaciones es no ocupar las unidades por encima del 80% de su capacidad máxima, y en caso necesario, copiar el contenido de la partición en una unidad externa, borrar su contenido, y volverlo a copiar en su localización original.


  Tema relacionado:  Fragmentación interna ( 8.1.2a1).

  Inicio.


[1]  En este sentido, la organización de los discos es diferente de la adoptada en los dispositivos ópticos (CDs y DVDs), donde la distribución no adopta la forma de pistas concéntricas, sino de una espiral continua.

[2]  En la década de los 90 eran frecuentes unidades con gran números de platos.  Actualmente (2005) el aumento de la densidad de grabación ha permitido construir unidades más delgadas, por lo que son relativamente raras las unidades con más de 4.  Como dato anecdótico puedo deciros que conservo un Maxtor XT 2190.  Un "ladrillo" de nada menos que 8 platos y 15 cabezas (una cara se reservaba para uso de la propia unidad) con la espeluznante (de entonces) capacidad de 190 MB!!.

[3]  Esta es otra diferencia importante de los discos duros respecto a los dispositivos ópticos como CDs y DVDs, en los que la velocidad angular del plato es variable.  De esta forma se consigue que la velocidad lineal del láser de lectura sobre la pista se mantenga constante, tanto en las zonas cercanas al eje, como en las más alejadas (lo que no ocurriría de mantenerse la velocidad angular constante).

[4] La palabra cluster se utiliza también con otro significado:  La agrupación de varios equipos de cómputo, unidos por redes de alta velocidad, para realizar determinada tarea de forma cooperativa ( 8.1.2a).

[5]  La designación tiene su origen el modelo 3340, lanzado originariamente por IBM en 1973, en el que las cabezas "vuelan" sobre un colchón de aire sobre la superficie del disco (sistema que sigue utilizándose actualmente).  Estas unidades tenían dos discos de 30 MB colocados uno sobre otro, de forma que el superior era removible; podía cambiarse mediante una operación de carga superior ("Top loader").  Los discos tenían una carcasa plástica de protección en forma de gigantesca tartera, cuya tapa podía quitarse para introducir el disco en la unidad.  La designación 30-30 derivó en "Winchester", en recuerdo del famoso modelo del mismo nombre del conocido fabricante de armas.

[6]  En 1991 el precio de un subsistema de disco Data General de 24 Gigabytes (una capacidad monstruosa en aquellos días) era de 25.000 dólares americanos (de entonces); en 2005 he adquirido una unidad Seagate de 300 GB por 135 Euros.  Como consecuencia, las operaciones de recuperación de discos no están orientadas a volver a utilizar la unidad, sino a la recuperación de información en unidades averiadas de las que no existe copia de seguridad.

[7]  Los sistemas Windows disponen de dos versiones de este programa: scandisk.exe y scandskw.exe.  El primero es una versión MS-DOS; el segundo es una versión Windows con interfaz gráfica.  En ambos casos es una utilidad de chequeo de las estructuras creadas durante el formato de alto nivel; de la consistencia del sistema de ficheros, y de la idoneidad de la superficie útil para escribir datos.

[8]  La documentación del fabricante señala que para Toshiba, 1 MB equivale a 1.000.000 bytes y GB a 1.000.000.000 Bytes (lo que es de agradecer E1.7.1).

[9]  La zona exterior, que tiene más sectores.  La información del fabricante parece confirmar que el dispositivo utiliza la técnica de grabación "zoned-bit recording" antes mencionada .

[10]  Los Sistemas MS-DOS tienen una utilidad de verificación de la integridad de los discos duros chkdsk.exe, que incluye información sobre el tamaño de la unidad, espacio libre, etc.  Las versiones MS-DOS contenidas en Windows 9x también disponen de ella, aunque recomiendan usar scandisc.exe para este menester.  Sin embargo, chkdsk puede seguir siendo útil para obtener información sobre la unidad.