Story Transcript
El sistema de ficheros en Linux Pedro Pablo Fábrega Martínez Este documento describe las características principales de los sistema de ficheros en linux y las operaciones necesarias básicas de mantenimiento.
Tabla de contenidos Sistema de ficheros ...............................................................................................................3 Montaje y desmontaje de un sistema de ficheros...........................................................6 Espacio de intercambio......................................................................................................10 Organización del almacenamiento..................................................................................10 Cuotas de disco....................................................................................................................14 Seguridad en el sistema de ficheros ................................................................................16
Sistema de ficheros Tipos y dispositivos Definición y tipos de sistemas de ficheros En primer lugar vamos a definir un sistema de ficheros como la organización lógica de un dispositivo que nos permite almacenar y recuperar información en forma de fichero. Existen diversos tipos de sistemas de ficheros, es decir diferentes formas de organizar la información en un dispositivo, normalmente discos. Entre los más habituales tenemos: •
ext2, ext3 Es el sistema de ficheros nativo de Linux. Se organiza en un superbloque, i-nodos y área de datos. Este tipo de sistema de ficheros admite características multiusuario para indicar los permisos y la propiedad de ficheros y directorios.
•
vfat 12, 16 y 32 Es el sistema de ficheros usados por la gama baja de las plataformas win32. No admite características multiusuario como propiedad de ficheros. Estos tipos de sistemas de ficheros se basan en un directorio y una tabla de localización que dependiendo del tamaño de cada elemento se denomina FAT 12, 16 o 32. Linux los admite sin ningún problema, aunque siempre es preferible usar ext2.
•
iso9660Es el sistema de ficheros propio de los CDROM.
•
msdos Análogo a los sistemas FAT, aunque sólo admite ficheros con nombre 8+3.
Particiones Una partición es una división del disco que se gestiona de forma lógica independiente al resto de las particiones del disco. Cada partición puede contener su propio sistema de ficheros. Esta división se describe en la tabla de particiones que se encuentra en el sector cero del disco (MBR). Tenemos que tener en cuenta que Linux necesita al menos una partición para su sistema de ficheros raíz. Además también es necesario usar particiones de intercambio (swap) en la mayoría de los casos. En equipos compatibles con Intel, la BIOS que arranca el sistema puede a menudo acceder solamente a los primeros 1024 cilindros del disco. Por esta razón la gente con discos grandes a menudo crean una tercera partición, de sólo unos cuantos MB de grande, montada típicamente en /boot, para almacenar allí la imagen del núcleo y unos pocos ficheros auxiliares que se necesitan en el momento del arranque, de forma que uno se asegure de que estas cosas están accesibles para la BIOS. Por razones de seguridad, facilidad de administración, copias de seguridad o pruebas, uno puede querer hacer más particiones de las mínimas recomendadas anteriormente.
Dispositivos En particular los dipositivos de almacenamiento que nos interesan son los discos. La partición es un nombre de dispositivo seguido por un número de partición. Por ejemplo, /dev/hda1 es la primera partición del primer disco duro IDE en el sistema. Tenemos distintos tipos de dispositivos para discos: Floppy: /dev/fdX donde fd indica floppy disk X indica las características de la unidad. Lo más habitual es que X tenga el valor 0 (primera unidad de floppy) aunque
3
El sistema de ficheros en Linux también podemos indicar las características físicas de los disquetes con los distintos valores de X. Por ejemplo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw---brw-rw----
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega pfabrega
floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy floppy
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0 Jan 11 2000 /dev/fd0 12 Jan 11 2000 /dev/fd0D360 16 Jan 11 2000 /dev/fd0D720 28 Jan 11 2000 /dev/fd0H1440 12 Jan 11 2000 /dev/fd0H360 16 Jan 11 2000 /dev/fd0H720 4 Jan 11 2000 /dev/fd0d360 8 Jan 11 2000 /dev/fd0h1200 20 Jan 11 2000 /dev/fd0h360 24 Jan 11 2000 /dev/fd0h720 1 Jan 11 2000 /dev/fd1 13 Jan 11 2000 /dev/fd1D360 17 Jan 11 2000 /dev/fd1D720 29 Jan 11 2000 /dev/fd1H1440 13 Jan 11 2000 /dev/fd1H360 17 Jan 11 2000 /dev/fd1H720 5 Jan 11 2000 /dev/fd1d360 9 Jan 11 2000 /dev/fd1h1200 21 Jan 11 2000 /dev/fd1h360 25 Jan 11 2000 /dev/fd1h720
Observamos como en lugar del tamaño del fichero nos aparecen los numeros mayor (2) y menor del dispositivo. En el listado anterior /dev/fdH1440 haría referencia a la segunda unidad de disquete de alta densidad trabajando con una capacidad de 1440k. Discos duros IDE. /dev/hdxy donde x representa la unidad completa con los valores a,b,c y d para los cuatro posibles discos duros IDE. El valor y representa el número de partición dentro de cada uno de los discos. Por ejemplo /dev/hdc1 representa la primera partición del tercer disco duro. Si omitimos el número de partición estaremos haciendo referencia a la unidad de disco completa, sin tener en cuenta particiones. Un lector de cdrom IDE se representa como una unidad completa, por ejemplo /dev/hdb, si estuviera como esclavo de la IDE primaria. Linux admite hasta 8 discos IDE (a-h). Los discos IDE pueden tener hasta 63 particiones. Discos duros SCSI /dev/sdxy Muy parecido a los discos IDE salvo que no existe la limitación de 8 dispositivos. Los discos SCSI pueden tener hasta 15 particiones. Lector de cdrom SCSI /dev/scdx donde x toma los valores entre 0 y 7.
Creación de la partición Para modificar las particiones de una uniad de disco disponemos de la orden fdisk. Con la orden fdisk podemos ver la lista de particiones de una determinada unidad si le añadimos la opción -l. Por ejemplo: fdisk -l /dev/hda 4
El sistema de ficheros en Linux
Disk /dev/hda: 14 heads, 49 sectors, 969 cylinders Units = cylinders of 686 * 512 bytes Device Boot Start /dev/hda1 * 1 166 /dev/hda2 167 943 /dev/hda3 944 969
End Blocks Id System 56913+ 6 FAT16 266511 83 Linux 8918 82 Linux swap
Nos dice que tenemos un disco con tres particiones. La primera de tipo FAT16, la segunda de tipo Linux (ext2) y una tercera de intercambio (swap). Si lo que queremos es modficar la lista de particiones entonces usamos la orden fdisk indicando sólo el dispositivo correspondiente a la unidad que queremos editar. Por ejemplo: fdisk /dev/hda y el sistems responde con: Command (m for help):
Si pulsamos m, obtenemos el menú de opciones de fdisk: Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
Como opciones más importantes tenemos: d para borrar una partición, n para añadir una nueva partición, l para ver los tipos de particiones disponibles y t para modificar el tipo de partición. La opción
5
El sistema de ficheros en Linux p nos muestra los resultados iguales a la salida de la opción -l de la línea de órdenes. Con la opción q salimos sin realizar modificaciones. Con la opción w se graban los cambios. Cada nueva partción que creamos se asigna el tipo Linux (ext2). Si queremos crearla de otro tipo tendremos que modificarla con las opciones l y t. Si en el sistema tenemos una única partición de tipo FAT y no queremos perder la información almacenada, antes de instalar Linux, deberemos de desfragmentar el disco y usar fips u otro programa para crear una nueva partición. En general, al modificar una partición se pierde todo su contenido.
Creación de un sistema de ficheros: mkfs Una vez que tenemos creada un partición podemos dedicarla a dos usos; para contener ficheros o bien como partición de intercambio; este último caso lo veremos más adelante. Pues bien, para contener ficheros necesitamos crear un sistema de ficheros en la partición. Para esto disponemos de la orden mkfs, a la cual le tendremos que indicar el tipo de sistema, con la opción -t y el dispositivo en el que quermos crearla. Por ejemplo, para crear un sistema de ficheros en la segunda partición del tercer disco duro ide, pondremos: mkfs -t ext2 /dev/hdc2 A estas alturas el lector se debe imaginar que al crear un nuevo sistema de ficheros en una partición se borra el contenido previo de dicha partición. Al crear un sistema de ficheros se crea automáticamente el directorio lost+found. Este directorio lo utiliza el sistema para guardar la información perdida cuando se deteriora el sistema de ficheros correspondiente.
Verificar un sistema de ficheros: fsck En ciertas ocasiones es necesario verificar la integridad del sistema de ficheros y corregir los posibles errores que hubiese. Esta acción la realiza la orden fsck. Para verificar un sistema de ficheros es aconsejable hacerlo mientras este está desmontado. Es una forma de evitar riesgos innecesarios. Si tiene que verificar alguna partición que el sistema monta automáticamente durante el arranque reinicie su sistema poniendo init=/bin/bash en el indicador de lilo. Ver la página del manual para más detalles.
6
El sistema de ficheros en Linux
Montaje y desmontaje de un sistema de ficheros Todos los ficheros y directorios disponibles en un sistema Unix están organizados en un único árbol cuya raíz es el directorio /. Los ficheros pueden estar distribuidos entre distintos dispositivos. Mediante la orden mount podemos añadir un sistema de ficheros contenido en algún dispositivo, por ejemplo una partición de disco duro, disquete, etc., al árbol de directorios. Habitualmente nos referiremos a esta operación como "montar una partición disquete o cdrom". El montaje se realiza en un directorio existente en el sistema de ficheros, en el cual apareceran los contenidos del sistema de ficheros que hay en el dispositivo. Este directorio se conoce como punto de montaje. Si el directorio punto de montaje tuviera algún contenido previo, este se oculta y sólo aparece lo que haya en el dispositivo montado. Para desmontar un sistema de ficheros contenido en un dispositivo se utiliza la orden umount. Para desmontar el dispositivo es necesario que no esté en uso por ninguna aplicación. Es importante tener en cuenta los buffers de disco. Cuando se escriben datos en el disco no se actualizan instantáneamente, sino que el sistema los guarda en un buffer que vuelca a disco transcurrido un cierto tiempo. La orden de desmontar un sistema de ficheros fuerza la actualización del disco. Por este motivo si extraemos un disquete de la unidad antes de desmontarlo es muy probable que obtengamos datos incoherentes. Un caso particular es el sistema de ficheros virtual /proc. Este sistema de ficheros no está asociado a ningún dispositivo y en él aparecerá diversa información sobre el sistema. Tiene que existir el punto de montaje, el sistema se encarga del resto.
El buffer de disco Los dispositivos de bloque disponen de un buffer sobre el que se realizan las operaciones de escritura. Este sistema agiliza bastante los accesos a disco, no hay más que comprobar la rapidez en la escritura en disquete y permite al sistema seguir trabajando normalmente cuando realiza una operación de ese tipo. El sistema gestiona las actualizaciones de disco de una forma eficiente y además en cualquier momento la podemos forzar con lorden sync. Ver la página de manual para más detalles.
mount La orden mount permite incorporar un sistema de ficheros existente en una partición al árbol de directorios Unix. En general el uso de la orden mount tiene la siguiente forma: mount -t tiposistemaficheros /dev/dispositivo /punto montaje donde tiposistemaficheros puede ser ext2, vfat, msdos, ntfs, iso9660 o cualquier otro sistema de ficheros reconocido por el núcleo Linux. /dev/dispositivo indica el dispositivo que contiene el sistema de ficheros. Puede ser un disquete, partición de disco duro o cdrom. 7
El sistema de ficheros en Linux /puntomontaje será el directorio donde queremos que aparezcan los ficheros conenidos en el dispositivo montado. El tipo de sistema de ficheros también puede ser smb o nfs, pero en este caso tendremos que sustituir el dispositivo por los datos de red necesarios para realizar el montaje. Ambos tipos de sistemas de ficheros son en red, almacenados físicamente en una máquina remota con conexión por red.
umount La orden umount desmonta un sistema de ficheros del árbol de directorios principal. Ninguno de los ficheros o directorios de su sistema de ficheros puede estar en uso para poderlo desmontar. Además esta orden fuerza el volcado de los buffer de disco y la actualización del superbloque del sistema de ficheros. Si por alguna circuntancia, pérdida de alimentación eléctrica por ejemplo, la partición deja de usarse sin desmontar, la próxima vez que se monte el sistema lo detecta y le solicitará que la verifique con fsck.
El fichero /etc/fstab Anteriormente hemos hablado de las particiones que el sistema monta automáicamente cuando arranca; este montaje automático de las particiones lo podemos encontrar en el fichero /etc/fstab. Pero en este fichero no sólo podemos indicar qué particiones se montan automáticamente en el proceso de arranque, sino que además podemos proporcionar configuraciones adicionales sobre el sistema de ficheros; por ejemplo se pueden habilitar las cuotas de usuario, se pueden establecer cómo sólo lectura y otas muchas más características. Empezaremos viendo un ejemplo de fichero y más adelate describiremos los detalles principales. Este sería el contenido de un fichero /etc/fstab /dev/hda2 / ext2 defaults 1 1 none /proc proc defaults 0 0 /dev/sda4 /mnt ext2 defaults,noauto 0 0 /dev/hda3 none swap defaults 0 0 Como podemos observar, el fichero consta de varios campos. dispositivo: Es el dispositivo que contiene el sistema de fichros. En caso del directorio virtual /proc no existe dispositivo. punto de montaje: Es el directorio donde aparecerán los ficheros y directorio existente en el dispositivo montado. sistema de ficheros: Es el tipo de sistema de ficheros que el sistema espera encontrar en el correspondiene dispositivo. Sistemas de ficheros válidos son ext2, iso9660 y vfat. También puede ser swap para una partición de intercambio. En general podremos poner cualquier sistema de ficheros admitido por el núcleo. 8
El sistema de ficheros en Linux opciones de montaje: En general indicamos como queremos que actúe ese sistama de ficheros. Podemos poner en este campo una lista de opciones separadas por comas. Opciones posibles son:
•
async Toda la E/S al sistema de ficheros debería hacerse asíncronamente.
•
auto: Puede montarse con la opción -a de la orden mount.
•
defaults: Emplear las opciones predeterminadas: rw, suid, dev, exec, auto, nouser y async.
•
dev: Interpretar dispositivos especiales de caracteres o bloques en el sistema de ficheros.
•
exec: Permitir la ejecución de binarios.
•
noatime: No actualizar los tiempos de acceso a i-nodo en este sistema de ficheros (p.ej., para un acceso más rápido).
•
noauto: No monta automáticamente, pero mantiene la información sobre las características del sistema de ficheros. Con esta opción basta poner el dispositivo o el punto de montaje en la orden mount para montar el sistema de ficheros con todas las opciones indicadas. Esta entrada es habitual con los cdrom.
•
nodev: No interpreta o reconocer dispositivos o ficheros especiales de bloques o caracteres en este sistema de ficheros. Esta opción nos asegura que nadie podrá crear dispositivos que pudieran poner en riesgo el sistema.
•
noexec: No permitir la ejecución de ningún binario en el sistema de ficheros montado. Esta opción puede ser útil para un servidor que tiene sistemas de ficheros que contienen binarios para otras arquitecturas distintas de la suya.
•
nosuid: No permite el efecto de los bits SUID ni SGID.
•
nouser: No permite a un usuario ordinario (esto es, distinto de root) montar el sistema de ficheros. Esto es lo predeterminado.
•
ro: Monta el sistema de ficheros de lectura exclusiva.
•
rw: Montar el sistema de ficheros de lectura y escritura.
•
suid: Permitir el efecto de los bits SUID y SGID.
•
sync: Toda la E/S al sistema de ficheros debería hacerse síncronamente.
•
user: Permitir a un usuario ordinario montar el sistema de ficheros. Esta opción implica las opciones noexec, nosuid y nodev (a menos que se sustituyan por otras subsiguientes, como en la línea de opciones user,exec,dev,suid).
En el ejemplo podemos ver como la partición /dev/sda4 tiene la opción noauto. Este dispositivo se corresponde a una unidad Zip y podemos montarlo poniendo simplmente mount /mnt o mount /dev/sda4. •
volcado: El siguiente campo indica si se tiene que establecer el volcado del sistema de ficheros.
•
verificación: Este campo establece el orden de verificación del sistema de ficheros con fsck en el montaje. La partición raíz devería tener el valor 1 y el resto que se quieran verificar el valor 2.
9
El sistema de ficheros en Linux
El fichero /etc/mtab En este fichero el sistema anota cada uno de los sistemas de fichros montados y su punto de montaje. Una forma de leer este fichero es usar la orden mount sin argumentos y obtendremos la lista de sistemas de ficheros montados.
Espacio de intercambio El espacio de intercambio o swap es un área de almacenamiento para contener datos que el sistema quiere extraer de la memoria para poderlos reponer cuando los necesite. Este espacio de intercambio puede ser toda una partción o un fichero. Para una partición de swap tendremos que crearla de este tipo, como vimos con fdisk.
Creación: mkwsap Con esta orden creamos un espacio de almacenamieto de intercambio. La orden se usa como: mkswap espacio tamaño] donde espacio es una partición o un fichero; tamaño indica lo que su nombre. Si vamos a crear un fichero de swap es necesario que no tenga huecos, es decir que su tamaño coincida con el almacenamiento en disco. En el manual de mkswap vemos la forma de crear un fichero de swap: dd if=/dev/zero of=fichero-swap bs=1024 count=8192 mkswap fichero-swap 8192
sync
swapon fichero-swap
Activación: swapon swapoff Como podemos intuir del ejemplo anterior swapon activa una zona de almacenamiento. Con la opción -a activa todas las particiones de swap indicadas en el fichero /etc/fstab.
Organización del almacenamiento Hasta ahora hemos hablado de ficheros que están en el directorio /etc , otros que están el directorio /dev. Llegado este punto vamos a hacer una descripción de los directorios estándares de un sistema linux (unix en general). En un sistema Unix cada directorio tiene una función concreta y, una vez que uno se familiariza, es muy fácil encontrar aquello que buscamos. También veremos que cada uno de estos directorios pueden estar en una partición distinta, salvo ciertos casos que se justificarán debidamente.
Distribución estándar La distribución estándar de directorios suele ser la siguiente: drwxr-xr-x 2 root root 2048 Dec 23 02:25 bin 10
El sistema de ficheros en Linux drwxr-xr-x 2 root root 1024 Dec 19 23:35 boot drwxr-xr-x 5 root root 34816 Dec 26 1986 dev drwxr-xr-x 22 root root 2048 Dec 26 1986 etc drwxr-xr-x 4 root root 1024 Dec 19 23:26 home drwxr-xr-x 4 root root 3072 Jan 5 2000 lib drwxr-xr-x 2 root root 1024 Dec 20 00:31 lost+found drwxr-xr-x 2 root root 1024 Dec 20 00:10 mnt dr-xr-xr-x 30 root root 0 Dec 25 20:09 proc drwxr-xr-x 4 root root 1024 Dec 23 00:38 root drwxr-xr-x 3 root root 2048 Jan 11 2000 sbin drwxrwxrwt 4 root root 1024 Dec 26 1986 tmp drwxr-xr-x 16 root root 1024 Dec 19 23:17 usr drwxr-xr-x 16 root root 1024 Nov 10 13:19 var Durante el proceso de arranque el sistema necesitará la información almacenada en distinto orden. Lo primero que necesita el sistema es leer el núcleo, y a continuación la partición raíz, de donde leerá los ficheros de configuración para activar el resto del sistema. En este proceso de arranque el sistema necesita ejecutar ciertas órdenes hasta montar todas las particiones. Por este motivo podemos distinguir tres niveles en el arranque: •
Carga del núcleo
•
Montaje de la partición raíz
•
Configuración del sistema.
En la carga del núcleo se utiliza la BIOS para la lectura de disco. Lilo ya sabe los cluster del disco donde está el núcleo, pero no puede (en versiones antiguas) leer más allá del cluster 1024. Por este motivo en muchas ocasiones nos interesa crear una pequeña partición de disco para almacenar el núcleo de forma que esté accesible. En el montaje de la partición raíz el sistema necesita leer ciertos ficheros de configuración, inittab, fstab, y otros que están en el directorio /etc. Evidentemente el directorio /etc tendrá que estar necesariamente en la partición raíz. Evidentemente los dispositivos también tienen que estár disponibles al principio del arranque, así como ciertas órdenes de usuario y de administración, así como sus bibliotecas de funciones.
Características de cada directorio /boot: Este directorio se utiliza para contener el fichero del núcleo linux y otra serie de ficheros necesario durante la carga del núcleo. Los datos de este directorio son necesarios antes incluso de cargar la partición raíz. Si se opta por situar este directorio en una partición independiente para él, es necesario que esta partición esté ubicada en los 1024 primeros primeros cilindros del disco para que el BIOS pueda leerla durante el aranque. Tiene una tasa de escritura muy baja.
11
El sistema de ficheros en Linux /etc: Este directorio contiene todos los ficheros de configuración, tanto del sistema como de la mayoría de las aplicaciones que corren en el sistema. Este directorio tiene que estar necesariamente en la partición raíz, ya que de él se obtiene la información para completar el proceso de arranque del sistema. Por ejemplo el fichero inittab describe el proceso principal del sistema. También está el fichero /etc/fstab que describe las particiones que se tienen que montar. Tiene una tasa de escritura muy baja. /dev: Este directorio contiene todos los ficheros de dispositivo. Como durante el proceso de arranque el sistema tiene que tener acceso a los diferentes dispositivos es necesario que este directorio esté contenido en la partición raíz. Tiene una tasa de escritura muy baja. /bin: Este directorio contiene los ficheros ejecutables, programas de usuario, que son necesarios durante el proceso de arranque del sistema. Por sus propias características este directorio tiene que estar contenido en la partición raíz. Tiene una tasa de escritura muy baja. /sbin: Este directorio tiene las mismas características que el directorio /bin, salvo que contiene programas de administración necesarios durante el arranque. También tiene que estar en la partición raíz. Tiene una tasa de escritura muy baja. /lib: Este directorio contiene ficheros de biblioteca de funciones para cargarlas dinámicamente. Los programas toman dinámicamente el código ejecutable de estos ficheros, normalmente los almacenados en /bin o /sbin. Este directorio también tiene que estar en la partición raíz. Tiene una tasa de escritura muy baja. /usr: Este directorio contiene el resto de los programas instalados y el resto de las librerías de funciones. En este directorio podemos encontrar los directorios /usr/bin, /usr/sbin y /usr/lib; estos directorios tienen un uso similar a sus homónimos del directorio raíz, salvo que no son necesarios durente el proceso del arranque. En consecuencia el directorio /usr puede estar almacenado en una partición propia. Este directorio tiene una tasa de escritura baja. /var: En este directorio el sistema guarda los datos que se modifican habitualmente durante el funcionamiento normal. Por ejemplo en este directorio se almacenan las distintas colas, de impresión, de correo, de faxes, etc, los ficheros de registro de incidencias del sistema, los ficheros de bloqueo de procesos, etc. Este directorio sí tiene una tasa alta de escritura. Este directorio puede estar en una partición propia. /tmp: Es el fichero dedicado a almacenar ficheros temporales. Puede estar en cualquier partición y tiene una tasa alta de escritura. /home: Este directorio contiene los directorios personales de los usuarios. Puede estar en cualquier partición y tiene una tasa de escritura que dependerá del número 12
El sistema de ficheros en Linux de usuarios. El directorio personal del root está en la partición raíz. /mnt: Este directorio se suele usar como punto de montaje de otras particiones de datos, cdrom y discos flexibles. Tendrá ciertos subdirectorios para montar estos dispositivos. /proc: Este directorio contiene información sobre el sistema, interrupciones, direcciones E/S información sobre los procesos, etc. Su contenido es virtual, no son ficheros reales. /opt: Este directorio se utiliza para instalar ciertos programas.
Distribución del almacenamiento. Uno de los problemas con que se puede encontrar el administrador a la hora de instalar un sistema es decidir qué espacio se deja a cada partición. Anteriormente hemos visto las características de cada directorio de la distribución estándar en un sistema Linux. Como consecuencia de esto vemos que sólo podemos montar en particiones distintas los directorios /usr, /var y /home; también se podría montar el directorio /tmp. Hay que observar que también se pueden montar en particiones los subdirectorios de estos directorios. Un sistema siempre se puede instalar usando una única partición, pero es aconsejable distribuir el almacenamiento en distintas particiones y en caso de que una partición falle no se pierden todos los datos. Para realizar la distribución de particiones hay que tener en cuenta qué uso se e va a dar al sistema. A continuación vamos a dar unas ideas orientativas, pero en última instancia es el administrador el que tiene que tomar la decisión para su caso concreto. Anteriormente ya vimos una descripción de lo que almacena cada directorio, ahora vamos a ver los distintos usos a los que se puede destinar un equipo. Como ya hemos dicho, esta distribución depende de los servicios que queramos dar. En primer lugar habría que distinguir entre una estación de trabajo y un equipo servidor. En las estaciones de trabajo debería primar el directorio /home. En este directorio es donde se almacena la información personal, que tal vez lo más importante en los sistemas de este tipo. Si montamos este directorio en una partición propia tendremos la ventaja de poder realizar instalaciones y actualizaciones del sistema operativo sin riesgo perder lo que tiene guardado. En el caso de un equipo servidor tenemos muchas posibilidades distintas dependiendo de los servicios que queramos prestar en la red. Los servidores que hacen uso de colas harán un uso intensivo del directorio /var. Usarán colas servicios tales como el correo electrónico, los servicios de impresión, los servidores de fax, los servidores usenet. Los equipos que ejecuten sistemas gestores de bases de datos también harán un uso intenso del directorio /var. Antes de instalar un sistema, si tiene previsto instalar un sistema gestor de bases de datos infórmese antes si tiene que dejar alguna partición preparada por si usa alguna ubicación no estándar. Otros servicios, como DNS, no requieren gran capacidad de almacenamiento. En el caso de un servidor web puede que nos interese dejar una partición para guardar todas las páginas que se albergan. Lo mismo se puede decir de un servidor ftp. 13
El sistema de ficheros en Linux Si el sistema quiere dar servicios a múltiples usuarios, tal vez sea conveniente montar el directorio /home en una partición distinta y dejarle bastante espacio. Si se van a instalar muchas aplicaciones distinas, entonces es el directorio /usr el que recogerá gran parte del almacenamiento. Por ejemplo en una estación de trabajo, normalmente se querrá incluir el modo gráfico, aplicaciones de ofimática y otras muchas aplicaciones que básicamente se guardan en /usr o /opt en algunos casos.
Cuotas de disco Introducción El servicio de cuotas de disco es el mecanismo que tiene Linux para poder limitar el almacenamiento a los usuarios del sistema. Una forma de proteger un equipo servidor es limitar la capacidad de almacenamiento de cada usuario. Este servicio se usa con ciertos servidores que limitan el almacenamiento como por ejemplo los servidores de correo o los servidores web. Si un usuario no tuviera límite de almacenamiento podría llegar a llenar toda una partición e impedir el trabajo de otros usuarios o del mismo sistema. Para poder instalar las cuotas de disco es necesario tener el núcleo Linux compilado con el soporte de quotas. La mayoría de las distribuciones traen un núcleo ya reparado. Si no es así tendríamos que compilar nuestro propio núcleo. Esto lo podemos comprobar ejecutando dmesg grep quotas Si la orden responde con un mensaje, entonces tenemos el núcleo listo. Si e sistema da la callada por respuesta entonces tendremos que compilar un nuevo núcleo.
Instalación Para instalar las "quotas" de disco es necesario tener acceso al sistema como root para poder modificar ciertos ficheros y establecer las cuotas. Ahora tenemos que editar el fichero /etc/fstab y en la partición o particiones que quiera poder establecer las cuotas de almacenamiento añadiremos la directiva usrquota o grpquota. En el primer casoa establece quotas a nivel de cada usuario y en el segundo segunda para cada grupo de usuarios. El siguiente ejemplo establece el sistema de cuotas para las particiones /home (/dev/hda5) y /var (/dev/hda6). /dev/hda5 /home ext2 defaults,usrquota 1 2 /dev/hda6 /var ext2 defaults,usrquota 1 3 Ahora debemos crear los ficheros quota.user, un fichero que mantiene información sobre cada partición. El fichero se crea en el directorio superior de la partición. Para crearlo ejecutamos: /sbin/quotachek -av y además nos mostrará un texto similar a: Scanning /dev/hda5 /home] done Checked 321 directories and 2619 files Using quotafile /home/quota.user Updating in-core user quotas El caso de asignar quotas a grupos es similar, en este caso se genera el fichero quota.grp.
14
El sistema de ficheros en Linux Para que las cuotas tengan efecto es necesario volver a montar las particiones de nuevo. Tal vez haya que reiniciar el sistema. Para evitar problemas asegúrese de que el fichero /etc/fstab no tiene errores.
Asignar cuotas Ya sólo queda asignar cuotas a los usuarios del sistema con la orden edquota. Por ejemplo vamos a asignar cuotas al usuario practicas en el directorio /home. Para esto ejecutamos: edquota -u practicas Esta orden arranca el editor del sistema y nos encontramos algo parecido a la siguiente: Quotas for user practicas: /dev/hda5: blocks in use:29612,limits (soft=0,hard=0) inodes in use: 2620, limits (soft = 0, hard = 0) /dev/hda6: blocks in use:49613,limits (soft=0,hard=0) inodes in use: 1620, limits (soft = 0, hard = 0)
La primera línea de cada partición expresa el número máximo de almacenamiento expresado en bloques. La segunda línea expresa el número máximo de ficheros que puede tener el usuario. Un cero indica ilimitado. Por otro lado existen los límites "soft" y "hard". El primero, el límite "soft", es un límite que se puede sobrepasar en durante un periodo de gracia. El límite "hard" no se puede sobrepasar nunca. Para asignar las cuotas sólo tenemos que modificar el número que hay entre paréntesis; por ejemplo, para limitar la quota de disco del usuario practicas a 1 Mb pondria lo siguiente: Quotas for user practicas:
/dev/hda5: blocks in use:29612,limits (soft=1024,hard=1024) inodes in use: 2620, limits (soft = 0, hard = 0)
Otra opción, quizas más sencilla, para establecer el sistema de cuotas por usuarios es tener un usuario "prototipo", con la cuota correspondiente ajustada, y luego asignarsela al resto de los usuarios del sistema con la siguiente orden: edquota -u -p prototipo usuario Siendo prototipo el usuario generico y usuario el usuario al que le quiere asignar la cuota. Si quremos ver las cuotas asignadas, podemos ejecutar: repquota -a Block limits File limits User used soft hard grace used soft hard grace root
15
El sistema de ficheros en Linux -- 17 0 0 3 0 0 ftp -- 1 0 0 1 0 0 practicas -- 19043 2560 3072 1146 0 0
Seguridad en el sistema de ficheros Copias de seguridad Es necesario realizar copias de seguridad de los ficheros relevantes del sistema para prever posibles pérdidas de información accidentales. En primer lugar interesa tener un copia de seguridad del directorio /etc.
16