Sistemas de archivos

�Qu� son los sistemas de archivos?

Un sistema de archivos son los m�todos y estructuras de datos que un sistema operativo utiliza para seguir la pista de los archivos de un disco o partici�n; es decir, es la manera en la que se organizan los archivos en el disco. El t�rmino tambi�n es utilizado para referirse a una partici�n o disco que se est� utilizando para almacenamiento, o el tipo del sistema de archivos que utiliza. As� uno puede decir “tengo dos sistemas de archivo” refiri�ndose a que tiene dos particiones en las que almacenar archivos, o que uno utiliza el sistema de “archivos extendido”, refiri�ndose al tipo del sistema de archivos.

La diferencia entre un disco o partici�n y el sistema de archivos que contiene es importante. Unos pocos programas (incluyendo, razonablemente, aquellos que crean sistemas de archivos) trabajan directamente en los sectores crudos del disco o partici�n; si hay un archivo de sistema existente all� ser� destruido o corrompido severamente. La mayor�a de programas trabajan sobre un sistema de archivos, y por lo tanto no utilizar�n una partici�n que no contenga uno (o que contenga uno del tipo equivocado).

Antes de que una partici�n o disco sea utilizada como un sistema de archivos, necesita ser iniciada, y las estructura de datos necesitan escribirse al disco. Este proceso se denomina construir un sistema de archivos.

La mayor�a de los sistema de archivos UNIX tienen una estructura general parecida, aunque los detalles exactos pueden variar un poco. Los conceptos centrales son superbloque, nodo-i, bloque de datos, bloque de directorio, y bloque de indirecci�n. El superbloque tiene informaci�n del sistema de archivos en conjunto, como su tama�o (la informaci�n precisa aqu� depende del sistema de archivos). Un nodo-i tiene toda la informaci�n de un archivo, salvo su nombre. El nombre se almacena en el directorio, junto con el n�mero de nodo-i. Una entrada de directorio consiste en un nombre de archivo y el n�mero de nodo-i que representa al archivo. El nodo-i contiene los n�meros de varios bloques de datos, que se utilizan para almacenar los datos en el archivo. S�lo hay espacio para unos pocos n�meros de bloques de datos en el nodo-i; en cualquier caso, si se necesitan m�s, m�s espacio para punteros a los bloques de datos son colocados de forma din�mica. Estos bloques colocados din�micamente son bloques indirectos; el nombre indica que para encontrar el bloque de datos, primero hay que encontrar su n�mero en un bloque indirecto.

Los sistemas de archivos UNIX generalmente nos permiten crear un agujero en un archivo (esto se realiza con la llamada al sistema lseek(); compruebe su p�gina de manual), lo que significa que el sistema de archivos simplemente intenta que en un lugar determinado en el archivo haya justamente cero bytes, pero no existan sectores del disco reservados para ese lugar en el archivo (esto significa que el archivo utilizar� un poco menos de espacio en disco). Esto ocurre frecuentemente en especial para peque�os binarios, librer�as compartidas de Linux, algunas bases de datos, y algunos pocos casos especiales. (los agujeros se implementan almacenando un valor especial en la direcci�n del bloque de datos en el bloque indirecto o en el nodo-i. Esta direcci�n especial indica que ning�n bloque de datos est� localizado para esa parte del archivo, y por lo tanto, existe un agujero en el archivo).

Sistemas de archivos soportados por Linux

Linux soporta una gran cantidad de tipos diferentes de sistemas de archivos. Para nuestros prop�sitos los m�s importantes son:

minix

El m�s antiguo y supuestamente el m�s fiable, pero muy limitado en caracter�sticas (algunas marcas de tiempo se pierden, 30 caracteres de longitud m�xima para los nombres de los archivos) y restringido en capacidad (como mucho 64 MB de tama�o por sistema de archivos).

xia

Una versi�n modificada del sistema de archivos minix que eleva los l�mites de nombres de archivos y tama�o del sistema de archivos, pero por otro lado no introduce caracter�sticas nuevas. No es muy popular, pero se ha verificado que funciona muy bien.

ext3

El sistema de archivos ext3 posee todas las propiedades del sistema de archivos ext2. La diferencia es que se ha a�adido una bit�cora (journaling). Esto mejora el rendimiento y el tiempo de recuperaci�n en el caso de una ca�da del sistema. Se ha vuelto m�s popular que el ext2.

ext2

El m�s sistema de archivos nativo Linux que posee la mayor cantidad de caracter�sticas. Est� dise�ado para ser compatible con dise�os futuros, as� que las nuevas versiones del c�digo del sistema de archivos no necesitar� rehacer los sistemas de archivos existentes.

ext

Una versi�n antigua de ext2 que no es compatible en el futuro. Casi nunca se utiliza en instalaciones nuevas, y la mayor�a de la gente que lo utilizaba han migrado sus sistemas de archivos al tipo ext2.

reiserfs

Un sistema de archivos m�s robusto. Se utiliza una bit�cora que provoca que la p�rdida de datos sea menos frecuente. La bit�cora es un mecanismo que lleva un registro por cada transacci�n que se va a realizar, o que ha sido realizada. Esto permite al sistema de archivos reconstruirse por s� s�lo f�cilmente tras un da�o ocasionado, por ejemplo, por cierres del sistema inadecuados.

Adicionalmente, existe soporte para sistemas de archivos adicionales ajenos, para facilitar el intercambio de archivos con otros sistemas operativos. Estos sistemas de archivos ajenos funcionan exactamente como los propios, excepto que pueden carecer de caracter�sticas usuales UNIX , o tienen curiosas limitaciones, u otros inconvenientes.

msdos

Compatibilidad con el sistema de archivos FAT de MS-DOS (y OS/2 y Windows NT).

umsdos

Extiende el dispositivo de sistema de archivos msdos en Linux para obtener nombres de archivo largos, propietarios, permisos, enlaces, y archivos de dispositivo. Esto permite que un sistema de archivos msdos normal pueda utilizarse como si fuera de Linux, eliminando por tanto la necesidad de una partici�n independiente para Linux.

vfat

Esta es una extensi�n del sistema de archivos FAT conocida como FAT32. Soporta tama�os de discos mayores que FAT. La mayor�a de discos con MS Windows son vfat.

iso9660

El sistema de archivos est�ndar del CD-ROM; la extensi�n popular Rock Ridge del est�ndar del CD-ROM que permite nombres de archivo m�s largos se soporta de forma autom�tica.

nfs

Un sistema de archivos de red que permite compartir un sistema de archivos entre varios ordenadores para permitir f�cil acceso a los archivos de todos ellos.

smbfs

Un sistema de archivos que permite compartir un sistema de archivos con un ordenador MS Windows. Es compatible con los protocolos para compartir archivos de Windows.

hpfs

El sistema de archivos de OS/2.

sysv

EL sistema de archivos de Xenix, Coherent y SystemV/386..

La elecci�n del sistema de archivos a utilizar depende de la situaci�n. Si la compatibilidad o alguna otra raz�n hace necesario uno de los sistemas de archivos no nativos, entonces hay que utilizar �se. Si se puede elegir libremente, entonces lo m�s inteligente ser�a utilizar ext3, puesto que tiene todas las caracter�sticas de ext2, y es un sistema de archivos con bit�cora.

Existe tambi�n el sistema de archivos proc, generalmente accesible desde el directorio /proc, que en realidad no es un sistema de archivos, a�n cuando lo parece. El sistema de archivos proc facilita acceder a ciertas estructura de datos del n�cleo, como la lista de procesos (de ah� el nombre). Hace que estas estructuras de datos parezcan un sistema de archivos, y que el sistema de archivos pueda ser manipulado con las herramientas de archivos habituales. Por ejemplo, para obtener una lista de todos los procesos se puede utilizar el comando

$ ls -l /proc
total 0
dr-xr-xr-x   4 root     root            0 Jan 31 20:37 1
dr-xr-xr-x   4 liw      users           0 Jan 31 20:37 63
dr-xr-xr-x   4 liw      users           0 Jan 31 20:37 94
dr-xr-xr-x   4 liw      users           0 Jan 31 20:37 95
dr-xr-xr-x   4 root     users           0 Jan 31 20:37 98
dr-xr-xr-x   4 liw      users           0 Jan 31 20:37 99
-r--r--r--   1 root     root            0 Jan 31 20:37 devices
-r--r--r--   1 root     root            0 Jan 31 20:37 dma
-r--r--r--   1 root     root            0 Jan 31 20:37 filesystems
-r--r--r--   1 root     root            0 Jan 31 20:37 interrupts
-r--------   1 root     root      8654848 Jan 31 20:37 kcore
-r--r--r--   1 root     root            0 Jan 31 11:50 kmsg
-r--r--r--   1 root     root            0 Jan 31 20:37 ksyms
-r--r--r--   1 root     root            0 Jan 31 11:51 loadavg
-r--r--r--   1 root     root            0 Jan 31 20:37 meminfo
-r--r--r--   1 root     root            0 Jan 31 20:37 modules
dr-xr-xr-x   2 root     root            0 Jan 31 20:37 net
dr-xr-xr-x   4 root     root            0 Jan 31 20:37 self
-r--r--r--   1 root     root            0 Jan 31 20:37 stat
-r--r--r--   1 root     root            0 Jan 31 20:37 uptime
-r--r--r--   1 root     root            0 Jan 31 20:37 
version
$

(Puede haber no obstante algunos archivos adicionales que no correspondan con ning�n proceso. El ejemplo anterior se ha recortado.)

Tenga en cuenta que aunque se llame sistema de archivos, ninguna parte del sistema de archivos proc toca el disco. Existe tan s�lo en la imaginaci�n del n�cleo. Cuando alguien intenta echar un vistazo a alguna parte del sistema de archivos proc, el n�cleo hace que parezca como si esa parte existiera en alguna parte, aunque no lo haga. As�, aunque exista un archivo /proc/kcore de muchos megabytes, no quita espacio del disco.

�Qu� sistemas de archivos deben utilizarse?

Existe generalmente poca ventaja en utilizar muchos sistemas de archivos distintos. Actualmente, el m�s popular sistema de archivos es ext3, debido a que es un sistema de archivos con bit�cora. Hoy en d�a es la opci�n m�s inteligente. Reiserfs es otra elecci�n popular porque tambi�n posee bit�cora. Dependiendo de la sobrecarga del listado de estructuras, velocidad, fiabilidad (percibible), compatibilidad, y otras varias razones, puede ser aconsejable utilizar otro sistema de archivos. Estas necesidades deben decidirse en base a cada caso.

Un sistema de archivos que utiliza bit�cora se denomina sistema de archivos con bit�cora. Un sistema de archivos con bit�cora mantiene un diario, la bit�cora, de lo que ha ocurrido en el sistema de archivos. Cuando sobreviene una ca�da del sistema, o su hijo de dos a�os pulsa el bot�n de apagado como el m�o adora hacer, un sistema de archivos con bit�cora se dise�a para utilizar los diarios del sistema de archivos para recuperar datos perdidos o no guardados. Esto reduce la p�rdida de datos y se convertir� en una caracter�stica est�ndar en los sistemas de archivos de Linux. De cualquier modo, no extraiga una falsa sensaci�n de seguridad de esto. Como todo en esta vida, puede haber errores. Procure siempre guardar sus datos para prevenir emergencias.

Crear un sistema de archivos

Un sistema de archivos se crea, esto es, se inicia, con el comando mkfs. Existen en realidad programas separados para cada tipo de sistemas de archivos. mkfs es �nicamente una careta que ejecuta el programa apropiado dependiendo del tipo de sistemas de archivos deseado. El tipo se selecciona con la opci�n -t fstype.

Los programas a los que -t fstype llama tienen l�neas de comando ligeramente diferentes. Las opciones m�s comunes e importantes se resumen m�s abajo; vea las p�ginas de manual para m�s informaci�n.

-t fstype

Selecciona el tipo de sistema de archivos.

-c

Busca bloques defectuosos e inicia la lista de bloques defectuosos en consonancia.

-l filename

Lee la lista inicial de bloques defectuosos del archivo dado.

Para crear un sistema de archivos ext2 en un disquete, se pueden introducir los siguiente comandos:

$ fdformat -n /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 
1440 kB.
Formatting ... done
$ badblocks /dev/fd0H1440 1440 $>$ 
bad-blocks
$ mkfs -t ext2 -l bad-blocks 
/dev/fd0H1440
mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
360 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
360 inodes per group

Writing inode tables: done
Writing superblocks and filesystem accounting information: 
done
$

Primero el disquete es formateado (la opci�n -n impide la validaci�n, esto es, la comprobaci�n de bloques defectuosos). A continuaci�n se buscan los bloques defectuosos mediante badblocks, con la salida redirigida a un archivo, bad-blocks. Finalmente, se crea el sistema de archivos con la lista de bloques defectuosos iniciada con lo que hubiera encontrado badblocks.

La opci�n -c podr�a haberse utilizado con mkfs en lugar de badblocks y un archivo a parte. El ejemplo siguiente hace esto.

$ mkfs -t ext2 -c 
/dev/fd0H1440
mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
360 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
360 inodes per group

Checking for bad blocks (read-only test): done
Writing inode tables: done
Writing superblocks and filesystem accounting information: 
done
$

La opci�n -c es m�s conveniente que la utilizaci�n a parte de badblocks, pero badblocks se necesita para comprobar el sistema de archivos una vez creado.

El proceso para preparar sistemas de archivos en discos duros o particiones es le mismo que para los disquetes, excepto que no es necesario el formateo.

Montar y desmontar

Antes de que se pueda utilizar un sistema de archivos, debe ser montado. El sistema operativo realiza entonces operaciones de mantenimiento para asegurarse que todo funciona. Como todos los archivos en UNIX est�n en un mismo �rbol de directorios, la operaci�n de montaje provocar� que el contenido del nuevo sistema de archivos aparezca como el contenido de un subdirectorio existente en alg�n sistema de archivos ya montado.

Por ejemplo, la Figura�6.4, “Tres sistemas de archivos independientes.” muestra tres sistemas de archivos independientes, cada uno de ellos con su propio directorio ra�z. Cuando se montan los dos �ltimos sistemas de archivos bajo /home y /usr respectivamente, en el primer sistema de archivos, obtenemos un �nico �rbol de directorios, como se observa en la Figura�6.5, “/home y /usr montados.”.

Figura 6.4. Tres sistemas de archivos independientes.

Tres sistemas de archivos independientes.

Figura 6.5. /home y /usr montados.

/home y /usr montados.

El montaje puede realizarse como en el siguiente ejemplo:

$ mount /dev/hda2 /home
$ mount /dev/hda3 /usr
$

El comando mount tiene dos argumentos. El primero es el archivo de dispositivo correspondiente al disco o partici�n que contiene el sistema de archivos. El segundo es el directorio bajo el cual va a ser montado. Tras estos dos comandos el contenido de los dos sistemas de archivos aparecen como los contenidos de los directorios /home y /usr, respectivamente. Se dice que “/dev/hda2 est� montado en /home”, e igualmente para /usr. Para ver cualquiera de los sistemas de archivos, se puede mirar el contenido del directorio en el que fue montado, como si fuera cualquier otro directorio. Observe la diferencia entre el archivos de dispositivo, /dev/hda2, y el directorio de montaje, /home. El archivo de dispositivo proporciona acceso al contenido crudo del disco, el directorio de montaje proporciona acceso a los archivos del disco. El directorio de montaje se denomina punto de montaje.

Linux soporta multitud de sistemas de archivos. mount intenta adivinar el tipo de sistema de archivos. Se puede utilizar la -t fstype para especificar el tipo directamente; esto es necesario en determinados casos, puesto que la heur�stica que utiliza mount no siempre funciona. Por ejemplo, para montar un disquete MS-DOS, se puede utilizar el comando siguiente:
$ mount -t msdos /dev/fd0 /floppy
$

El directorio de montaje necesita estar vac�o, aunque debe existir. Cualquier archivo en �l, en cualquier caso, ser� inaccesible por su nombre mientras el sistema de archivos est� montado. (Cualquier archivo que estuviera abierto seguir� estando accesible. Archivos que tengan enlaces duros desde otros directorios podr�n accederse utilizando esos nombres.) No hay da�o alguno haciendo esto, y puede incluso ser �til. Por ejemplo, a alguna gente le gusta tener a /tmp y /var/tmp como sin�nimos, y poner /tmp como enlace simb�lico a /var/tmp. Cuando el sistema arranca, antes de montar el sistema de archivos /var, se utiliza un directorio /var/tmp residente en el sistema de archivos ra�z en su lugar. Cuando /var se monta, convertir� al directorio /var/tmp del sistema de archivos ra�z inaccesible. Si /var/tmp no existe en el el sistema de archivos ra�z, ser� imposible utilizar los archivos temporales antes de montar /var.

Si no tiene intenci�n de escribir nada en el sistema de archivos, utilice el modificador -r de mount para realizar un montaje de s�lo-lectura. Esto provocar� que el n�cleo detenga cualquier intento de escribir en el sistema de archivos, y tambi�n impedir� que el n�cleo actualice el tiempo de acceso a los nodos-i. Montaje de s�lo-lectura son necesarios para medios no grabables, como los CD-ROM.

El lector atento habr� notado un ligero problema l�gico. �C�mo se monta el primer sistema de archivos (denominado sistema de archivos ra�z, ya que contiene al directorio ra�z), si obviamente no puede montarse sobre otro sistema de archivos? Bueno, la respuesta es que se realiza un truco de magia. [14] El sistema de archivos ra�z se monta m�gicamente a la hora del arranque, y se puede confiar en que siempre ser� montado. Si el sistema de archivos no puede montarse, el sistema no arrancar�. El nombre del sistema de archivos que m�gicamente se monta como root est� compilado dentro del n�cleo, o se especifica utilizando LILO o rdev.

El sistema de archivos ra�z se monta generalmente para s�lo-lectura. Los guiones (scripts) de inicio ejecutar�n entonces fsck para comprobar su validez, y si no hay problemas, volver� a montarlo para permitir la escritura. fsck no debe ejecutarse en sistemas de archivos montados, puesto que cualquier cambio en el sistema de archivos mientras se ejecuta fsck puede causar problemas. Como el sistema de archivos ra�z se monta como s�lo-lectura mientras se comprueba, fsck puede corregir cualquier problema sin preocuparse, porque la operaci�n de remontaje vaciar� cualquier metadato que el sistema de archivos mantuviera en memoria.

En muchos sistemas existen otros sistemas de archivos que tambi�n deben montarse de forma autom�tica durante en el arranque. Estos se especifican en el archivo /etc/fstab ; vea la p�gina de manual de fstab para los detalles en el formato. Los detalles sobre cu�ndo se montan exactamente los sistemas de archivos adicionales dependen de muchos factores, y pueden ser configurados por cada administrador si lo necesita; vea el Cap�tulo�8, Encendido y apagado.

Cuando un sistema de archivos no se necesita seguir montado, puede desmontarse con umount. [15] umount toma un argumento: o bien el archivo de dispositivo o el punto de montaje. Por ejemplo, para desmontar los directorios del ejemplo anterior, se pueden utilizar los comandos

$ umount /dev/hda2
$ umount /usr
$

Lea la p�gina de manual para m�s informaci�n sobre c�mo utilizar el comando. Es obligatorio que siempre se desmonte un disquete montado. �No saque �nicamente el disquete de la disquetera! Debido al cacheado de disco, los datos no se escriben necesariamente hasta que se desmonta el disquete, as� que sacar el disquete de la disquetera demasiado pronto puede provocar que el contenido se vuelva err�neo. Si �nicamente lee del disquete, esto no es muy usual, pero si escribe, incluso accidentalmente, el resultado puede ser catastr�fico.

Montar y desmontar requieren privilegios de superusuario, esto es, s�lo root puede hacerlo. La raz�n para esto es que si un usuario puede montar un disquete en cualquier directorio, entonces es relativamente f�cil crear un disquete con, digamos, un caballo de Troya disfrazado de /bin/sh, o cualquier otro programa frecuentemente utilizado. De cualquier modo, se necesita generalmente permitir a los usuarios utilizar los disquetes, y hay varias maneras de hacerlo:

  • Dar al usuario la contrase�a de root. Esto es obviamente inseguro, pero es la soluci�n m�s sencilla. Funciona muy bien si no hay otras necesidades de seguridad, que es el caso de muchos sistemas personales sin red.

  • Utilizar un programa como sudo para permitir a los usuarios que monten. Esto tambi�n es inseguro, pero no proporciona privilegios de superusuario directamente a todo el mundo. [16]

  • Hacer que el usuario utilice mtools, un paquete para manipular sistemas de archivos MS-DOS, sin tener que montarlos. Esto funciona bien si todo lo que se necesitan son disquetes MS-DOS, pero es bastante lioso en otros casos.

  • Listar los dispositivos flexibles y su punto de montaje permitido junto a las opciones oportunas en /etc/fstab.

La �ltima alternativa puede implementarse a�adiendo una l�nea como la siguiente en el archivo /etc/fstab:

/dev/fd0            /floppy      msdos   user,noauto      0     0

Las columnas corresponden a: archivo de dispositivo a montar, directorio de montaje, tipo de sistema de archivos, opciones, frecuencia de copia de seguridad (utilizado por dump), y el n�mero de paso para fsck (especifica el orden en el que los sistemas de archivos son comprobados en el arranque; 0 significa que no se comprueba).

La opci�n noauto impide que se monte autom�ticamente al iniciar el sistema (es decir, previene que mount -a la monte). La opci�n user permite a cualquier usuario montar el sistema de archivos, y, debido a cuestiones de seguridad, deniega la ejecuci�n de programas (normales o con setuid) y la interpretaci�n de sistemas de archivos desde el sistema de archivos montado. Despu�s de eso, cualquier usuario puede montar un disquete con un sistemas de archivos msdos con el comando siguiente:

$ mount /floppy
$

El disquete puede (y necesita de ello, por supuesto) desmontarse con la orden umount correspondiente.

Si desea otorgar acceso para varios tipos de disquetes, necesita proporcionar distintos puntos de montaje. Las opciones pueden ser diferentes para cada punto de montaje. Por ejemplo, para permitir accesos a disquetes MS-DOS o ext2, se pueden tener las siguientes l�neas en /etc/fstab:

/dev/fd0    /dosfloppy    msdos   user,noauto  0  0
/dev/fd0    /ext2floppy   ext2    user,noauto  0  0

Para sistemas de archivos MS-DOS (no s�lo disquetes), probablemente quiera restringir el acceso utilizando las opciones del sistema de archivos uid, gidy umask, descritas en detalle en la p�gina de manual de mount. Si no es cuidadoso, montar un sistema de archivos MS-DOS proporciona al menos acceso de lectura a los archivos que hay en �l, lo que no es una buena idea.

Comprobar la integridad de un sistema de archivos con fsck

Los sistemas de archivos son criaturas complejas, y como tales, tienden a ser propensos a los errores. La correcci�n y validaci�n de un sistema de archivos puede ser comprobada utilizando el comando fsck. Puede ser instruido para reparar cualquier problema menor que encuentre, y alertar al usuario si hay errores irreparables. Afortunadamente, el c�digo implementado en los sistemas de archivos puede estudiarse de forma muy efectiva, as� que escasamente hay problemas, y normalmente son causados por fallos de alimentaci�n, hardware defectuoso, o errores de operaci�n; por ejemplo, no apagar el sistema adecuadamente.

La mayor�a de los sistemas se configuran para ejecutar fsck autom�ticamente durante el arranque, as� que cualquier error se detecta (y esperemos que corregido) antes que el sistema se utilice. Utilizar un sistema de archivos corrupto tiende a empeorar las cosas: si las estructuras de datos se mezclan, utilizar el sistema de archivos probablemente las mezclar� a�n m�s, resultando en una mayor p�rdida de datos. En cualquier caso, fsck puede tardar un tiempo en ejecutarse en sistemas de archivos grandes, y puesto que los errores casi nunca suceden si el sistema se ha apagado adecuadamente, pueden utilizarse un par de trucos para evitar realizar comprobaciones en esos casos. El primero es que si existe el archivo /etc/fastboot, no se realizan comprobaciones. El segundo es que el sistema de archivos ext2 tiene una marca especial en su superbloque que indica si el sistema de archivos se desmont� adecuadamente despu�s del montaje previo. Esto permite a e2fsck (la versi�n de fsck para el sistema de archivos ext2) evitar la comprobaci�n del sistema de archivos si la bandera indica que se realiz� el desmontaje (la suposici�n es que un desmontaje adecuado indica que no hay problemas). Que el truco de /etc/fastboot funcione en su sistema depende de sus guiones (scripts) de inicio, pero el truco de ext2 funciona cada vez que utilice e2fsck. Debe ser sobrepasado expl�citamente con una opci�n de e2fsck para ser evitado. (Vea la p�gina de manual de e2fsck para los detalles sobre c�mo.).

La comprobaci�n autom�tica s�lo funciona para los sistemas de archivos que se montan autom�ticamente en el arranque. Utilice fsck de forma manual para comprobar otros sistemas de archivos, por ejemplo, disquetes.

Si fsck encuentra problemas irreparables, necesita conocimientos profundos de c�mo funciona en general un sistema de archivos, y en particular el tipo del sistema de archivos corrupto, o buenas copias de seguridad. Lo �ltimo es f�cil (aunque algunas veces tedioso) de arreglar, el precedente puede solucionarse a trav�s de un amigo, los grupos de noticias y listas de correo de Linux, o alguna otra fuente de soporte, si no sabe c�mo hacerlo usted mismo. Me gustar�a contarle m�s sobre el tema, pero mi falta de formaci�n y experiencia en este asunto me lo impiden. El programa de Theodore Ts'o debugfs puede ser de ayuda.

