lunes, 21 de mayo de 2007

El CD por fuera

Krlo

Se habla mucho de la estructura física de los Discos Compactos (o CD por sus siglas en inglés), pero poco se menciona la manera lógica en que se distribuye la información. En este trabajo pretendo introducir el tema, apoyándome en el sistema de ficheros más usado y extendido para trabajar con CD, el ISO 9660.

La información en un medio de almacenamiento es contralada y organizada por el Sistema de Ficheros (FS por sus siglas en inglés). Los más conocidos por todos son: FAT en todas sus variantes, NTFS, Ext 2, Ext 3 y HFS para Mac. Los CD se almacenan con la particularidad de que no se efectuarán futuras modificaciones en los datos, se quema el disco y no se guardan archivos nuevos o se modifican los existentes. En todo caso, el disco tendrá que ser quemado nuevamente pero ya sería otro sistema el que contiene. En otras palabras: los CD son READ-ONLY.

En 1986, las autoridades de normalización americanas ISO estandarizaron la propuesta de un sistema anterior, y publicaron la norma ISO 9660 (a partir de ahora solo ISO), que describe un FS para los CD. Este sistema de ficheros se diseñó para que fuera común a los ordenadores basados en plataformas MS-DOS, Microsoft Windows, Mac OS y UNIX.

Estructura

Un sistema de ficheros ISO divide el CD en Bloques Lógicos. Aunque el tamaño de los mismos puede variar, podemos asumir sin preocupaciones que un bloque lógico siempre constará de 2048 bytes (2Kb).

En los primeros 15 bloques puede aparecer información que nada tiene que ver con el estándar ISO, es usada por el Sistema Operativo(OS por sus siglas en inglés también, qué remedio) para sus propios fines. No olvidar que ISO especifica una estructura del disco para lograr compatibilidad entre diferentes SO, no es un programa o una implementación, es un patrón o modelo que debe cumplir la información del CD.

En el bloque 16 comienza una sucesión de Descriptores de Volumen que ayudan a describir la información y forma de trabajar con el disco. Cada Descriptor utiliza 2 Kb(un bloque de hecho), y se ubican uno detrás de otro. A continuación referimos la estructura general de un Descriptor, sus campos comunes.

El primer byte determina que tipo de Descriptor es, entre los posibles:
0: Boot Record.
1: Primary Volume Descriptor (PVD). Debe aparecer al menos una vez en la secuencia. El mismo se describirá detalladamente más adelante, por ser el más importante de todos.
2: Supplementary Volume Descriptor.
3: Volume Partition Descriptor.
4-254: son valores reservados.
255: Volume Descriptor Set Terminator. El Volume Descriptor Set Terminator (255) determina el fin de la secuencia de Descriptores.

EL PVD se encarga entre otras cosas de brindar el nombre del disco (31 caracteres a lo sumo, traten de quemar un disco con un nombre mayor), la cantidad de bloques que contiene el disco (recuerden que son de 2KB), para qué sirven los primeros 15 bloques del disco (si sirven para algo), ubicación del directorio raíz del disco (sin duda lo más importante), así como la ubicación y tamaño de la tabla de caminos. La tabla de caminos o Path Table se verá más adelante.

Toda carpeta y archivo del CD tiene una estructura llamada Directory Record, la misma es variable, no tiene tamaño fijo:

El campo Location of Extent representa la ubicación de la información del Record (no es más que el contenido del fichero o directorio en cuestión). Si el bit 1 es 0 entonces extend está la información del archivo, desde esa posición hasta los n bloques que especifíca el campo Data Length. En caso contrario es una secuencia de Directory Records hasta que especifique el Data Lentgth también.

La tabla de Caminos

La tabla de caminos brinda al Sistema Operativo (SO) acceso rápido a cada directorio en el disco, evitándole tener que recorrer cada directorio para llegar al archivo buscado. Por cada directorio distinto al raíz, la TC contiene un registro que lo describe.

Es mucho más rápido buscar en memoria la dirección en disco de /juegos/starcraft/victorias/, que ir a root, buscar su extent, luego localizar juegos, su extent, localizar starcraft,…

La mayoría de los SO hacen una copia de toda la Tabla de Caminos en memoria, para evitar continuadas lecturas a disco. Por esa razón en el PVD está la dirección de la misma y su tamaño para que sea reservado por el SO.

Restricciones

En cuanto al Nombre:
• Nivel 1: Los nombres de archivos cumplen el formato 8.3 de MS-DOS. La profundidad máxima de los directorios es 8.
• Nivel 2: Los nombres de archivos pueden llegar hasta 31 caracteres.
• Nivel 3: Archivos pueden ser fragmentados (para permitir la escritura por paquetes o grabación incremental.

Otras restricciones:
• Todos los niveles restringen a los nombres ha ser representados por caracteres en mayúsculas, números, underscores (_) y puntos. Linux convierte mayúsculas a minúsculas mientras monta sistemas de archivos ISO.
• Los nombres de archivos no pueden empezar o terminar con un punto.
• Los nombres de archivos no pueden tener más de un punto.
• Los directorios no pueden usar ningún punto.

En cuanto al límite de profundidad de los directorios:
Las restricciones en la longitud de los nombres y la profundidad de los directorios (hasta 8 niveles incluyendo el directorio raíz), han sido las más serias limitaciones de este sistema de archivos.

En cuanto al límite de memoria:
Normalmente, un archivo en un disco formateado con ISO no puede ser superior en tamaño a 231-1. La causa es que su tamaño se guarda en un campo de 32 bit, para el cual 231 -1 es el valor máximo.

En cuanto al limite de numero de directorios:
Existe otra, menos conocida limitante: recordemos la estructura con que ISO cuenta llamada “tabla de direcciones” o “path table”. Por cada archivo la tabla brinda un identificador de su directorio padre. El problema llega cuando nos enteramos que el identificador es de 16-bit, lo que restringe a 65 535 el numero de carpetas. Algunos SO como Windows usan esta estrategia, y otros como Linux no. Si un disco ISO consiste en mas de 65 535 carpetas, será leído en Linux pero en un ambiente Windows todos los ficheros de los directorios adicionales serán visibles, pero vacios (longitud cero).

Conclusiones

Existen extensiones a ISO como Joliet(Windows) y Rock Ridge(UNIX) para quitarnos estas restricciones de arriba, y hacer más potables los CD. Espero que ahora cuando quieran quemar un disco en Nero sepan de que va lo de ISO+Joliet, o los niveles en el tamaño de nombres. Un disco con Joliet es posible trabajarlo desde Linux, pero uno de Rock Ridge no estoy seguro de que sea compatible con Windows.

A modo de curiosidad, el formato UDF es un sistema de archivos con estándar ISO 9660 que utiliza las grabadoras de CD/DVD como un dispositivo de almacenamiento lógico (como los discos duros), este formato permite leer, escribir o modificar los archivos contenidos en discos CD/DVD re escribibles (RW) del mismo modo que se hace en el disco duro, memorias USB o disquete; igual permite la característica de arrastrar y soltar; estas propiedades solo se pueden usar en las grabadoras de CD/DVD no en las lectoras. El único inconveniente es que no aprovecha todo el disco, uno de 700mb te los deja en 550.

Para saber más...



Artículos relacionados


No hay comentarios: