ant

SISTEMAS DE FICHEROS
4.8

sig

4.8 Gestionando Sistemas de Ficheros

Otra tarea del administrador de sistemas es el cuidado de los sistemas de ficheros. Mucho de este trabajo se basa en comprobaciones periódicas del sistema de ficheros en busca de ficheros dañados o corrompidos; muchos sistemas comprueban automáticamente los sistemas de ficheros en tiempo de arranque.

El sistema de ficheros que ve cualquier usuario de Unix constituye un árbol, cuyo nodo raíz se representa por el carácter "/". En este sistema de ficheros puede haber ficheros y directorios situados físicamente en distintos dispositivos, pero el usuario no necesita preocuparse de esta localización física cuando accede a los ficheros.

El sistema de ficheros global que ve el usuario puede estar a su vez constituido por varios sistemas de ficheros procedentes de dispositivos concretos. También es necesario indicar que los discos duros suelen dividirse en particiones (o secciones lógicamente independientes) que se tratarán como dispositivos en el sistema.

4.8.1 Tareas de Gestión del sistema de ficheros

El usuario de un sistema Unix usa de forma transparente ficheros/directorios situados en dispositivos locales y remotos según se mueve por el árbol del sistema de ficheros. Así, cuando se sitúa en el directorio /sbin está viendo ficheros pertenecientes al sistema de ficheros raíz, normalmente situados en un partición de disco duro, donde está instalado el sistema operativo. Cuando en otro momento el usuario se sitúa en su directorio principal (/home/login), probablemente estará viendo ficheros situados en dispostivos locales (conectados directamente a nuestro ordenador) y en otros, los ficheros accesibles estarán físicamente en algún dispositivo conectado a algún otro ordenador en red con el nuestro. Así pues, el administrador deberá encargarse de que tanto los ficheros locales como los remotos estén disponibles para su uso en el sistema.

El administrador será el encargado de añadir nuevos dispositivos de almacenamiento y quitarlos cuando se requiera, y repartir el uso del espacio de disco de forma que el funcionamiento del sistema sea lo más eficiente y seguro posible.

Otra labor del administrador del sistema es planificar los respaldos de distintas partes del sistema de ficheros con una frecuencia adecuada a la forma de trabajo con el ordenador que se administra.

Finalmente, el administrador tendrá que asegurarse de que los sistemas de ficheros se mantienen coherentes en todo momento.

4.8.2 Organización de los sistemas de ficheros


En la transparecia vemos un sistema de ficheros Unix, representando mediante un árbol con la raiz a la izquierda y las hojas a la derecha.

Las distintas cajas representadas en el árbol representan a su vez sistemas de ficheros situados en distitos dispositivos o particiones de disco. Concretamente, tenemos ficheros residentes en tres discos diferentes (con nombres a, b y c en la parte inferior de la figura). A su vez, en el disco a se han definido dos particiones diferentes. Cada una de estas particiones alberga un sistema de ficheros que se ha hecho visible en un directorio determinado del árbol global de ficheros. Esas dos particiones son /dev/hda1 y /dev/hda2 y cada una contiene un sistema de ficheros. La primera de estas particiones constituirá el sistema de ficheros raíz de nuestro sistema de ficheros global, y contendrá los ficheros y directorios del sistema operativo. La segunda partición se hace visible en el sistema de ficheros global, bajo el directorio /var.

Si miráramos las particiones de los otros discos veríamos que la partición del disco b contiene un conjunto de directorios de usuarios, y la del disco c contiene información relativa a un departamento concreto (en este caso de química).

A continuación veremos en detalle los comandos que utilizaría el administrador del sistema para hacer visibles los sistemas de ficheros de una partición en el sistema de ficheros global.

4.8.3 Montando sistemas de ficheros

Para empezar, algunos conceptos acerca de sistemas de ficheros. Antes de que un sistema de ficheros sea accesible al sistema, debe ser montado en algún directorio. Por ejemplo, si se tiene un sistema de ficheros en un disquete, se debe montar bajo algún directorio, digamos /mnt, para poder acceder a los ficheros que contiene (véase la sección 4.6.2). Tras montar el sistema de ficheros, todos los ficheros en dicho sistema aparecen en ese directorio. Tras desmontar el sistema de ficheros, el directorio (en este caso, /mnt) estará vacío.

Lo mismo es válido para los sistemas de ficheros del disco duro. El sistema monta automáticamente los sistemas de ficheros del disco duro en tiempo de arranque. El así llamado "sistema de ficheros raíz" es montado en el directorio /. Si se tiene un sistema de ficheros separado para /usr, por ejemplo, se monta en /usr.

Si sólo se tiene un sistema de ficheros raíz, todos los ficheros (incluyendo los de /usr) existen en ese sistema de ficheros.

El comando mount se utiliza para montar un sistema de ficheros. Llamando al comando mount sin parámetros, podremos ver en cualquier momento los distintos sistemas de ficheros montados en el sistema. Un ejemplo del uso del comando mount sin parámentros:
/dev/hda2 on / type ext2 (rw)
/dev/hda3 on /usr type ext2 (rw)
/dev/hda4 on none type swap
/proc on /proc type proc
Sería conveniente no tener que montar manualmente los distintos sistemas de ficheros cada vez que se arranca el sistema. Para ello, pueden indicarse los sistemas de ficheros a montar y los parámetros correspondientes de montaje en el fichero de configuración /etc/fstab.

El comando
mount -a
se ejecuta desde el fichero /etc/rc (que es el fichero de inicialización del sistema, ejecutado en tiempo de arranque; véase la sección 4.10.1). El comando mount -a obtiene información de los sistemas de ficheros y puntos de montaje del fichero /etc/fstab y los monta.

Este es un ejemplo de fichero fstab:
# dispositivo directorio tipo opciones fre-bu or-fsck
/dev/hda2 / ext2 defaults 0 1
/dev/hda3 /usr ext2 defaults 0 2
/dev/hda4 none swap sw 0 3
/proc /proc proc none 0 4
El primer campo es el dispositivo el nombre de la partición a montar. El segundo campo es el punto de montaje (directorio donde se quiere montar el sistema de ficheros). El tercero es el tipo de sistema de ficheros como puede ser ext2 (para ext2fs), ext3, msdos, iso9660, Minix (para sistemas de ficheros Minix), etc. La tabla 4.1 lista los distintos tipos de sistemas de ficheros disponibles en Linux. Puede que no todos estos tipos de sistemas de ficheros estén disponibles en su sistema; el núcleo debe tener soporte para ellos compilado en él. Véase sección 4.7 para información sobre como construir un núcleo.
Sistema de ficherosNombre de tipoComentarios
Third Extended Filesystem ext3Ofrece Journaling
Second Extended Filesystemext2Sistema de ficheros más común en Linux
Extended Filesystem extReemplazado por ext2
Minix FilesystemMinix original,no utilizado.
Network FilesystemnfsSistema de ficheros en Red
Swap FilesystemswapParticiones de intercambio
Xia FilesystemxiaComo ext2, pero raras veces utilizado.
UMSDOS FilesystemumsdosPara instalar Linux en una partición MS-DOS.
MS-DOS FilesystemmsdosUtilizado para acceder a ficheros MS-DOS.
proc FilesystemprocSuministra información de proceso para ps, etc.
ISO 9660 Filesystemiso9660Formato utilizado por muchos CD-ROMs.
Xenix FilesystemxenixSistema de ficheros de Xenix.
System V FilesystemsysvVariantes del System V para el x86
Coherent FilesystemcoherentAcceso a ficheros de Coherent.
HPFS FilesystemhpfsAcceso en lectura a particiones HPFS (DoubleSpace).
Tabla 4.1: Tipos de Sistemas de Ficheros en Linux

El cuarto campo del fichero fstab contiene las opciones del comando mount separadas por comas, normalmente, está puesto a "defaults" (defecto).

fre-bu indica la frecuencia con la que se realizarán sus copias de seguridad con el comando dump y or-fsck indica el orden en que se realizará una comprobación de la coherencia de los sistemas de ficheros. Un valor 0 en cualquiera de estos 2 campos indica opción inactiva.

En cuanto a las opciones, además de la opción rw(lectura/escritura), tenemos ro(de sólo lectura), noauto que indica que el sistema de ficheros no debe montarse automáticamente y user que indica que cualquier usuario del sistema (no solo root) podría montar el sistema de ficheros(usado para diskettes y cd-roms...). La opción noauto tiene su utilidad para a la hora de montar el sistema de ficheros utilizar el formato corto. Por ejemplo en vez de montar un sistema de ficheros de esta forma :
/bin/mount /dev/cdrom /cdrom -t iso9660 -o ro
podría hacerse de la siguiente forma:
/bin/mount /cdrom
Como se puede ver, las particiones de intercambio están incluidas en /etc/fstab también. Tienen un punto de montaje de none y tipo swap. El comando swapon -a, que se ejecuta también desde /etc/rc, se utiliza para activar el intercambio en todos los dispositivos de intercambio listados en /etc/fstab.

El fichero fstab contiene una entrada especial para el sistema de ficheros /proc. Tal y como se mencionó en la sección 3.11.1, el sistema de ficheros /proc se utiliza para almacenar información acerca de los procesos del sistema, memoria disponible, y otros datos del mismo tipo. Si /proc no está montado, no funcionaran comandos como ps.

****El comando mount solo puede ser utilizado por root. Esto es así para garantizar la seguridad del sistema; no es deseable que usuarios normales estén montando y desmontando sistemas de ficheros a su antojo. Existen varios paquetes disponibles que permiten a los usuarios normales montar y desmontar sistemas de ficheros (disquetes en particular) sin comprometer la seguridad del sistema.(los usuarios podran montar determinados sistemas de ficheros si root pone en el fichero fstab la opción user para un determinado sistema de ficheros)

El comando mount -av realmente monta todos los sistemas de ficheros excepto el sistema de ficheros raíz El sistema de ficheros raíz es montado automáticamente en tiempo de arranque por el núcleo.

En vez de utilizar el comando mount -av, se puede montar un sistema de ficheros a mano. El comando
# mount -t ext2 /dev/hda3 /usr
es equivalente a montar el sistema de ficheros con la entrada /dev/hda3 del ejemplo de fichero fstab anterior. En general, nunca se debe montar o desmontar sistemas de ficheros a mano. El comando mount -av en /etc/rc se encarga de montar los sistemas de ficheros en tiempo de arranque. Los sistemas de ficheros son desmontados por los comandos shutdown o halt antes de cerrar el sistema.

Imaginemos que tenemos un sistema de ficheros creado (más adelante explicaré como crearlos), vamos a ponerlo disponible en algún punto del sistema de ficheros global. Lo primero que tendremos que hacer es decidir dónde vamos a situarlo. Si el directorio en que queremos ponerlo no existe, lo crearemos mediante el comando mkdir
# mkdir /alumnos
Si el directorio ya existe podremos saltarnos este paso.

El siguiente paso será montar el sistema de ficheros en el directorio elegido mediante el comando mount:
# mount -t ext2 /dev/hda2 /alumnos
Debemos tener cuidado al usar un directorio existente para montar un sistema de ficheros porque el comando mount hará invisible cualquier contenido previo de dicho directorio.(no borra el contenido, ya que al desmontar el sistema de ficheros todo volverá a la 'normalidad').

Con el comando umount, podremos desmontar cualquier sistema de ficheros actualmente disponible:
# umount /alumnos

4.8.4 Accediendo a Disquetes y CD's

Hasta ahora hemos visto ejemplos de ficheros almacenados en particiones de disco duro. Sin embargo, en Unix podremos utilizar de la misma manera ficheros almacenados en disquetes o en CD-ROM.

En el caso de ficheros almacenados en un disquete, tenemos muchas formas de trabajar con ellos desde un sistema Unix. Aquí se incluyen algunas de estas posibilidades:

1. Podemos crear un sistema de ficheros local de tipo ext2 como los que tenemos en cualquier partición del disco duro, hacerlos visibles en algún punto del árbol de ficheros y tratarlos exactamente igual que si procedieran del disco duro.
2. Podemos crear un sistema de ficheros compatible con DOS (tipo msdos), y una vez montado, manipularlo como en el caso anterior con comandos normales de Unix.
3. Podemos tratar los ficheros del diskette como los trataríamos en sistemas DOS, mediante unas utilidades especiales (mtools): mdir, mcopy, ... Estas utilidades, además de tener el mismo nombre que en DOS, precedido con una "m", utilizan la misma notación para hacer referencia al diskette:
#mcopy fichero a:
4. Podemos crear ficheros especiales de respaldo en diskettes o acceder a ellos mediante comandos como tar o cpio.

Con el segundo método de acceso y la siguiente entrada en /etc/fstab