fsck debe ser utilizado �nicamente en sistemas de archivos desmontados, nunca en sistemas de archivos montados (a excepci�n del ra�z en s�lo-lectura en el arranque). Esto es as� porque accede al disco directamente, y puede por lo tanto modificar el sistema de archivos sin que el sistema operativo se percate de ello. Habr� problemas, si el sistema operativo se confunde.

Comprobar errores en el disco mediante badblocks

Puede ser buena idea comprobar los bloques defectuosos peri�dicamente. Esto se realiza con el comando badblocks. Saca una lista de los n�meros de todos los bloques malos que puede encontrar. Esta lista puede introducirse en fsck para grabar en el sistema de archivos las estructuras de datos para que el sistema operativo no intente utilizar los bloques malos para almacenar datos. El ejemplo siguiente muestra c�mo puede hacerse esto.

$ badblocks /dev/fd0H1440 1440 > 
bad-blocks
$ fsck -t ext2 -l bad-blocks 
/dev/fd0H1440
Parallelizing fsck version 0.5a (5-Apr-94)
e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Check reference counts.
Pass 5: Checking group summary information.

/dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED *****
/dev/fd0H1440: 11/360 files, 63/1440 blocks
$

Si badblocks informa de que un bloque se est� utilizando, e2fsck intentar� mover el bloque a otro lugar. Si el bloque estaba realmente defectuoso, no tan s�lo marginado, el contenido del archivo puede estar corrupto.

Luchar contra la fragmentaci�n

Cuando un archivo se escribe en el disco, no puede escribirse siempre en bloques consecutivos. Un archivos que no est� almacenado en bloques consecutivos est� fragmentado. Leer un archivo fragmentado requiere mayor tiempo, puesto que la cabeza de lectura-escritura del disco debe moverse m�s. Es deseable evitar la fragmentaci�n, aunque es un problema menor en un sistema con un buen cach� buffer con lectura progresiva.

El sistema de archivos ext2 intenta mantener la fragmentaci�n al m�nimo, manteniendo todos los bloques de un archivo juntos, incluso cuando no pueden almacenarse en sectores consecutivos. Ext2 efectivamente localiza el bloque libre m�s cercano a los otros bloques del archivo. Por lo tanto para ext2 hay poca necesidad de preocuparse por la fragmentaci�n. Existe un programa para desfragmentar un sistema de archivos ext2, llamado extra�amente defrag [24].defrag [17] .

Existen muchos programas de desfragmentaci�n MS-DOS que mueven los bloques por todo el sistema de archivos para eliminar la fragmentaci�n. Para otros sistemas de archivos, la desfragmentaci�n debe hacerse guardando el sistema de archivos, volverlo a crear, y restaurando los archivos de la copia guardada. Guardar un sistema de archivos antes de desfragmentarlo es una buena idea para cualquier sistema de archivos, puesto que muchas cosas pueden ir mal durante la desfragmentaci�n.

Otras herramientas para todos los sistemas de archivos

Algunas herramientas adicionales pueden resultar �tiles para manejar sistemas de archivos. df muestra el espacio libre en disco de uno o m�s sistemas de archivos. du muestra cu�nto espacio en disco ocupa un directorio y los archivos que contiene. Estos pueden utilizarse para encontrar desperdiciadores de espacio en disco. Ambos tienen p�ginas de manual que detallan las (muchas) opciones que pueden utilizarse.

sync fuerza que todos los bloques en el buffer cach� no escritos (vea la Secci�n 7.6“ El Buffer Cache”) se escriban al disco. Es raro hacer esto esto a mano; el demonio update hace esto autom�ticamente. Puede ser �til en caso de cat�strofe, por ejemplo si update o su proceso ayudante bdflush muere, o si debe apagar el ordenador ahora y no puede esperar que se ejecute update. De nuevo, est�n las p�ginas de manual. El comando man es su mejor amigo en linux. Su sobrino apropos es tambi�n muy �til cuando no sabe cu�l es el nombre del comando que quiere.

Otras herramientas para el sistema de archivos ext2/ext3

Adem�s del creador (mke2fs) y del comprobador (e2fsck) de sistemas de archivos accesibles directamente o a trav�s de las caretas independientes del tipo del sistema de archivos, ext2 posee herramientas adicionales que pueden resultar �tiles.

