Sistemas de Archivos y Swap Carmelo Quintana Hernández. [email protected] Miguel Ramírez Alemán. [email protected] INTRODUCCIÓN El proceso abierto y distribuido en el cual el sistema operativo Linux se ha desarrollado propicia un rápido crecimiento. Existe la necesidad de la estandarización de la estructura del sistema de archivos de Linux. La estandarización permite a usuarios, desarrolladores, y distribuidores, el obtener componentes del sistema de varias fuentes de manera sencilla. Esto también facilita la administración del sistema. LA NO ESTANDARIZACIÓN No había una estructura única, bien aceptada estructura de directorios Linux, en su lugar había muchas estructuras cada una incompatible con las demás. Las jerarquías más ampliamente usadas no estaban bien estructuradas y diferían bastante de las estructuras de directorios modernas. El sistema de archivos era poco familiar e incómodo para los usuarios de UNIX con experiencia y los administradores que habían tenido experiencia con otros sistemas operativos similares. La falta de regularidad también confundía a los recién - iniciados en Linux, especialmente aquellos que no tenían un conocimiento previo de UNIX. PROBLEMAS (1) Los directorios binarios principales /bin y /usr/bin no tienen divisiones bien definidas entre ellos. Al incluir ambos, los archivos binarios y los de configuración en /etc hace más confuso este directorio y más difícil de mantener para ambos. Muchas implementaciones comunes de /usr no pueden ser montadas sólo - lectura debido a que contienen archivos variables y directorios a los cuales se necesita escribir. PROBLEMAS (2) En una red se precisa servir software vía NFS. Este sistema de archivos puede precisar ser montado sólo-lectura. Los accidentes o malicia deliberada desde un estación de trabajo no puedan dañar los archivos en el servidor. Esto requiere la identificación y la separación de los archivos a los que una máquina debe escribir y los que son específicos de una máquina. Los sistemas de archivos tradicionales no eran adecuados para instalaciones en red. LA ESTANDARIZACIÓN (1) Este estándar representa el consenso entre desarrolladores, programadores, usuarios y administradores Linux. El estándar busca atacar los problemas con una estructura de archivos bien diseñada. El sistema de archivos Linux está caracterizado por: Una estructura jerárquica. Un tratamiento consistente de la información de los archivos. Protección de los archivos LA ESTANDARIZACIÓN (2) El sistema de archivos se podría resumir en dos categorías diferentes de archivos: Archivos compartibles vs no compartibles. Archivos variables vs estáticos. Los archivos variables Æcambian en cualquier momento sin intervención del gestor de sistemas. Los archivos estáticos (binarios, librerías) Æsólo cambian por acción del administrador LA ESTANDARIZACIÓN (3) El modo en el que el sistema operativo y sus usuarios interactúan con un archivo dado determina el directorio en el que ese archivo está ubicado. El nivel superior de la organización es crucial para filtrar el acceso a los niveles inferiores. DIRECTÓRIOS (1) /bin: Binarios de comandos esenciales de usuarios. Contiene comandos que pueden ser utilizados por los usuarios y por el administrador del sistema. Los binarios de los comandos que no son suficientemente esenciales para estar en /bin estarán localizados en /usr/bin. Esenciales: cp, mxdir, mount, pwd, etc /boot: Archivos estáticos del cargador de arranque. Este directorio contiene todo para arrancar excepto los archivos de configuración y el instalador de mapas. Para cualquier cosa que se utiliza antes de que el kernel ejecute /sbin/init. DIRECTÓRIOS (2) /dev: Archivos de dispositivos /etc: Configuración del sistema local a la máquina Éste es el directorio de los dispositivos. Contendría un archivo por cada dispositivo que el kernel de Linux puede soportar. Está reservado para archivos que son locales a un ordenador concreto. /home: Directorios hogar de los usuarios (opcional) home es un concepto algo estándar, pero es claramente un sistema de /archivos específico de un site. DIRECTÓRIOS (3) /lib: Librerías compartidas y módulos de kernel esenciales. /mnt: Punto de montaje para sistemas de archivos montados temporalmente Debe contener sólo las librerías necesarias para ejecutar los binarios en /bin y /sbin Se refiere a sistemas de archivos montados temporalmente, tales con CD-Roms y diquetes. /sbin: Binarios del Sistema Típicamente contiene binarios esenciales para arrancar el sistema además de los binarios en /bin. Si sólo será ejecutado por el administrador del sistema o por root como scripts de administración, entonces debe ir en /sbin. DIRECTÓRIOS (4) /opt: Almacenamiento de paquetes software. Proporciona una área para almacenar habitualmente paquetes de software de una aplicación estática y amplia. /proc: Puente con el Kernel Contiene archivos especiales que o bien información del kernel o bien la envían a éste. extraen /user/local: Para uso del administrador del sistema al instalar localmente el software. /var: Archivos de datos variables. Esto incluye datos de administración, de registro y archivos temporales. DIRECTÓRIOS (5) /usr: Archivos compartidos. Para almacenar archivos que pueden compartidos a través de todo el sitio. Subdirectórios de /usr: bin dict doc etc games include kerberos lib local sbin tmp ser Sistemas de Archivos (1) El sistema de ficheros es la forma en que el sistema operativo organiza, gestiona y mantiene la jerarquía de ficheros y directorios en los dispositivos de almacenamiento, normalmente discos duros. Cada sistema operativo soporta diferentes sistemas de ficheros. Estos formatos determinan cómo se almacenará la información como archivos y directorios. Algunos tipos de sistemas de archivos almacenan copias redundantes de datos, mientras que otros tipos de sistemas de archivos hacen el acceso al disco duro más rápido. Sistemas de Archivos (2) Los sistemas de ficheros soportados por Linux se clasifican en tres categorías: Basados en disco: discos duros, disquetes, CD-ROM, etc. (Estos sistemas son ext2, ext3, ReiserFS, XFS, JFS, ISO9660, etc.) Sistemas remotos (de red): NFS, Coda, Samba, etc. Sistemas especiales: procfs, ramfs y devfs. Historia del extX (1) Desde hace mucho tiempo, el sistema de ficheros estándar en Linux es el ext2. Éste fue diseñado por Wayne Davidson con la colaboración de Stephen Tweedie y Theodore Ts'o. Es una mejora al sistema anterior, ext, diseñado por Rémy Card. El ext2 está basado en -i nodos (asignación indexada). Cada i-nodo mantiene la meta-información del fichero y los punteros a los bloques con los datos "reales"'. Historia del extX (2) Para mejorar el rendimiento de las operaciones de E/S, los datos del disco son temporalmente almacenados en la memoria RAM, sin embargo si hay un corte de suministro eléctrico antes que los datos modificados en la memoria sean grabados nuevamente al disco se generaría una inconsistencia en el FS El fsck fue la herramienta que resolvía dichas inconsistencias, el cual tiene que analizar la partición completa y verificar las interdependencias entre i-nodos, bloques de datos y contenidos de directorios. Requiere mucho tiempo Æ Sistemas de ficheros con journaling. Un sistema con journaling es un sistema de ficheros tolerante a fallos en el cual la integridad de los datos está asegurada porque las modificaciones de la meta-información de los ficheros son primero grabadas en un registro cronológico antes que los bloques originales sean modificados. Graba previamente cualquier modificación de la meta-información en un área especial del disco. 2. Después de un fallo, el módulo de recuperación analizará el registro y sólo repetirá las operaciones incompletas en aquellos ficheros inconsistentes, examinando sólo aquellas porciones de los meta-datos que han sido cambiadas recientemente. 1. Sistema de Archivos EXT3 El sistema ext3 es, básicamente, una versión con journaling del antiguo sistema ext2. Ext3 en realidad es ext2 con un fichero adicional de registro, es decir, es una capa adicional sobre ext2 que mantiene un fichero de registro log de transacciones. Debido a que está integrado en el ext2 puede que no explote todas las posibilidades de los sistemas de journaling puros, pero se está trabajando es este área para mejorarlo. EXT3 vs EXT2 (1) Disponibilidad: Tras un cierre no limpio del sistema, se debe comprobar cada sistema de archivos ext2 montado en la máquina para ver si es consistente. Gracias a la característica journaling del sistema de archivos ext3 ya no es necesario realizar este tipo de comprobación dejando estas comprobaciones únicamente a casos puntuales como fallos físicos en el disco duro o en el caso de que el sistema de ficheros esté configurado para que se chequee completamente de forma automática cada cierto periodo de tiempo o cada cierto número de montajes para prevenir posibles fallos. Recuperar un sistema de archivos ext3 tras un cierre no limpio del sistema no dependa del tamaño del sistema de archivos ni del número de archivos, sino del tamaño del journal (diario), utilizado para mantener la consistencia en el sistema. EXT3 vs EXT2 (2) Integridad de los datos: El sistema de archivos ext3 le permite seleccionar el tipo y el nivel de protección de los datos. El ext3 escribe tres tipos de bloques de datos en el registro: Mantener la consistencia de los datos pero permitir daños en los datos dentro del sistema de ficheros en el caso de un apagado incorrecto. Asegurar que los datos son consistentes con el estado del sistema de ficheros, por defecto, con lo cual nunca habrá datos basura de un fichero recientemente escrito después de una caída del sistema. Meta-información: Contiene el bloque de meta-información que está siendo actualizado por la transacción y cada cambio en el sistema de ficheros es escrito en el registro. Bloques descriptores: Estos bloques describen a otros bloques del registro para que luego puedan ser copiados al sistema principal. Los cambios en estos bloques son siempre escritos antes que los de meta-información. Bloques cabeceras: Describen la cabecera y cola del registro más un número de secuencia para garantizar el orden de escritura durante la recuperación del sistema de ficheros. Con ext3 se mantiene la consistencia tanto en la meta-información (inodos o metadatos) como en los datos de los ficheros (datos propiamente dichos). EXT3 vs EXT2 (3) Velocidad: El sistema de archivos ext3, en la mayoría de los casos tiene un rendimiento superior al que proporciona ext2 porque los journals de ext3 optimizan el movimiento de los cabezales de los discos duros. Se pueden seleccionar tres modos de journaling para optimizar la velocidad, pero, como contrapartida, la integridad de los datos se verá afectada. Los diferentes modos son: data=writeback: limita la garantía de integridad de los datos, permitiendo a los antiguos datos aparecer en ficheros después de una caída, para un posible pequeño incremento de la velocidad en algunas circunstancias. Proporciona las garantías más limitadas de integridad en los datos y evita el chequeo en el reinicio del sistema. data=ordered (modo por defecto): garantiza que los datos son consistentes con el sistema de ficheros. Los ficheros escritos recientemente nunca aparecerán con contenidos basura después de una caída. data=journal: requiere un journal grande para una velocidad razonable en la mayoría de los casos y por lo tanto tarda más tiempo recuperar el sistema en el caso de un apagado incorrecto, pero es algunas veces es más rápido para algunas operaciones ya que funciona muy bien si se escriben muchos datos al mismo tiempo. EXT3 vs EXT2 (4) Fácil transición: Las particiones ext3 no tienen una estructura de ficheros diferentes a los de ext2, por lo que existe total compatibilidad entre ext2 y ext3, se puede convertir un sistema de ficheros ext2 a ext3 y viceversa. El programa tune2fs puede añadir el journal a un sistema de ficheros ext2 ya existente. Es posible beneficiarse de las ventajas de un sistema de ficheros journaling robusto sin necesidad de reformatear el disco. Si el sistema de ficheros estaba ya montado cuando se migraba, el journal será visible como un fichero journal en el directorio raíz del sistema de ficheros. Si no estaba montado el journal estará oculto y no aparecerá en el sistema de ficheros (así ocurre si se crea durante la instalación del sistema). El sistema de ficheros ext3 se ha beneficiado de la prolongada historia de mejoras y corrección de errores que tiene el ext2 y continuará siendo así. Esto significa que ext3 comparte la robustez del ext2, pero también las nuevas características que se han añadido al ext2. EXT3 vs EXT2 (5) Proporciona y hace uso de una capa genérica de journaling (JBD) la cual puede ser usada en otros contextos, como en otros dispositivos soportados por Linux (NVRAM, disk-on-chip, USB flash memory drives, etc.) Tiene una amplia compatibilidad con todas las plataformas, trabaja tanto en arquitecturas de 32 como de 64 bits, y tanto en sistemas little-endian como big-endian. No requiere profundos cambios en el corazón del núcleo y no requiere tampoco nuevas llamadas al sistema. Seguramente el ext3 será el sistema de ficheros estándar de Linux en un futuro próximo. Los datos del registro de journal pueden estar en cualquier conjunto de bloques, y en cualquier sistema de ficheros. Inclusive se puede compartir el registro de journal entre sistemas distintos. El programa de recuperación de sistemas de ficheros e2fsc tiene un muy reconocido éxito en la recuperación de datos cuando el software o el hardware falla y corrompe un sistema de ficheros y ext3 usa el mismo código que el e2fsck para salvar el sistema de ficheros después de una posible corrupción. Todas estas peculiaridades del ext3 son totalmente transparentes al usuario el cual trabajará igual que lo hacía con ext2, incluido el montaje y utilización de otros sistemas de ficheros (NFS, dispositivos de almacenamiento externos, etc.). Creación de un ext3 Hay dos métodos para crear un sistema de archivos ext3, o bien durante la instalación como ya se ha visto en prácticas o, crear uno nuevo después de la instalación. Los pasos para crear un sistema de archivos ext3 después de la instalación son los siguientes: 1. 2. 3. 4. 5. Cree la partición utilizando parted o fdisk. Dé formato a la partición con el sistema de archivos ext3 usando mkfs. Etiquete la partición usando e2label. Cree el punto de montaje. Añada la partición a /etc/fstab (1). Migrar a ext3 El programa tune2fs permite añadir un journal a un sistema de archivos ext2 existente sin modificar los datos en la partición. Para convertir un sistema de archivos ext2 a ext3, conéctese como root y escriba: /sbin/tune2fs -j /dev/hdbX Una vez realizado esto, asegúrese de cambiar el tipo de partición de ext2 a ext3 en /etc/fstab (2). Si está migrando el sistema de archivos raíz, tendrá que usar una imagen initrd (o disco RAM) para arrancar. Volver a ext2 Puesto que ext3 es relativamente nuevo, algunas utilidades de disco todavía no son compatibles con este sistema, como por ejemplo resize2fs (redimensionar particiones), por lo que se deberá volver temporalmente al sistema de archivos ext2. Para revertir una partición, primero deberá desmontar la partición conectándose como root y escribiendo: umount /dev/hdbX A continuación, cambie el tipo del sistema de archivos a ext2. Para ello, escriba /sbin/tune2fs -O el comando siguiente como root: ^has_journal /dev/hdbX Compruebe si la partición tiene errores. Para ello, escriba el comando siguiente como root: /sbin/e2fsck -y /dev/hdbX A continuación, vuelva a montar la partición como sistema de archivos ext2. Para ello, escriba: mount -t ext2 /dev/hdbX /mount/point Luego, quite el archivo .journal del nivel root de la partición cambiando el directorio donde está montado y escribiendo: rm -f .journal ¿Qué es el espacio Swat? El espacio swap en Linux es usado cuando la cantidad de memoria RAM está llena. Así, si el sistema necesita más recursos de memoria y la memoria está llena, las páginas inactivas de la memoria se mueven al espacio swap. Es una técnica utilizada para hacer creer a los programas que existe más memoria RAM de la que en realidad existe. Es el propio sistema operativo el que se encarga de pasar datos a la swap cuando necesita más espacio libre en la RAM y viceversa. En Linux, la memoria total disponible es igual a la cantidad de memoria RAM instalada más la swap disponible. Un uso muy intensivo y continuado de la swap es un indicativo de que necesitamos más memoria en nuestro sistema para que funcione desahogado con el uso que le estamos dando. El espacio swap puede ser una partición swap dedicada (altamente recomendable), un archivo swap o una combinación de particiones y archivos swap. El tamaño de su espacio swap debería ser igual o dos veces mayor que la memoria RAM de su ordenador pero nunca mayor de 2 GB. Añadir el espacio Swap (1) A veces es necesario añadir más espacio swap después de la instalación, para lo cual se dispone de dos opciones: añadir una partición swap (recomendable) o un archivo swap. Se recomienda que añada una partición swap. El principal inconveniente de utilizar un fichero de intercambio de esta forma es que todos los accesos al fichero de intercambio se realizan a través del sistema de ficheros. Esto significa que los bloques que forman el fichero de intercambio pueden no ser contiguos Æ El rendimiento no puede ser tan alto como cuando se utiliza una partición de intercambio, en la que los bloques estan siempre contiguos. La utilización de un fichero de intercambio puede ser muy útil si se tiene una necesidad temporal de más espacio de intercambio. Por ejemplo, si se esta compilando un gran programa. Añadir el espacio Swap (2) Para añadir una partición swap se deben realizar los siguientes pasos: 1. 2. 3. 4. El disco duro no puede estar en uso para lo cual debemos iniciar su sistema de nuevo en modo de rescate (1) . Cree la partición swap usando parted o fdisk. Para activar la partición swap inmediatamente, escriba el comando siguiente: swapon /dev/hdbX Para activarlo cuando se arranca, edite /etc/fstab (3) para incluir: /dev/hdbX swap swap defaults 0 0 Añadir el espacio Swap (3) En vez de reservar una partición individual para espacio de intercambio, se puede usar un fichero, para lo cual hay que instalar todo Linux y hacer todas las tareas de configuración antes. Para ello hay que hacer los siguientes pasos: 1. 2. 3. 4. 5. Determine el tamaño del nuevo archivo swap y multiplique por 1024 para determinar el tamaño de bloque. En un indicador de comandos shell como root, escriba el siguiente comando con count lo que equivale al tamaño de bloque deseado: dd if=/dev/zero of=/swapfile bs=1024 count=65536 Configure el archivo swap con el comando: mkswap /swapfile Para activar el archivo swap inmediatamente pero no automáticamente cuando se arranca: swapon /swapfile Para activarlo cuando se arranca, edite /etc/fstab (4) para incluir: /swapfile swap swap defaults 0 0 Eliminar el espacio Swap Para eliminar una partición swap: El disco duro no puede estar en uso para lo cual debemos iniciar su sistema de nuevo en modo de rescate (2). 1. 2. 3. En un indicador de comandos shell como root, ejecute el comando siguiente para asegurarse de que la partición swap está desactivada: swapoff /dev/hdbX Elimine su entrada desde /etc/fstab (5). Elimine la partición usando parted o fdisk. Para eliminar un archivo swap: 1. 2. 3. En un indicador de comandos shell como usuario root, ejecute el comando siguiente para desactivar el archivo swap: swapoff /swapfile Elimine su entrada de /etc/fstab (6). Elimine el archivo actual: rm /swapfile Fichero /etc/fstab Arrancar en modo de rescate El modo de rescate proporciona la habilidad de arrancar una pequeña parte de Linux desde un disquete, CD-ROM, o algún otro método de arranque en vez del disco duro. Para arrancar el sistema en modo rescate se puede utilizar un disquete de instalación hecho a partir de una imagen bootdisk.img y seguir los siguientes pasos: 1. 2. 3. Una vez que haya arrancado, introducir el comando siguiente en el intérprete de comandos: linux rescue A continuación se pedirá montar el sistema de archivos, pero si selecciona Skip, su sistema de archivos no será montado. Una vez que tenga su sistema en modo de rescate, aparece un intérprete de comandos en VC1 ([Ctrl]-[Alt][F1]) y VC2 ([Ctrl]-[Alt]-[F2]): -/bin/sh-2.05b#