Disponible la nueva versión "donationware" 7.3 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.2a2  Sistemas UNIX/Linux

§1  Introducción

En este capítulo explicaremos las características del sistema de ficheros utilizado en UNIX/Linux.  Debemos advertir que en ambos, especialmente en Linux, se utilizan distintos tipos de "filesystems", aunque probablemente el denominado Second Extended File System Ext2 FS (o simplemente ext2) sea el más utilizado.  En consecuencia, nos centraremos en él para nuestra descripción.  Debemos recordar también que tiene alguna semejanza con los sistemas FAT, ya que como señalamos en el capítulo correspondiente ( 8.1.2a), este diseño de Microsoft se inspiró precisamente en el sistema de ficheros UNIX.

Suponemos que el lector ya está familiarizado con los sistemas FAT y su estructura de directorios y ficheros.  De no ser así recomendamos la lectura previa de los capítulos correspondientes: Sistemas FAT & NTFS ( 8.1.2a1) y Estructura jerárquica de un volumen ( 8.1.2d).

§2  Historia

Los sistemas UNIX, de los que existen distintas variantes o "sabores", nacieron en ambientes académicos y de investigación, pensados para máquinas grandes que debían ser utilizadas por muchos usuarios.  En consecuencia, sus mecanismos de protección y cooperación entre grupos de trabajo están muy desarrollados, y sus sistemas de ficheros (FS) cuidan especialmente los aspectos de propiedad y privilegios sobre ficheros y directorios (quién puede hacer qué cosas sobre ellos).  En consecuencia, los ficheros y directorios tienen más atributos que en los sistemas FAT.

Como hemos señalado ( 8.1.2a) Linux se inspiró en Minix, un dialecto simplificado de UNIX, del que tomó su FS "tal cual" (sin modificación).  Sin embargo, el FS de este último adolecía de conocidas deficiencias.  Principalmente que su sistema de anotación de bloques es de 16 bits, lo que limita su capacidad a 216 = 65.536 bloques; que el número de entradas por directorio es fijo, y que el tamaño máximo para los nombres es de 14 caracteres.

La popularización de Linux puso rápidamente en evidencia la necesidad de mejorar su FS.  La propuesta más afortunada fue el sistema extendido de ficheros Ext FS Extended File System, aparecido en Abril de 1992 con el kernel 0.96c.  Posteriormente fue sometido a una revisión en profundidad que dio lugar en Enero de 1993 a la versión Alfa del Second Extended File System (Ext2 FS) que a la presente (2006) se ha convertido en el sistema más utilizado en las distribuciones Linux y que ha sido objeto de sucesivas revisiones.  La última ha consistido en dotarlo de características "Journaling", y ha dado lugar al Ext3 FS

§3  Características generales

En los FS UNIX, los metadatos ( 8.1.2a) están contenidos en estructuras denominadas inodes , y al igual que en los sistemas FAT, los directorios son ficheros cuyos datos contienen información sobre otros ficheros.  Una característica distintiva es que cada fichero pertenece a un usuario y a un grupo propietario   Otra característica distintiva es que los dispositivos de E/S están representados por ciertos ficheros especiales (pseudo-ficheros). De forma que las operaciones de E/S con los periféricos se virtualizan como operaciones de lectura/escritura en estos ficheros.

Existen cuatro tipos de ficheros:  los regulares o normales (que responden al concepto tradicional de contenedor de datos de usuario); directorios (con información sobre otros ficheros); ficheros de dispositivo ("Device files") y enlaces simbólicos ("Symbolic links").  Estos últimos no tienen contrapunto en los sistemas MS-DOS, aunque si en Windows 9x y siguientes; son los denominados accesos directos.

§4  Usuarios y permisos

Para entender algunas de las características de los sistemas de ficheros UNIX/Linux, se hace imprescindible tener algunas nociones sobre el sistema de seguridad y privilegios de estos Sistemas Operativos.

El sistema de seguridad de los SO Unix y sus derivados como Linux, se basa en tres conceptos fundamentales:  usuariogrupo y permisos.  Cada fichero pertenece a un usuario ("Owner") y a un grupo.

Nota:  No olvidemos que en este contexto, el término "fichero" incluye también a los directorios (un tipo especial de fichero).

§4.1  Usuario

Para poder utilizar el sistema es preciso que el administrador nos de "de alta" en él.  O dicho en otras palabras: que nos cree una "cuenta", lo que incluye la asignación de una identificación UID ("User Identification"), un número distinto para cada usuario; unas claves de acceso ("login name" y "password"), y detalles de las características de acceso (qué podemos y no podemos hacer en el sistema).

§4.2  Grupo

Para facilitar la administración de los usuarios, estos se reúnen en grupos de características de acceso similares identificados por un número GID (" Group Identification").  Cada usuario pertenece a uno o varios grupos.  Como hemos señalado, dados los orígenes de UNIX, el concepto de grupo está íntimamente unido al de "grupo de trabajo".

Nota:  Internamente, tanto los usuarios como los grupos son identificados por números; la identificación UID 0 corresponde a un usuario privilegiado, tradicionalmente denominado root.  En la mayoría de sistemas Unix, estos privilegios están reservados al administrador del sistema que puede hacerlo todo, incluso dar permisos a otros usuarios.  En algunos sistemas Unix, el grupo GID 0 es también especial, ya que permite acceso sin restricciones a nivel de grupo.  Esto no es cierto en Linux, pero incluso en este sistema, el grupo 0 es especialmente importante porque la mayoría de ficheros críticos del propio sistema pertenecen a este grupo.

§4.3 Permisos

Cada fichero del sistema tiene ciertos atributos conocidos como permisos ("Permissions"), que indican qué puede hacerse con el fichero y por quién.  Existen tres tipos de permisos: de lectura; de escritura y de ejecución, representados por las letras  r, w y x (Read, Write y eXecute).

Los permisos anteriores pueden ser establecidos separadamente para cada ficheros respecto a los siguientes usuarios:

  • Usuario ( u).  El propietario del fichero
  • Grupo ( g ).  El grupo propietario del fichero
  • Usuarios ( o ).  El resto de usuarios autorizados del sistema ("Others")

Es importante señalar que los permisos de los enlaces simbólicos ("links") no se utilizan.  En su lugar se utilizan los del fichero o directorio al que apuntan.  Además, el significado de los permisos r, w y x es ligeramente distinto si se aplica a un directorio o a un fichero.  El significado en ambos casos es el señalado en la tabla adjunta.

Atributo Significado en un fichero Significado en un directorio
r Permiso de lectura: el fichero puede ser leído y copiado. Permiso de lectura: el usuario puede inspeccionar su contenido (ver que ficheros y subdirectorios contiene)
w Permiso de escritura: el contenido puede ser modificado o borrado. Permiso de escritura: el usuario puede crear, renombrar o añadir ficheros en el directorio.
x Permiso de ejecución:  en el supuesto de que el fichero sea ejecutable, puede ser llamado a ejecución. Permiso de ejecución: puesto que los directorios no pueden ser ejecutados en el mismo sentido que los ficheros, este permiso se refiere a la posibilidad de efectuar búsquedas en él y hacerlo el directorio de trabajo, y acceder a cualquier fichero o subdirectorio.

Nota:  observe que en los mundos Unix; Linux; Windows NT (actualmente W 2000) y similares, el sistema de acceso es totalmente distinto del mundo DOS (sistemas de archivo FAT 32), donde el usuario que gana acceso a la máquina, tiene acceso y permisos ilimitados sobre la totalidad de sus ficheros.


fig. 1.

§5  El Sistema Virtual de Ficheros

La versatilidad de Linux respecto a los FS se debe a que el núcleo utiliza un sistema de ficheros virtual VFS ("Virtual File System"), que actúa como una capa intermedia entre las llamadas de las aplicaciones y el módulo que realmente se encarga de las transacciones con el hardware.  Estos módulos son independientes del kernel y reemplazables [1].

Nota:  La tendencia en el diseño de Sistemas Operativos es, que gran parte de su funcionalidad se concrete en módulos externos al kernel, que son cargables según las necesidades del momento. En Linux estos módulos pueden ser cargados y descargados en run-time [2].

La figura adjunta muestra el esquema de funcionamiento.  En su interlocución con el Kernel, el proceso de usuario utiliza una interfaz homogénea que no cambia (interfaz del sistema de llamadas).  A su vez, esta interfaz traslada las llamadas al módulo correspondiente a través del VFS.  En la figura son los módulos ext2 y msdos, aunque puede cargarse cualquier otro sistema de ficheros que hayan sido incluido en la compilación del núcleo (señalados como "módulos externos" en la figura).  Mientras no son cargados, estos módulos permanecen en el disco junto al resto de módulos del Kernel, como ficheros especiales.

Nota: generalmente en el directorio /lib/modules/nombre-sistema/ (puede ver cual es el nombre del sistema actual con el comando uname -r).  Además de los módulos propiamente dichos, en este directorio existen ficheros cuyo nombre genérico es modules.*.  Contienen información sobre dependencias, ya que algunos módulos requieren la carga previa de otros antes que ellos mismos puedan ejecutarse  (estas dependencias pueden actualizarse con el comando depmod -a).  Los ficheros del directorio anterior (y subdirectorios) que terminan en .o  son módulos del Kernel (aparecen como tipo "Objet Code").