/dev/fd0 /floppy msdos rw,user,noauto 0 0
podríamos ejecutar los siguientes comandos:
# mount /floppy
# cp fichero /floppy
# ls /floppy
Puede crearse un sistema de ficheros en un disquete igual que lo haría en una partición de un disco duro. Por ejemplo,
# mke2fs /dev/fd0 1440
crea un sistema de ficheros en el disquete en /dev/fd0.

El tamaño del sistema de ficheros debe corresponder al tamaño del disquete. Los disquetes de alta densidad de 3.5" tienen un tamaño de 1.44 megabytes, o 1440 bloques. Los disquetes de alta densidad de 5.25" tienen 1200 bloques.

Para poder acceder a un disquete, se debe montar mount el sistema de ficheros que contiene.
El comando
# mount -t ext2 /dev/fd0 /mnt
montará el disquete en /dev/fd0 en el directorio /mnt. Ahora todos los ficheros del disquete aparecerán bajo /mnt en su unidad.
"-t ext2" especifica el tipo de sistema de ficheros como ext2. Si crea otro tipo de sistema de ficheros en el disquete, necesitará especificárselo al comando mount.

El "punto de montaje" (el directorio donde esta montando el sistema de ficheros) debe existir en el momento de utilizar el comando mount. Si no existiese, deba crearlo con el comando mkdir.

****Tenga en cuenta que cualquier entrada/salida al disquete se gestiona con buffers igual que si fuese de disco duro. Si cambia datos en el disquete, puede que no vea encenderse la luz de la unidad hasta que el núcleo decida vaciar sus buffers. Es importante que no quite un disquete antes de haberlo desmontado; esto puede hacerse con el comando
# umount /dev/fd0
No cambie los disquetes como se hace en un sistema MS-DOS; siempre que cambie disquetes, desmonte umount el primero y monte mount el siguiente.

Acceso a un sistema de ficheros en CD-ROM desde Linux:

. Entrada en /etc/fstab:
/dev/cdrom /cdrom iso9660 ro,user,noauto 0 0
. Montaje:
# mount /cdrom
. Acceso:
# ls /cdrom
# cp /cdrom/fichero copia

4.8.5 Comprobando sistemas de ficheros

Normalmente es una buena idea el comprobar de vez en cuando los sistemas de ficheros en busca de ficheros dañados o corrompidos. Algunos sistemas comprueban automáticamente sus sistemas de ficheros en tiempo de arranque (con los comandos apropiados en /etc/rc).
El comando utilizado para comprobar un sistema de ficheros depende del tipo de sistema de ficheros en cuestión. Para sistemas de ficheros ext2 (el tipo más utilizado normalmente), el comando es fsck. Por ejemplo, el comando
# fsck -av /dev/hda2
comprobará el sistema de ficheros ext2 de /dev/hda2 y corregirá automáticamente cualquier error.

Es IMPORTANTE el desmontar un sistema de ficheros antes de comprobarlo. Por ejemplo, el comando
# umount /dev/hda2
desmontará el sistema de ficheros en /dev/hda2, tras lo cual podrá ser comprobado.

La única excepción es que no se puede desmontar el sistema de ficheros raíz. Para poder comprobar el sistema de ficheros raíz cuando está desmontado, se debe utilizar un disquete de arranque/raíz (véase la sección 4.11.1). Tampoco se puede desmontar un sistema de ficheros si alguno de sus ficheros esta "ocupado" esto es, siendo utilizado por un proceso en ejecución. Por ejemplo, no se puede desmontar un sistema de ficheros si el directorio de trabajo de algún usuario está en ese sistema de ficheros. Se recibirá un error "Device busy" (dispositivo ocupado) si se intenta desmontar un sistema de ficheros que este en uso.

Otros tipos de sistemas de ficheros utilizan formas diferentes del comando fsck, como pueda ser efsck y xfsck. En algunos sistemas, el comando fsck determina el tipo de sistema de ficheros y ejecuta el comando apropiado.

****Es importante que se reinicialice el sistema inmediatamente después de comprobar un sistema de ficheros montado, si es que se hizo alguna corrección al sistema de ficheros. Por ejemplo, si fsck informa que ha corregido algún error en el sistema de ficheros, se debe apagar el sistema con shutdown -r para rearrancarlo. Esto permite al sistema resincronizar su información acerca del sistema de ficheros cuando fsck lo modifica.

El sistema de ficheros /proc no necesita nunca ser comprobado de esta forma. /proc es un sistema de ficheros en memoria, gestionado directamente por el núcleo.