8.1.2a Sistemas de Ficheros
§1 Introducción
En el capítulo anterior ( 8.1.2) hemos adelantado que la estructura que alberga la información en los discos es conocida con el nombre de sistema de ficheros (abreviadamente FS "File System"). Un sistema de ficheros es una estructura lógica que se supone las más adecuada y eficiente para el manejo de datos en base a las características del hardware disponible (discos). Por esta razón, su estudio se mueve en la frontera entre el hardware y el software.
El diseño del sistema de ficheros tiene una gran influencia en la eficacia (rendimiento), seguridad, flexibilidad y capacidad de crecimiento de los almacenamientos en disco. Y por tanto, en el rendimiento del propio Sistema Operativo. Una de cuyas funcionalidades más importantes es el manejo de datos.
Nota: Precisamente el SO UNIX nació a partir de la idea de crear un sistema de ficheros que permitiese a los usuarios de un sistema GE 635 [7] de los Laboratorios Bell de AT&T, trabajar simultáneamente sin interferirse.
Naturalmente, las exigencias del Sistema dependen de su utilización. No son de esperar las mismas necesidades en el sistema de ficheros de una computadora personal, con un SO tipo DOS con un solo usuario ejecutando una sola tarea, que las de un sistema multiprograma en las que distintos usuarios pueden ejecutar concurrentemente distintas tareas, quizás utilizando simultáneamente ficheros alojados en máquinas remotas. En general, cada SO tiene su forma de organizar y controlar el acceso a los datos en el disco duro que le es específica, e independiente del medio físico (tipo de disco utilizado). Sin embargo, por razón de compatibilidad, y para mejor adaptarse a las distintas circunstancias, algunos Sistemas Operativos pueden utilizar distintos Sistemas de Ficheros (Linux es un caso paradigmático).
§2 Datos y metadatos
Como veremos a continuación, existe un amplio repertorio de estos sistemas. Cada uno con una orientación, diseño y pretensiones específicas, pero todos comparten un principio común: junto con los datos propiamente dichos, el disco debe contener las estructuras que los organizan e indexan. Estas estructuras son conocidas como metadatos o meta-estructuras (datos sobre los datos). En realidad, el caballo de batalla del diseño de un sistemas de ficheros, se centra precisamente en el diseño de sus meta-estructuras. Las bondades y cualidades del producto final, dependen en gran medida del acierto y características de esta parte del diseño.
Una vez introducidos en el capítulo anterior los conceptos y vocabulario indispensables, daremos un breve repaso a las características de los sistemas de ficheros de los Sistemas Operativos más populares. Posteriormente nos centrarnos más detalladamente en el sistema FAT por ser quizás el más extendido ( 8.1.2a1) y en el sistema ext2 de Linux ( 8.1.2a2) de importancia creciente en la informática actual.
§3 MS-DOS
Los sistemas MS-DOS ("MicroSoft Disc Opertating System"), PC-DOS y derivados, hasta el MS-DOS v.6.22, utilizan un sistema de ficheros conocido como FAT. El nombre se debe a una de sus estructuras principales, la tabla de situación de ficheros FAT ("File Allocation Table").
Como señala su propio nombre, el sistema utiliza una tabla donde se encuentran las direcciones de los ficheros en el disco. Las tablas FAT están contenidas en el disco junto con el resto de datos, aunque durante el funcionamiento normal se cargan en memoria. Dependiendo del espacio asignado para escribir en ellas reciben diversos "apellidos": FAT12, FAT16 y FAT32, que utilizan respectivamente 12, 16 y 32 bits para apuntar el número de cluster de un trozo de fichero (todas las versiones de MS-DOS previas a la 7.x utilizaban FAT12/16).
Es un sistema de ficheros muy simple, aunque perfectamente adecuado a las pretensiones iniciales. La más evidente para el usuario es la limitación de 8 caracteres para los nombres de ficheros y de 3 para las extensiones. Fórmula conocida como 8+3.
El sistema de ficheros de MS-DOS, que se comercializó con los primeros PCs de IBM, que carecían de disco duro (solo podían almacenar 160 KB de datos en su disco flexible), era en realidad una derivación del sistema de ficheros de CP/M ("Control program for microcomputers"). El sistema operativo de Gary Kildall, que había servido de inspiración al QDOS ("Quick and Dirty Operating System") de Tim Patterson, el "Padre" del DOS de Microsoft. El sistema era bastante ineficiente, ya que no estaba pensado para unidades grandes. Por esta razón, cuando IBM comenzó a dotar a sus equipos con unidades de disco de 10MB, Microsoft desarrollo un nuevo sistema de ficheros para su DOS 1.x, inspirado en el de UNIX (Microsoft había adquirido una licencia UNIX y había empezado a ofrecer una versión denominada XENIX). La capacidad crear particiones haciendo que aparezcan como una unidad de disco, fue añadida en el MS-DOS 3.2.
§4 Sistemas Windows
El gigante de Redmond ha venido utilizando dos sistemas de ficheros para sus sistemas Windows: FAT, en distintas versiones ( 8.1.2a1) y NTFS ( 8.1.2a1).
Si empezamos por el principio, Windows 3.x no era realmente un sistema operativo; más bien una interfaz gráfica sobre MS-DOS. La última versión: Windows 3.11 para trabajo en grupo, incluía una mejora llamada "32-Bit File Access" que en realidad se trataba de una forma de acceso a disco para rutinas de 32-bit en modo protegido, en vez de las rutinas normales DOS de 16 bits. De forma que la estructura del sistema de archivos seguía siendo la DOS tradicional.
El Windows 95 inicial incluía un MS-DOS v.7.x que soportaba FAT16, mientras que una versión posterior, denominada OSR2 ("OEM Service Release 2") o Windows 95b, soportaba también FAT32. El MS-DOS v.7.1 que venía con él también soporta FAT32.
Por su parte Windows NT fue diseñado desde el principio para ser un sistema operativo de red y multitarea que rompiese definitivamente cualquier nexo con sus ancestros MS-DOS. Soporta dos sistemas de fichero: su sistema "nativo", denominado NTFS ("New Technology File System") es un sistema de ficheros estilo UNIX/DOS. El segundo es el tradicional FAT32, incluido meramente por razones de compatibilidad y para permitir que los equipos puedan tener lo que se denomina arranque dual ("dual boot"), que permite al usuario arrancar en Windows NT o en otro sistema. Aunque Windows NT puede leer archivos NTFS y FAT32 (este último mediante una utilidad denominada winimage), es absolutamente diferente e incompatible con los FAT [1], aunque muy superior a ellos en todo.
§5 UNIX
Este sistema es propio de máquinas grandes utilizadas generalmente por muchos usuarios. Nació en entornos académicos y de investigación, por lo que dispone de mecanismos de protección y cooperación entre grupos de trabajo muy desarrollados. Existen varios dialectos de UNIX, aunque uno de ellos, Linux, se ha popularizado mucho en el mundo de la informática personal. Aunque la arquitectura de su sistema de ficheros sirvió de inspiración para las últimas versiones de MS-DOS, es totalmente incompatible con los sistemas FAT.
Aunque originarios de un tronco común (el Unix de AT&T), existen distintas variedades que, en lo referente a su FS, se diferencian en cuestiones de detalle. Principalmente relacionadas con la forma en que se heredan las propiedades de los nuevos ficheros en función de las propiedades del directorio padre o del proceso que los crea.
Quizá las variedades más extendidas sean BSD ("Berkeley Software Distribution"), escrita en la universidad de California en Berkeley por el CSRG ("Computer Science Research Group") y el UNIX Systrem V. A partir de ellas se ha creado toda una familia de versiones "open source", entre las que se encuentran NetBSD; FreeBSD, y OpenBSD. Son, en cierta medida, comparables al popular Linux, cada una con sus virtudes y defectos.
Referencias:
-
Differentiation among BSD distros serverwatch.com
-
Beyond the Big three BSDs, BSD alternatives www.serverwatch.com
-
UNIX History www.levenez.com/unix/
Un buen punto de partida para seguir hurgando en el mundo UNIX.
§6 Linux
Este sorprendente sistema, fue desarrollado inicialmente por un estudiante (Linux Benedict Thorwald) según un diseño inspirado en Minix (un dialecto simplificado de UNIX diseñado por Andrew S. Tanenbaum). Posteriormente fue convertido por su creador en un SO "freeware" y rápidamente "adoptado" por la comunidad informática internacional, que le ha ido añadiendo infinidad de opciones, utilidades y mejoras. Es rápido, fiable y muy optimizado. El sistema de archivos Linux es distinto de los sistemas FAT, aunque dispone de una utilidad denominada mtools que da soporte a FAT32.
Con el tiempo se le ha dotado de distintos sistemas de ficheros, de forma que sus usuarios pueden elegir entre una amplia variedad de opciones y tener acceso (en ocasiones restringido) a una enorme cantidad de formatos. El sistema es muy flexible, permitiendo incluso montar un sistema de ficheros de raíz única, que comprenda unidades físicas con sistemas distintos entre sí (unidades con formatos distintos). Entre los sistemas de fichero que Linux puede utilizar o "entender" se encuentran: bfs; minix; ext; ext2; ext3; xia; xfs; msdos; umsdos; vfat; jfs; reiserfs; nfs; iso9660; hpfs; sysv; smb y ncpfs. A continuación se comentan brevemente las características de los más usados:
- ext: Es una extensión del sistema de ficheros Minix (de ahí su nombre), aunque más elaborada. Su desarrollo fue suspendido en favor de ext2. A partil de la versión 2.1.21 ya no se incluye en el kernel de Linux.
- ext2: Puede decirse que actualmente (2005) esta segunda "extensión" del sistema Minix, es el modelo "oficial" y más extendido en el mundo Linux. Es un sistema de ficheros de alto rendimiento que, en términos de velocidad y consumo de UCP, presenta las mejores prestaciones de entre los sistemas soportados por Linux, aunque no está exento de inconvenientes. Está dotado de una estructura estática y con relativamente poco espacio para anotar particiones excepcionalmente grandes o con gran número de ficheros en cada directorio. Aunque en honor a la verdad, estos límites son enormes: 32,768 subdirectorios en cada directorio; de 10,000 a 15,000 ficheros por directorio, y 4 Terabytes de capacidad. Sin embargo, quizás la principal limitación es que su estructura de listas encadenadas (similar a las FAT 8.1.2a1) no es especialmente adecuada para volúmenes muy grandes (desde luego, el concepto actual -2005- de "muy grande", no es el mismo que el de hace 10 años).
- ext3: Es una versión "journaling" del anterior. Es decir, un sistema capaz de anotar las "transacciones" (operaciones) realizadas, y en caso necesario, disponer de cierta capacidad de rehacer los últimos cambios. El journaling garantiza la consistencia de los ficheros, ya que las operaciones de escritura/borrado de disco suponen distintos accesos y actualizaciones; sobre los datos y sobre los metadatos (tablas FAT por ejemplo 8.1.2a1). En caso de accidente. Por ejemplo, un apagado súbito, algunas operaciones pueden quedar sin realizar, produciendo inconsistencias en el sistema de ficheros. En estos casos, el sistema tradicional consiste en recurrir al empleo de utilidades (como fsck en Linux; fdisk en Windows, o el patético recover del DOS) que verifican la estructura lógica e intentan reparar los desperfectos (al menos evitar que sean origen de nuevos estropicios). El problema es que con frecuencia tales utilidades no resuelven el problema. Además, las rutinas necesarias después del "crash" de un gran sistema pueden requerir horas o incluso días de proceso. En cambio los sistemas journaling pueden rehacer la actualización que quedó incompleta (o anularla totalmente) en cuestión de minutos. El resultado es que estos sistemas son mucho más rápidos en el rearranque después de una incidencia. Algo que es especialmente valorado en determinados entornos de explotación (pensemos por ejemplo, en un gran banco).
- hpfs: Es el "High Performance File System" utilizado por OS/2 de IBM . Aunque, debido a la ausencia de documentación al respecto, Linux solo ofrece capacidad de lectura (importar sus datos) desde estos sistemas de fichero.
- iso9660: Es el sistema de ficheros utilizados en los CD-ROMs. Es un estándar para grabar ficheros de datos en los dispositivos ópticos como CDs y DVDs implementado en todos los sistemas que montan estos dispositivos. Esta es la razón por la que los CDs y DVDs son medios realmente universales para difusión de información digital. Como no podía ser menos, Linux soporta las dos versiones del estándar: High Sierra y Rock Ridge.
- jfs: Al igual que ext3, jfs es un sistema de ficheros "journalista". Desarrollado inicialmente por IBM para sus sistema OS/2 Warp , su código fue donado al Open Source Consortium a principios del 2000 y portado a Linux poco después. Se incluye en los kernel a partir de la versión 2.5.6, aunque puede instalarse como un parche en las versiones 2.4.x. Es un sistema muy adecuado para entornos empresariales que permite volúmenes muy grandes y utiliza técnicas avanzadas para mejorar el rendimiento. Una de sus características es que utiliza un sistema de asignación dinámica para los "inodes" ( 8.1.2a2) que asigna o libera el espacio según las necesidades. La ventaja es que, al contrario que en otros sistemas. Por ejemplo, ext2 , no es necesaria una estimación previa del espacio que se reservará a los inodes al crear el sistema de ficheros [4].
- minix: Es el sistema de ficheros nativo del SO de igual nombre. Fue el primero de los disponibles para Linux, ya que como hemos indicado, el desarrollo original de éste se basó en aquel. Aunque adolece de importantes limitaciones (Minix es más un sistema pensado para la enseñanza que para explotación comercial [6]), se sigue utilizando en disquetes y en unidades de disco RAM.
- msdos: Es la versión Linux del sistema de ficheros DOS tradicionalmente usado por los PCs IBM, Windows y PS/2. La versión Linux adolece de las mismas limitaciones que el DOS original.
- umsdos: Una extensión Linux del anterior que elimina alguna de sus limitaciones, como la de nombres cortos (8+2). Al tiempo que añade algunas capacidades nuevas. Por ejemplo, la designación de dispositivos de E/S como ficheros (algo muy común en el mundo Unix); posibilidad de definir tuberías ("pipelines") para utilizar la salida de un comando como entrada de otro. etc.
- nfs: Es el sistema de ficheros de red ("Network File System") que permite acceder ficheros situados en ordenadores remotos.
- ncpfs: Un sistema de ficheros de red que soporta el protocolo NCP ("NetWare Core Protocol") de Novell . Permite acceder y manejar los recursos de un servidor NetWare desde Linux.
- reiserfs: Otro sistema de ficheros "journalista" de código abierto y
disponible en la mayoría de distribuciones de Linux, diseñado por Hans Reiser
y colaboradores en Namesys. Aunque presenta unas excelentes
prestaciones en el manejo de ficheros grandes, una de sus características
distintivas es su adecuación para manejar infinidad de ficheros
pequeños. Su filosofía es que los ficheros pequeños estimulan la
sencillez del código. ¡En lugar de utilizar una base de datos para
manejar su información, utilice el sistema de ficheros!
reiserfs resulta de 8 a 15 veces más rápido que ext2 en el manejo de ficheros de menos de 1 KB, y con la configuración adecuada, puede almacenar un 6% más de datos que aquel en el mismo dispositivo. En lugar de manejar clusters de tamaño fijo, su diseño le permite utilizar el espacio exactamente a medida de la necesidad. Los metadatos están orgnizados en una estructura de árbol ordenado bastante sofisticada (B+Tree E.1.8.2), que además de gestionar los metadatos, almacena y comprime los despuntes (trozos de fichero que no alcanzan a ocupar un cluster). - smb: Otro sistema de ficheros de red, que soporta SMB ("Server Message Block"), un protocolo utilizado por Windows para trabajo en grupo (Windows 3.1); Windows NT, y Lan Manager de IBM. Permite compartir ficheros; impresoras; puertos serie y otras abstracciones utilizadas para comunicación entre ordenadores, como tuberías y buzones de correo.
- sysv: Es una implementación Linux del sistema de ficheros SystemV de Unix. Soporta las variedades Xenix FS (versión Microsoft de Unix); SystemV/Coherent; SystemV/386 y Coherent FS.
- xfs: En concordancia con la política de apoyo a Linux emprendida por algunas grandes compañías, Silicon Graphics, más conocida como SGI, ha distribuido una versión Linux de su sistema de ficheros XFS, diseñado originariamente para sus sistemas IRIX. En concordancia con sus orígenes, se trata de un sistema "journalista" de altas prestaciones, que soporta bitácora o registro de las transacciones con los metadatos [3], así como "granjas" de discos ("disk farms") extremadamente grandes. Uno de estos sistemas es capaz de gestionar 18,000 Petabytes (1015 bytes E1.7.1) y un solo fichero puede alcanzar 9,000 Petabytes.
- xiafs: Fue otra extensión del sistema de ficheros inicial (Minix) con intención de mejorar sus conocidas deficiencias. Su desarrollo y mantenimiento fueron abandonados a partir de la versión 2.1.21 del kernel.
- squashfs: un sistema de ficheros de solo-lectura altamente comprimido, implementado como un módulo del kernel bajo VFS ("Virtual File System"). Puede ser útil en aplicaciones embebidas que requieran gestionar gran cantidad de datos de forma eficiente.
El seudo-fichero /proc/filesystems contiene información sobre los módulos cargados por el kernel de
Linux. Puede utilizar el comando cat /proc/filesystems
para inspeccionar su contenido. Si ejecuta el comando,
seguramente verá (entre otras) las siguientes líneas:
ext2
minix
iso9660
vfat
§6 OS/2
Este sistema operativo de IBM también fue popular dentro de ciertos círculos del mundo PC. Principalmente clientes corporativos de la compañía. Utiliza un sistema de archivos específico denominado HPFS ("High Performance File System") que permite nombres de ficheros de hasta 254 caracteres y soporta la coexistencia de varios sistemas de fichero en el mismo equipo utilizando distintos dispositivos. En especial unidades FAT12 y FAT16. Su utilidad de formateo permitía seleccionar entre el modo FAT y el HPFS vernáculo.
Las versiones 1 y 2 se denominaron OS/2, mientras que la 3 apareció bajo el nombre OS/2 Wrap. Aparte de los programas escritos específicamente para él, el sistema permitía ejecutar programas DOS y Windows. Desde luego era superior técnicamente a los Windows de la época. Resultaba casi imposible "colgarlo", cosa que distaba mucho de ocurrir con aquellas versiones de Windows, famosas por sus pantallas azules BSoD ("Blue Screen of Death"), y podía instalarse sobre una máquina DOS, Windows 3.1/3.11, o Windows for Workgroups 3.1/3.11, sin perder la posibilidad de ejecutar las aplicaciones de estos sistemas. Disponía incluso de un sistema de carga dual que permitía arrancar en OS/2 o en DOS. Incluía un "BonusPack" que, ya en 1994 (entre otras) incluía IBM Internet Connection, una utilidad que permitía: "enviar correos electrónicos, acceder a tablones de anuncios, buscar información, conectar con otros sistemas y transferir archivos a su sistema" [5].
Nota: recordemos que solo cuatro años antes, en Noviembre de 1990, Tim Berners-Lee había publicado la primera página Web de la historia, y que seguramente el "BonusPack" es anterior a 1994. Me he basado en la documentación escrita que conservo al respecto. Pero seguramente cuando pude hacerme con él ya circulaba desde algún tiempo atrás.
A diferencia de los sistemas FAT, HPFS ordena su información en base a los nombres de fichero, al tiempo que utiliza una estructura más eficiente para organizar sus directorios. Como consecuencia, se consigue un acceso más rápido y un mejor aprovechamiento del espacio que en aquellos. Su unidad de almacenamiento es el sector, y para controlar cuales han sido utilizados y cuales no, divide el espacio del volumen en bancos de 8 MB que contienen 2 KB de metadatos ("allocation bitmaps") entre ellos. Esta organización mejora el rendimiento disminuyendo los movimientos ("seeking") de cabezas. Ya que estas no necesitan volver a la pista cero cada vez que el SO necesita informarse del espacio disponible o de la situación de un fichero.
Nota: En realidad OS/2 ("Operating System 2") comenzó siendo desarrollado por Microsoft, por encargo de IBM, como sustituto (versión gráfica) de los sistemas IBM/MS-DOS, así que debía poder leer los ficheros anteriores. Posteriormente ambas empresas cancelaron estos acuerdos. IBM terminó utilizando OS/2 en sus clientes corporativos (tuvo muy pequeña aceptación entre el gran público), y Microsoft siguió un camino independiente desarrollando su primer propio sistema al que denominó Windows.
§7 Macintosh
El sistema de la manzana utiliza para organizar datos en discos duros y disquetes es un sistema de archivos denominado HFS ("Hierarchical File System").
§8 Netware
Este Sistema operativo de Novell utiliza un sistema de ficheros denominado NFS ("Netware File System"), que fue diseñado específicamente para servidores de red.
[1] Este es quizás el único punto en contra, razón por la cual no era tan utilizado como los sistemas FAT hasta que Microsoft empezó a utilizarlo como sistema por defecto en algunas versiones avanzadas de Windows.
[3] En estos casos, la literatura inglesa suele utilizar el término "jorunalism", cuya traducción literal al español es periodismo. Sin embargo hemos preferido utilizar los términos "registro" o "bitácora" porque reflejan más exactamente la actividad realizada por estos sistemas.
[4] Este espacio determina el número máximo de directorios y ficheros podrá contener la unidad posteriormente.
[5] Naturalmente, igual que en la actualidad (2005), la conexión exigía un proveedor de servicios de Internet PSI. El problema era que en estas fechas, los escasísimos proveedores de tales servicios solo eran accesibles (al menos para mí) mediante módem y llamadas a larga distancia.
[6] "As most of you know, for me MINIX is a hobby, something that I do in the evening when I get bored writing books and there are no major wars, revolutions, or senate hearings being televised live on CNN. My real job is a professor and researcher in the area of operating systems"...
..."I think the real issue is something else. I've been repeatedly offered virtual memory, paging, symbolic links, window systems, and all manner of features. I have usually declined because I am still trying to keep the system simple enough for students to understand". Andrew S. Tanenbaum en "Linus vs. Tanenbaum" http://people.fluidsignal.com/~luferbu/misc/Linus_vs_Tanenbaum.html
[7] Una máquina de General Electric con palabra de 32 bits y direcciones de 18 bits, que alrededor de 1965 era competencia de los modelos de la IBM. Pertenecía a lo que entonces se consideraban ordenadores para "aplicaciones científicas", ya que las destinadas a "aplicaciones de gestión" simplemente no existían. Lo más avanzado eran unos artilugios electro-mecánicos con el pomposo nombre de "facturadoras-contables" que mantenían la contabilidad en cartulinas de papel con un registro impreso y otro electrónico en una banda magnética lateral (algo parecido a las libretas de ahorro de algunas entidades bancarias actuales).