§6  Organización física

En los FS Unix/Linux se utiliza el termino bloque en lugar de unidad de asignación (cluster) para referirse al conjunto de sectores que pueden leerse/escribirse en cada operación unitaria.  Por lo general, al montar el sistema puede definirse su tamaño, que puede ser cualquier múltiplo de 2 del valor-base 1024 bytes (1024; 2048; 4096; etc), que corresponden a 2, 4, 8, ... sectores respectivamente.  El tamaño de las meta-estructuras del sistema se ajusta al tamaño de bloque utilizado.

Nota:  El tamaño de bloque no suele exceder de 4096 bytes.  Además, aunque teóricamente también puede ser una fracción del valor-base, resultado de dividirlo sucesivamente por 2 (512, 256, 128, etc), lo que se denomina fragmentación de bloque, en la práctica no suelen utilizarse bloques menores de 1024 bytes.

La funcionalidad que en los sistemas FAT está encomendada al BPB ("BIOS parameters block") del sector de carga del volumen VBS ("Volume Boot Sector" 8.1.2c2), aquí está en una estructura denominada superbloque ("Superblock").  Aunque en realidad contiene metadatos, se considera que el superbloque es el primer bloque de datos del volumen, y está localizado siempre al principio del tercer sector.  Es decir, comienza en el byte 1024.  Otras característica es que los bloques están agrupados en conjuntos ("Blocks groups").  Su número depende del dispositivo; en un disquete puede haber un único conjunto de bloques mientras que en una unidad de varios Gigabytes pueden existir decenas de estas agrupaciones.

§8  Utilidades

Linux dispone de varias utilidades para el manejo de los sistemas de ficheros ext2 (consulte los manuales correspondientes para una explicación detallada de sus opciones y manejo):

  • mke2fs.  Crear un sistema de ficheros ext2 en una partición vacía.  Equivale a la utilidad format en los sistemas FAT.
  • tune2fs.  Una herramienta para usuarios avanzados que permite ajustar determinados parámetros de funcionamiento del sistema de ficheros ext2.
  • dumpe2fs.  Imprimir información sobre el superbloque y otros metadatos del sistema de ficheros ext2 instalado en un dispositivo.
  • e2fsck.  Comprobar la integridad del sistema de ficheros.  Esta utilidad es capaz de detectar y corregir numerosas inconsistencias.  Resulta especialmente útil después de una incidencia. Por ejemplo, un apagado imprevisto.  Es el equivalente ext2 a la utilidad scandisk de los sistemas FAT DOS/Windows.
  • debugfs.  Es una herramienta de bajo nivel que permite examinar y modificar distintos aspectos de un sistema de ficheros ext2 Atención, debugfs puede resultar tan peligrosa como su homónima debug del DOS ( DEBUG).   Por lo que no es aconsejable hacer pruebas con ella sobre un sistema de explotación.
  • badblocks.  Permite buscar bloques malos en una partición.
§9  Webografía

 

  Inicio.


[1]  Inicialmente Linux carecía del VFS, que fue escrito por Chris Provenzano y reescrito completamente por Thorwald antes de su inclusión en el Kernel.

[2]  La utilidad lsmod permite inspeccionar el estado de los módulos del Kernel.

[4]  El tiempo Unix se cuenta como el número de segundos desde el inicio de la época Unix (1 de Enero de 1970  00:00:00 GMT) hasta el momento actual.  El acrónimo POSIX corresponde a "Portable Operating System Interface".  Un conjunto de estándares IEEE diseñados para facilitar la portabilidad de aplicaciones entre los distintos dialectos Unix y Linux (el estándar IEEE 1003.2 define el shell y las utilidades; el IEEE 1003.4 define las extensiones de tiempo real).

[5]  Para que Linux pueda utilizar el sistema de ficheros contenido en un volumen lógico, es necesario "montarlo". O dicho en otras palabras: declarar al Kernel que debe utilizarlo y cómo.  Esta operación se realiza con la utilidad mount, y puesto que todos los ficheros de un sistema Unix/Linux están organizados en un único árbol de directorios alrededor de un tronco común representado por el directorio raíz "/", el comando mount debe especificar en qué punto del árbol general se insertará la nueva rama representada por el sistema de ficheros añadido.

[6]  Como puede deducirse, el sistema ext2 es utilizado por distintos Sistemas Operativos.  Además de Linux, están los siguientes: GNU/Hurd (un sustituto del Kernel de Linux); FreeBSD ( 8.1.2a); Masix (un SO distribuido que puede adoptar distintas "personalidades", de forma que puede correr aplicaciones escritas para cualquier sistema -Windows, Linux, DOS, OS/2, etc) y Lites.