tune2fs ajusta par�metros del sistema de archivos. Algunos de los par�metros m�s interesantes son:

  • Un contador m�ximo de montados. e2fsck fuerza una comprobaci�n cuando el sistema de archivos se ha montado demasiadas veces, incluso si la bandera de limpiado est� activa. Para un sistema que se utiliza para desarrollo o pruebas de sistema, puede ser una buena idea reducir este l�mite.

  • Un tiempo m�ximo entre comprobaciones. e2fsck puede tambi�n forzar un tiempo m�ximo entre dos comprobaciones, incluso si la bandera de limpiado est� activa, y el sistema de archivos no se monta frecuentemente. De cualquier forma, esto puede desactivarse.

  • N�mero de bloques reservados para root. Ext2 reserva algunos bloques para root de manera que si el sistema de archivos se llena, todav�a ser� posible realizar tareas de administraci�n sin tener que borrar nada. La cantidad reservada es por defecto el 5%, lo que en la mayor�a de discos no supone un desperdicio. De cualquier manera, para los disquetes no existe justificaci�n en reservar ning�n bloque.

Vea la p�gina de manual de tune2fs para m�s informaci�n.

dumpe2fs muestra informaci�n acerca de un sistema de archivos ext2, la mayor�a referente al superbloque. La Figura�6.6, “ Salida de ejemplo de dumpe2fs muestra una salida de ejemplo. Alguna informaci�n en la salida es t�cnica y requiere comprensi�n acerca de c�mo trabaja el sistema de archivos (vea el ap�ndice XXX ext2fspaper), pero la mayor�a es comprensible incluso para aprendices.

Figura 6-5.

Figura 6.6. Salida de ejemplo de dumpe2fs


dumpe2fs�0.5b,�11-Mar-95�for�EXT2�FS�0.5a,�94/10/23
Filesystem�magic�number:��0xEF53
Filesystem�state:���������clean
Errors�behavior:����������Continue
Inode�count:��������������360
Block�count:��������������1440
Reserved�block�count:�����72
Free�blocks:��������������1133
Free�inodes:��������������326
First�block:��������������1
Block�size:���������������1024
Fragment�size:������������1024
Blocks�per�group:���������8192
Fragments�per�group:������8192
Inodes�per�group:���������360
Last�mount�time:����������Tue�Aug��8�01:52:52�1995
Last�write�time:����������Tue�Aug��8�01:53:28�1995
Mount�count:��������������3
Maximum�mount�count:������20
Last�checked:�������������Tue�Aug��8�01:06:31�1995
Check�interval:�����������0
Reserved�blocks�uid:������0�(user�root)
Reserved�blocks�gid:������0�(group�root)

Group�0:
��Block�bitmap�at�3,�Inode�bitmap�at�4,�Inode�table�at�5
��1133�free�blocks,�326�free�inodes,�2�directories
��Free�blocks:�307-1439
��Free�inodes:�35-360

debugfs es un debugger para un sistema de archivos. Permite acceso directo al sistema de archivos y a las estructuras de datos almacenadas en el disco y puede utilizarse por tanto para reparar un disco tan estropeado que fsck no puede repararlo autom�ticamente. Tambi�n es conocido por recuperar archivos eliminados. De cualquier modo, debugfs requiere mucho que comprenda lo que est� haciendo: un fallo puede destruir todos sus datos.

dump y restore pueden utilizarse para guardar un sistema de archivos ext2. Hay versiones espec�ficas para ext2 de las herramientas tradicionales de copias de seguridad UNIX. Vea el Cap�tulo 12 Cap�tulo�12, Copias de seguridad (Backups) para m�s informaci�n sobre copias de seguridad.



[14] Para conocer mas detalles lea los archivos fuentes del kernel, o el libro Kernel Hackers' Guide.

[15] Este nombre deber�a ser por supuesto unmount, pero la n misteriosamente desapareci� en los a�os 70s, y no se ha visto desde entonces. Por favor, devuelva esta letra a los laboratorios Bell, NJ, si llegase a encontrarla.

[16] Se requieren varios segundos de duro pensamiento.. It requires several seconds of hard thinking on the users' behalf. Furthermore sudo can be configured to only allow users to execute certain commands. See the sudo(8), sudoers(5), and visudo(8) manual pages.