Linux Filesystem Management Discusión El sistema operativo de Linux maneja discos como una gran matriz que se puede dividir y estructurar para servir a una gran variedad de necesidades. Este cuaderno enseña las destrezas que permiten a los administradores configurar y estructurar discos de acuerdo con sus necesidades. Particiones de disco Como la mayoría de los sistemas operativos, Linux permite la división de discos en múltiples particiones, donde cada partición se maneja como un disco independiente. El proceso de crear particiones se conoce como particionar un disco. Cómo se refiere Linux a las particiones El kernel de Linux se refiere a las particiones individuales a través de nodos de dispositivo, donde el nombre del nodo se deriva al añadir el número de la partición al nombre del disco. Por ejemplo, la primera partición en el dispositivo se conoce como /dev/hda mientras que la séptima partición en el dispositivo /dev/sdc se conocería como /dev/sdc7. Rarezas de las particiones DOS Los sistemas operativos han establecido diferentes convenciones para registrar la información de partición de un disco. Dado que Linux históricamente ha operado entre sistemas operativos DOS, el esquema de partición más común es la partición DOS. El formato de partición DOS se derivó cuando un disco duro de 200 megabytes se consideraba grande y el número de particiones necesarias en el disco era pequeño, esto pronto trajo sus implicaciones. Figure 1. Muestra de particionamiento del dispositivo /dev/hda La tabla anterior muestra un disco particionado mediante el particionamiento DOS, incluyendo las características esbozadas a continuación. El registro de arranque maestro (MBR) El primer bloque (512 bytes) de cada disco se reserva para el registro de arranque maestro o MBR, (el tamaño del MBR en la tabla anterior está bastante desproporcionado). El MBR contiene los siguientes elementos. Gestor de arranque: En los discos de arranque, un nivel ejecutable conocido como un gestor de arranque habita en el MBR. En el arranque, la BIOS pasa el control al gestor de arranque, el cual es luego el responsable de cargar y pasar el control al sistema operativo apropiado. El gestor de arranque se tratará en más detalle en un cuaderno posterior. Tabla de partición: En cada disco, 64 bytes del registro maestro de arranque se reservan para la tabla de partición del disco. Esta pequeña cantidad de espacio registra información de más de 4 particiones conocidas como particiones primarias. Para cada partición, se registra una ubicación de inicio, de terminación y un tipo de partición. Particiones primarias Cada disco se puede dividir hasta en cuatro particiones primarias, cuyas propiedades se registran en la tabla de partición localizada en el MBR. Linux siempre utiliza los números de partición de 1 a 4 para referirse a las particiones primarias. En el diagrama anterior, la primera partición primaria, /dev/hda1, es un sistema de archivos FAT para el sistema operativo de Windows. La segunda partición primaria /dev/hda2, es una partición de intercambio (swap) utilizada por Linux para implementar la memoria virtual. La tercera partición, /dev/hda3 es un sistema de archivos ext3 que contiene una partición de arranque /boot de Linux. La partición extendida Con las tres particiones mencionadas anteriormente, ya estamos a punto de utilizar todas las cuatro particiones primarias permitidas. Como una forma de solventar esta limitación, se crea la estructura llamada partición extendida. La partición DOS permite que cualquier partición primaria sea utilizada como partición extendida. La partición extendida se utiliza como un contenedor para almacenar más particiones, conocidas como particiones lógicas. Una vez una partición primaria es utilizada como partición extendida, no se puede utilizar para otro propósito. Una partición extendida es opcional. Si cuatro particiones cubren las necesidades de partición para un disco determinado, entonces no se requiere una partición extendida. En teoría, cualquiera de las cuatro particiones primarias se puede utilizar como partición extendida. En la práctica, las primeras tres particiones generalmente se crean cuando se necesitan y la restante del disco se asigna como una cuarta partición primaria utilizada como la partición extendida. Esta estrategia se implementó en la figura anterior, donde /dev/hda4 sirve como partición extendida. Particiones lógicas Dentro de la partición extendida se pueden crear múltiples particiones lógicas. La información sobre particiones lógicas se mantiene como una lista de enlaces, por lo tanto, en teoría, no hay límite en el número de particiones lógicas que se pueden crear. En la práctica, los controladores de dispositivo imponen límites. No hay más de 63 particiones IDE y no más de 15 particiones SCSI. Linux siempre comienza por contar la primera partición lógica como la partición número 5, incluso si no se utilizan todas las 4 particiones primarias. En la tabla anterior, 4 particiones lógicas (/dev/hda5, /dev/hda6, /dev/hda7 y /dev/hda8) contienen sistemas de archivo ext3 para las particiones /, /home, /var, y pub, respectivamente. Partición con fdisk La herramienta más utilizada de Red Hat Enterprise para la partición de discos es fdisk. La utilidad de la línea de comando se mantiene intencionalmente sencilla y sin pretensión, para que se pueda utilizar en un entorno mínimo tal como una shell de rescate. Como los usuarios estándar no tienen permiso de lectura de discos (y tampoco de modificación) directamente a través de su nodo de dispositivo, la utilidad fdisk sólo puede utilizarse como el usuario root. Uso de fdisk para listar particiones El uso más sencillo de fdisk es mostrar las particiones conocidas. Con la opción de línea de comando -l listará tablas de partición para todos los discos conocidos. En el siguiente ejemplo, fdisk -l genera una tabla de partición de los dos discos duros conectados en el sistema. La salida de este comando sencillo se ha divido en dos listados, con el fin de poder centrarnos en cada disco por separado. [root@station root]# fdisk -l Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 Start 1 541 3250 End Blocks 540 4082368+ 3249 20480040 3926 5118120 Id System b Win95 FAT32 7 HPFS/NTFS 83 Linux Ahora intentamos darle sentido a la estructura reportada del primer disco. El primer disco tiene un tamaño de 120 gigabytes. La línea muestra la geometría del dispositivo o la estructura interna del dispositivo. El parámetro importante es los cilindros, porque fdisk fuerza a las particiones a iniciar y terminar en los límites del cilindro. Un cilindro está compuesto por múltiples cabezas, que a su vez están compuestas por múltiples bloques de 512 bytes cada uno. Al hacer cuentas, en este disco cada cilindro contiene (512 bytes/cabeza) * (240 cabezas/sector) * (63 sectores/cilindro) = 7741440 bytes/cilindro, o cerca de 7.5 megabytes por cilindro. En realidad no tuvimos que hacer todos estos cálculos, fdisk lo hizo por nosotros. Aquí encontramos la tabla de partición real. Este disco solo tiene tres particiones, cada uno como una partición primaria, (¿cómo lo sabemos? Para los novatos, los números de partición son menores o iguales a 4). Cada línea da un nombre de dispositivo, el cilindro de inicio y terminación, el tamaño de la partición y el tipo de partición. Discutiremos más adelante la interpretación de estas líneas. La última partición termina en el cilindro 3926, aunque sabemos por la línea que lista la geometría del disco (etiquetado "2" arriba) que el disco tiene 15505 cilindros. Podemos calcular que cada disco tiene cerca de (15505 - 3926 cilindros) * (7.5 megabytes/cilindro) = 87 gigabytes de espacio sin asignar. Ahora nos enfocamos en el segundo disco, /dev/hdb. Disk /dev/hdb: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hdb1 * /dev/hdb2 /dev/hdb3 /dev/hdb4 /dev/hdb5 /dev/hdb6 /dev/hdb7 Start 1 10 271 1303 1303 5128 6172 End Blocks 9 72261 270 2096482+ 1302 8289540 9729 67689877+ 5127 30724281 6171 8385898+ 9729 28579603+ Id 83 82 83 f 83 83 83 System Linux Linux swap Linux Win95 Ext'd (LBA) Linux Linux Linux Ahora realizamos un análisis similar en el segundo disco. El segundo disco tiene un tamaño de 80 gigabytes. Sabiendo que fdisk sí hace el trabajo por nosotros, nos enfocaremos en el número de cilindros, en este caso 9729... ...donde cada cilindro tiene un tamaño un poco mayor a 8 megabytes. El disco ha asignado todos las cuatro particiones primarias. La cuarta partición primaria se utiliza como la partición extendida, terminando en el último cilindro (9729) del disco. Las particiones restantes son particiones lógicas. Observe que sus límites de cilindro caen dentro de los límites de la partición extendida (i.e. entre los números 1303 y 9729 inclusive). La terminación de la última partición lógica (cilindro 9729) coincide con la terminación de la partición extendida, la cual coincide con el final del disco. No queda más espacio en el dispositivo. Enfocándonos en una sola línea de la tabla de partición de fdisk Con el fin de estudiar una línea en detalle, listaremos de nuevo la tabla de partición para el disco /dev/hda. Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 Start 1 541 3250 End 540 3249 3926 Blocks 4082368+ 20480040 5118120 Id b 7 83 System Win95 FAT32 HPFS/NTFS Linux Cada línea de la partición contiene las siguientes siete columnas. Table 1. Definiciones de columna para fdisk Columna Función Dispositivo El nodo de dispositivo que hace referencia a la partición, más utilizada como el "nombre" de la partición. Arranque Identifica la partición de "arranque". En cada disco se puede etiquetar una de las particiones primarias como de "arranque". Aunque Linux no la utiliza (si la utiliza el gestor de arranque MS/DOS), fdisk reporta y le permite al usuario establecer la partición de arranque. Comienzo y El cilindro de comienzo y fin de la partición. fin El tamaño de la partición en "bloques" de 1024 bytes (i.e. 1K). Por lo general, esta información es redundante (aunque conveniente) puesto que se puede calcular desde los límites del cilindro. Por ejemplo, para la partición /dev/hda2, multiplicar el número de cilindros por el número de kilobytes por cilindro da como resultado 20480040. Bloques Algunas veces, especialmente cuando alguna utilidad diferente a fdisk examina discos con particiones, los cilindros no se ajustan exactamente a los límites de los cilindros. Por ejemplo, al hacer cálculos similares en la primera partición, (/dev/hda1), el número notificado está corto en 32 kilobytes. En tales situaciones, fdisk marca el número reportado de bloques y agrega un “+”. Id El número digital hexadecimal 2 representa el Id del tipo de partición. Sistema Un nombre de texto para el tipo de partición, tal como se define en el Id. Etiquetas de particiones Como vimos en el cuadro anterior, la tabla de partición incluye un identificador de byte utilizado para asignar el "Id" de partición (algunas veces conocido como el "tipo" de la partición o la "etiqueta " de la partición). ¿El Id utilizado para identificar la función de la partición debe servir de: espacio swap, sistema de archivos ext3, sistema de archivos FAT, parte de la Administración de Volumenes de Linux o partición extendida? Muchos sistemas operativos siguen las mismas convenciones de nomenclatura del Id de partición. El siguiente cuadro lista los tipos de partición que normalmente se presentan en Linux, en el orden aproximado como se generan. Table 1. Ids de partición importantes para Linux Id Etiqueta Role 83 Linux Un sistema de archivos de Linux ext2 o ext3 82 Linux Swap Una partición swap de Linux (memoria virtual) fd Linux raid auto Una partición RAID de software de Linux 8e Linux LVM Administración de volumenes lógicos de Linux En Linux, los Ids de partición suelen ser cosméticos. Una partición etiquetada como Linux se puede inicializar y utilizar para espacio swap, mientras que una partición etiquetada como Linux Swap puede utilizarse como un sistema de archivos ext2. Sin embargo, algunos Ids, son importantes para el kernel de Linux (por ejemplo, Linux raid auto) y muchos son importantes para otros sistemas operativos que podrían estar compartiendo el mismo disco. La práctica sugiere que cada Id de partición debería reflejar la intención de su uso. Uso de fdisk para editar una tabla de partición Inicio de fdisk y uso del menú de comandos Al utilizar fdisk para editar una tabla de partición, el comando fdisk debería llamarse con un solo argumento: el nodo de dispositivo del disco que se va a editar. [root@station root]# fdisk /dev/hda The number of cylinders for this disk is set to 15505. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSes (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): Cuando el fdisk inicia, advierte que el disco excede los 1024 cilindros. Algunos de las BIOS más antiguas están limitadas a sólo acceder los primeros 1024 cilindros, un tema que se cubrirá en un próximo cuaderno. Por lo general, esta advertencia se puede ignorar. Luego, fdisk espera con paciencia para que le digan lo que tiene que hacer. [Note] Note Uno de los errores más comunes de los nuevos usuarios es invocar fdisk con el nombre de una partición en lugar de un disco. Por ejemplo, fdisk /dev/hda3 haría que fdisk saliera con un error. Las particiones no tienen tablas de partición para corregir, los discos sí. En modo interactivo (de edición), fdisk espera ser conducido con comandos de una sola letra. El comando “m” muestra una lista de los posibles comandos. Command (m for help): m 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) Afortunadamente, la mayoría de los usuarios pueden sobrevivir utilizando un pequeño subconjunto de estos comandos. Table 1. Los comandos fdisk más utilizados Comando Función m lista el (m)enú de comandos p im(p)rime la tabla de partición n crea una (n)ueva partición d borra la partición t cambia el (t)ipo de la partición (Id) q sale sin grabar cambios w escribe cambios y sale La primera acción del usuario es orientarse con el comando “p” para imprimir la tabla de partición actual. Command (m for help): p Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 Start 1 541 3250 End 540 3249 3926 Blocks 4082368+ 20480040 5118120 Id b 7 83 System Win95 FAT32 HPFS/NTFS Linux Vemos otra vez la tabla de partición para el disco /dev/hda, con las tres particiones primarias y más de 80 gigabytes de espacio libre. Adición de una partición En nuestra discusión asumimos que el administrador quiere crear dos nuevas particiones. La primera se utilizará como un espacio swap de 512 megabytes y la segunda se utilizará como un sistema de archivos ext3 de 1024 megabytes. El comando “n” es utilizado para crear una nueva partición. Command (m for help): n Command action e extended p primary partition (1-4) La siguiente pregunta depende del estado del dispositivo. Si no existen particiones extendidas (nuestro caso), fdisk pregunta si la nueva partición debe ser la partición extendida o una partición primaria (normal). Si una partición extendida existe, fdisk pregunta si la nueva partición debe ser lógica o primaria. Si se utilizan todas las particiones primarias entonces fdisk simplemente no pregunta. Debido a que las tres particiones primarias ya existen y nuestro administrador quiere crear dos particiones nuevas, debe crear primero una partición extendida para guardarlas. Contesta “e”. Luego fdisk le pide el número del cilindro de inicio para la partición. Nuestro administrador debe presionar ENTER aceptando por defecto 3927 (el primer cilindro disponible). Selected partition 4 First cylinder (3927-15505, default 3927): ENTER Luego, fdisk pide el número de terminación del cilindro. Using default value 3927 Last cylinder or +size or +sizeM or +sizeK (3927-15505, default 15505): Se pueden utilizar cuatro formatos diferentes al especificar el cilindro de terminación. Formato Interpretación n Uso del cilindro de terminación n. +n Uso del cilindro de inicio incrementado por n cilindros. +nM Uso del cilindro de inicio incrementado por n megabytes, (una K final implica kilobytes). ENTER Use el valor predeterminado, el cual se escoge para hacer la partición resultante tan grande como sea posible. Puesto que la partición extendida es una partición primaria, será la cuarta partición primaria (y por ende la última) en el disco. Dado que cualquier espacio de disco no incluído en la partición extendida se volverá inaccesible, no hay razón para no utilizar el cilindro sugerido (el cual es el último cilindro en el disco). Nuestro administrador hace eso y luego imprime la nueva tabla de partición. Using default value 15505 Command (m for help): p Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 /dev/hda4 Start 1 541 3250 3927 End 540 3249 3926 15505 Blocks 4082368+ 20480040 5118120 87537240 Id b 7 83 5 System Win95 FAT32 HPFS/NTFS Linux Extended Command (m for help): La partición extendida recién agregada, la cual abarca el resto del dispositivo. Contento con el resultado, procede a agregar una nueva partición de 512 megabytes. Puesto que todas las particiones primarias están en uso, fdisk no solicita el tipo de partición. Una partición lógica es el único tipo disponible. Command (m for help): n First cylinder (3927-15505, default 3927): ENTER Using default value 3927 Last cylinder or +size or +sizeM or +sizeK (3927-15505, default 15505): +512M Command (m for help): p Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 /dev/hda4 /dev/hda5 Start 1 541 3250 3927 3927 End 540 3249 3926 15505 3993 Blocks 4082368+ 20480040 5118120 87537240 506488+ Id b 7 83 5 83 System Win95 FAT32 HPFS/NTFS Linux Extended Linux Command (m for help): Al presionar ENTER, se acepta el cilindro de inicio por defecto. La sintaxis +512M especifica que la partición debería ser de 512 megabytes (o lo más cercano posible). La nueva partición lógica agregada. Aunque solicitó una partición de 512 megabytes, la partición resultante es cercana a 506 megabytes. Dado que las particiones deben caer en límites del cilindro y (para este dispositivo) un cilindro tiene un tamaño de 7.5 megabytes, fdisk hizo lo mejor que pudo. Cambio de la etiqueta de una partición Cuando fdisk agrega una partición, el Id de la partición se establece para "Linux" (apropiado para una partición que contendrá un sistema de archivos ext2 o ext3). Puesto que el administrador planea el uso de la partición para espacio swap, puede establecer el Id de partición correctamente. Utiliza el comando “t” para establecer el tipo de partición y especifica la partición apropiada. Aprovechando la habilidad para listar todas las etiquetas conocidas, localiza la etiqueta apropiada de "Linux swap" y el código hex, “82”. Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): L 0 Empty 1 FAT12 2 XENIX root 3 XENIX usr 4 FAT16 <32M 5 Extended 6 FAT16 7 HPFS/NTFS 8 AIX 9 AIX bootable a OS/2 Boot Manag b Win95 FAT32 c Win95 FAT32 (LB e Win95 FAT16 (LB f Win95 Ext'd (LB 10 OPUS 11 Hidden FAT12 12 Compaq diagnost 14 Hidden FAT16 <3 16 Hidden FAT16 17 Hidden HPFS/NTF 18 AST SmartSleep 1b Hidden Win95 FA Hex code (type L to Changed system type 1c Hidden Win95 FA 70 DiskSecure Mult 1e Hidden Win95 FA 75 PC/IX 24 NEC DOS 80 Old Minix 39 Plan 9 81 Minix / old Lin 3c PartitionMagic 82 Linux swap 40 Venix 80286 83 Linux 41 PPC PReP Boot 84 OS/2 hidden C: 42 SFS 85 Linux extended 4d QNX4.x 86 NTFS volume set 4e QNX4.x 2nd part 87 NTFS volume set 4f QNX4.x 3rd part 8e Linux LVM 50 OnTrack DM 93 Amoeba 51 OnTrack DM6 Aux 94 Amoeba BBT 52 CP/M 9f BSD/OS 53 OnTrack DM6 Aux a0 IBM Thinkpad hi 54 OnTrackDM6 a5 FreeBSD 55 EZ-Drive a6 OpenBSD 56 Golden Bow a7 NeXTSTEP 5c Priam Edisk a8 Darwin UFS 61 SpeedStor a9 NetBSD 63 GNU HURD or Sys ab Darwin boot 64 Novell Netware b7 BSDI fs 65 Novell Netware b8 BSDI swap list codes): 82 of partition 5 to 82 (Linux swap) bb be c1 c4 c6 c7 da db de df e1 e3 e4 eb ee ef f0 f1 f4 f2 fd fe ff Boot Wizard hid Solaris boot DRDOS/sec (FATDRDOS/sec (FATDRDOS/sec (FATSyrinx Non-FS data CP/M / CTOS / . Dell Utility BootIt DOS access DOS R/O SpeedStor BeOS fs EFI GPT EFI (FAT-12/16/ Linux/PA-RISC b SpeedStor SpeedStor DOS secondary Linux raid auto LANstep BBT Command (m for help): p Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 /dev/hda4 /dev/hda5 Start 1 541 3250 3927 3927 End 540 3249 3926 15505 3993 Blocks 4082368+ 20480040 5118120 87537240 506488+ Id b 7 83 5 82 System Win95 FAT32 HPFS/NTFS Linux Extended Linux swap Command (m for help): La etiqueta de partición que antes era "Linux" ha cambiado a "Linux swap". Agregar una segunda partición El administrador procede a añadir una segunda partición. Command (m for help): n First cylinder (3994-15505, default 3994): ENTER Using default value 3994 Last cylinder or +size or +sizeM or +sizeK (3994-15505, default 15505): +1024M Command (m for help): p Disk /dev/hda: 120.0 GB, 120034123776 bytes 240 heads, 63 sectors/track, 15505 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hda1 /dev/hda2 * /dev/hda3 /dev/hda4 /dev/hda5 /dev/hda6 Start 1 541 3250 3927 3927 3994 End 540 3249 3926 15505 3993 4126 Blocks 4082368+ 20480040 5118120 87537240 506488+ 1005448+ Id b 7 83 5 82 83 System Win95 FAT32 HPFS/NTFS Linux Extended Linux swap Linux Command (m for help): La partición recién añadida. Deleting a Partition Si el administrador comete un error o necesita suprimir una partición para crear espacio, la eliminación de una partición se hace directamente y se vería de la siguiente manera. Command (m for help): d Partition number (1-6): 4 Hay un par de detalles que se deben observar. 1. Si se elimina una partición extendida, todas las particiones lógicas que contiene también se borrarán. 2. Puesto que la información sobre el particionamiento para particiones lógicas se mantiene como una lista enlazada, las particiones se deben enumerar de forma consecutiva. Si la partición número 5 de 7 es borrada, las particiones 6 y 7 se convertirán en particiones 5 y 6 (esto no sucede con las particiones primarias). Salida de fdisk Al finalizar, hay dos maneras de salir de fdisk. Primero, el comando “q” se puede utilizar para "abandonar"fdisk, abandonando todos los cambios. La utilidad fdisk no escribe ningún cambio hasta que se le pide que lo haga, por lo tanto los usuarios pueden salir con seguridad en cualquier momento. Con el comando “w”, fdisk"escribirá" cambios y saldrá. Esta es la forma normal de salir de fdisk llevando a cabo cualquier corrección específicada. Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. Al salir, fdisk advierte que los cambios no surtirán efecto hasta el siguiente reinicio. Esto es una mentirilla. El reinicio hará que el cambio surta efecto pero también se puede hacer sin reiniciar con el comando partprobe. El administrador ejecuta partprobe para que el kernel relea la tabla de particiones y lleve a cabo los cambios. [root@station root]# partprobe Ver particiones en /proc/partitions Como una alternativa a fdisk -l (que sólo root tiene permisos para ejecutar), el sistema de archivos proc /proc/partitions lista todas las particiones conocidas, al igual que todos los tamaños (en bloques de 1024 bytes) y estadísticas de actividad. [root@station root]# cat /proc/partitions major minor #blocks name 3 3 3 3 3 3 3 3 3 3 3 0 1 2 3 64 65 66 67 69 70 71 117220824 4082368 20480040 5118120 78150744 72261 2096482 8289540 30724281 8385898 28579603 hda hda1 hda2 hda3 hdb hdb1 hdb2 hdb3 hdb5 hdb6 hdb7 Observe la importancia del número mayor y menor de cada partición (y disco) en la salida. El kernel de Linux internamente identifica una partición por el número mayor y menor asociado con su controlador de dispositivo, no por el nombre del nodo de dispositivo, un hecho que suele observarse en los mensajes de error a nivel del kernel. Linux Filesystem Management Ejemplos Particionamiento de un nuevo dispositivo En este ejemplo, vemos que prince acaba de conectar un nuevo disco a su máquina. Quiere dividir su nuevo disco en las siguientes particiones. Número Tamaño Propósito 1 128 megas espacio swap 2 512 megas sistema de archivos ext2 3 512 megas sistema de archivos vfat 4 1024 megas sistema de archivos ext3 Tras el primer arranque de la máquina, después de conectar el nuevo dispositivo, prince da una lectura rápida a los mensajes de arranque del kernel para buscar pruebas del dispositivo recién detectado. Infortunadamente, el kernel es demasiado rápido para su monitor, el cual no se enciende con toda la intensidad hasta que los mensajes hayan pasado. Una vez el sistema arranca, prince da una lectura rápida al archivo /var/log/dmesg, donde encuentra las siguientes líneas. ... hda: Maxtor 51536H2, ATA DISK drive hdb: ST310212A, ATA DISK drive blk: queue c03cdfe0, I/O limit 4095Mb (mask 0xffffffff) blk: queue c03ce124, I/O limit 4095Mb (mask 0xffffffff) hdc: LTN485, ATAPI CD/DVD-ROM drive ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15 hda: attached ide-disk driver. hda: host protected area => 1 hda: 29336832 sectors (15020 MB) w/2048KiB Cache, CHS=1940/240/63, UDMA(66) hdb: attached ide-disk driver. hdb: host protected area => 1 hdb: 20005650 sectors (10243 MB) w/512KiB Cache, CHS=1323/240/63, UDMA(66) ide-floppy driver 0.99.newide ... Convencido de que su nuevo dispositivo se ha detectado correctamente, comienza a hacer la partición del dispositivo con el comando fdisk. Primero imprime la tabla de partición con el comando “p”. [root@station root]$ fdisk /dev/hdb The number of cylinders for this disk is set to 1323. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/hdb: 10.2 GB, 10242892800 bytes 240 heads, 63 sectors/track, 1323 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot Start End Blocks Id System Command (m for help): Como era de esperar, la tabla de partición está vacía. Al seguir añade su primera partición, la única interacción realmente interesante es cuando él especifica el tamaño de partición con +128M. Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1323, default 1): ENTER Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1323, default 1323): +128M Command (m for help): p Disk /dev/hdb: 10.2 GB, 10242892800 bytes 240 heads, 63 sectors/track, 1323 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hdb1 Start 1 End 18 Blocks 136048+ Id 83 System Linux Puesto que la partición se va a utilizar como espacio de intercambio, prince cambia la etiqueta de partición al código apropiado para Linux Swap. Command (m for help): t Selected partition 1 Hex code (type L to list codes): 82 Changed system type of partition 1 to 82 (Linux swap) Las siguientes dos particiones se añaden directamente. Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (19-1323, default 19): ENTER Using default value 19 Last cylinder or +size or +sizeM or +sizeK (19-1323, default 1323): +512M Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (86-1323, default 86): ENTER Using default value 86 Last cylinder or +size or +sizeM or +sizeK (86-1323, default 1323): +512M Command (m for help): p Disk /dev/hdb: 10.2 GB, 10242892800 bytes 240 heads, 63 sectors/track, 1323 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hdb1 /dev/hdb2 /dev/hdb3 Start 1 19 86 End 18 85 152 Blocks 136048+ 506520 506520 Id 82 83 83 System Linux swap Linux Linux Aunque prince sólo desea agregar una partición más ahora, dejará espacio sin asignar en el dispositivo. Si fuera a utilizar su última partición primaria para el sistema de archivos ya no podría hacer una partición extendida y el espacio restante se desaprovecharía. En cambio, prince crea una partición extendida para abarcar el resto del dispositivo y luego agrega su nueva partición como una partición lógica dentro de ésta. Command (m for help): n Command action e extended p primary partition (1-4) e Selected partition 4 First cylinder (153-1323, default 153): ENTER Using default value 153 Last cylinder or +size or +sizeM or +sizeK (153-1323, default 1323): ENTER Using default value 1323 Command (m for help): n First cylinder (153-1323, default 153): ENTER Using default value 153 Last cylinder or +size or +sizeM or +sizeK (153-1323, default 1323): +1024M Command (m for help): p Disk /dev/hdb: 10.2 GB, 10242892800 bytes 240 heads, 63 sectors/track, 1323 cylinders Units = cylinders of 15120 * 512 = 7741440 bytes Device Boot /dev/hdb1 /dev/hdb2 /dev/hdb3 /dev/hdb4 /dev/hdb5 Start 1 19 86 153 153 End 18 85 152 1323 285 Blocks 136048+ 506520 506520 8852760 1005448+ Command (m for help): Satisfecho con su trabajo, escribe y sale. Id 82 83 83 5 83 System Linux swap Linux Linux Extended Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Utilizar fdisk para añadir nuevas particiones. Tiempo estimado: 10 minutos. Specification En este laboratorio, usted añadira dos particiones pequeñas a un disco en su computador. 1. Utilice el comando fdisk -l para confirmar que su máquina tiene al menos 256 megabytes asignados. Si su máquina tiene múltiples discos duros, el espacio debe existir en un solo dispositivo. Cree el archivo ~/lab3.1/disk que contenga el nombre del disco que utilizará para este laboratorio como una referencia absoluta. Por ejemplo, si el disco que utilizará es /dev/hda, el archivo deberá contener la palabra /dev/hda. 2. Utilice el comando fdisk para editar la tabla de partición del dispositivo. Observe que tendrá que utilizar su cuenta de root. Añada dos nuevas particiones, cada 128 megabytes de tamaño (o casi). Establezca el Id de partición de la primera partición recién añadida a Linux Swap. El Id de partición de la segunda partición recién agregada debe parmanecer como Linux. Las dos particiones nuevas deben ser las dos últimas particiones en el dispositivo. Salga de fdisk, almacenando los cambios. 3. Si es necesario, reinicie su máquina para que las nuevas particiones sean reconocidas por el kernel antes de calificar su ejercicio. Resultados A title Question 1 1. El archivo ~/lab3.1/disk que contenga el nombre del dispositivo que usted utilizó para este laboratorio como una referencia absoluta. El nombre de dispositivo debería ser la única palabra en el archivo. 2. Lo siguiente en la última partición en la unidad especificada debería ser (casi) de 128 megabytes y tener un Id de partición de Linux Swap. 3. La última partición en el dispositivo especificado debería ser (casi) de 128 megabytes y tener un Id de partición de Linux. grade Linux Filesystem Management Discusión Sistemas de archivos En el nivel inferior, los nodos de dispositivo de bloque permiten el acceso a los discos y a las particiones de disco como si fueran simplemente una gama de bytes (recuerde el mantra de Unix, "todo es un archivo"). No obstante, cuando los usuarios de Linux almacenan información en discos, prefieren utilizar las conceptos conocidos de archivos y directorios. De alguna manera, esta gama de bytes que es una partición de disco debe estar hecha para actuar como el directorio /home/elvis y los archivos que éste contiene. El kernel de Linux implementa una capa de sistema de archivos virtual, la cual dicta que todo lo que existe en un árbol de directorios, como por ejemplo, los archivos normales, directorios, nodos de dispositivo y enlaces simbólicos, debe tener una estructura uniforme que conste de los siguientes elementos: inodos Los inodos almacenan todos los metadatos asociados con un archivo. Los metadatos de un archivo es toda la información asociada con un archivo, excepto su nombre y contenido. Por ejemplo, las propiedades, permisos y tiempo de modificación se almacenan en el inodo. El inodo mayormente proporciona la identidad del archivo. dentries Las dentries cuyo nombre se deriva del término en inglés "Directory Entries" (entradas de directorio), contienen un nombre de archivo y una ubicación dentro de la estructura del directorio y asocian esta identidad con el inodo del archivo. data Por último, cada archivo tiene una gama de bytes que constituyen su contenido y se conocen como el inodo del archivo. La estructura intermedia que se presenta en un disco o en una partición de disco que define un fragmento de bytes que contiene dentries y otro fragmento de bytes que contiene los inodos cuyas dentries hacen referencia y otro fragmento de bytes conteniendo datos cuyos inodos hacen referencia, se conoce como sistema de archivos. En otros sistemas operativos la acción de inicialización del sistema de archivos en una partición particular se conoce como formatear la partición. En Linux (y Unix) dicha acción se conoce simplemente como crear un sistema de archivos. Sistemas de archivos de Linux El diseño del sistema de archivos es un problema general en la ingeniería informática y se requiere mucho tiempo y dedicación para diseñar sistemas de archivos que equilibren la eficiencia, solidez, capacidad y simplicidad apropiadas para cada situación. Puesto que un sistema de archivos debe estar estrechamente coordinado con el sistema operativo que lo respalda, la mayoría de los sistemas operativos sólo admiten uno de dos sistemas de archivo considerados "nativos" en ese sistema operativo. En contraste, Linux respalda un gran número de sistemas de archivos, algunos de los cuales son nativos de Linux, muchos de los cuales se comparten con otros sistemas operativos. El siguiente cuadro contiene una lista parcial de sistemas de archivos compatibles con Linux. Table 1. Sistemas de archivos soportados por Linux Sistema de archivos Comentarios ext2 El sistema de archivos ext2 ("extendido 2") ha sido el sistema de archivos original de Linux el cual aumentó su popularidad desde mediados de los noventa. El sistema de archivos ext2 es el modelo alrededor del cual la capa del sistema de archivos virtual está diseñada y originariamente implementa casi todas las características esperadas de un sistema de archivos en Linux. ext3 El sistema de archivos ext3 ("extendido 3"), introducido alrededor del año 2000, es una extensión del sistema de archivos que admite registros por diarios. En cada forma, el sistema de archivos ext3 es idéntico al sistema de archivos ext2 y lo que se dice acerca del uno se puede aplicar al otro. El sistema de archivos ext3 es el sistema de archivos por defecto en Red Hat Enterprise Linux. msdos El sistema de archivos msdos es un sistema de archivos FAT utilizado por DOS y WINDOWS. No es compatible con muchas características avanzadas como las propiedades de archivo y permisos y los nombres de archivo constan de 8 caracteres como mínimo con una extensión de 3 caracteres. vfat El sistema de archivos es una extensión del sistema de archivos de msdos, el cual permite nombres de archivos largos. nfs El nfs "sistema de archivos de red" se utiliza para compartir directorios entre máquinas Linux (y Unix). Una máquina exporta parte de su estructura de directorio a través de la red, que otra máquina puede importar a su estructura de directorio local en el nivel del sistema de archivos. smbfs El sistema de archivos smbfs se utiliza para compartir directorios entre máquinas Linux (y Unix) y Windows. Mediante smbfs, una máquina de Linux puede incorporar un recurso compartido de Windows exportado a su estructura de directorio local. iso9660 El sistema de archivos iso9660 es un sistema de archivos de sólo lectura muy utilizado en los discos compactos. proc El sistema de archivos proc es un sistema de archivos virtual que reside en el kernel (i.e. no hay disco duro asociado con el sistema de archivos). reiserfs El reiserfs es un sistema de archivos de diario alterno original de Linux y soportado por Red Hat Enterprise Linux. jfs El jfs (del inglés "journaling filesystem") es un sistema de archivos de registro por diario con muchas características empresariales originarias de máquinas IBM. El sistema de archivos jfs se ha introducido recientemente a código fuente y migrado a Linux y está respaldado por Red Hat Enterprise Linux. Se podría agregar más al cuadro, pero se espera que se haya planteado el punto que de las características de Linux sirven para una variedad de sistemas de archivos. Si desea mayor información puede comenzar con la página del manual fs(5). Examinaremos el sistema de archivos ext2/ext3 y también nos familiarizaremos con otros del cuadro. Creación de sistemas de archivos Antes de que un dispositivo de bloque se puede utilizar para almacenar archivos, se debe inicializar con un sistema de archivos. En Red Hat Linux, se utiliza alguna variante del comando mkfs para crear sistemas de archivos. Estos comandos tienden a residir en el directorio /sbin. [root@station root]# ls /sbin/mkfs.* mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat El comando mkfs es un comando frontal que espera ser llamado con la opción -t, cuyo argumento es el tipo de sistema de archivos para crear. Los otros comandos listados, que comienzan por mkfs. son variantes de sistemas de archivos específicos para sistemas de archivos particulares. Por ejemplo, mkfs -t ext2 y mkfs.ext2 son comandos equivalentes. La inicialización de una partición puede ser tan fácil como lo siguiente. [root@station root]# mkfs.ext2 /dev/hda6 Todas las versiones de los comandos mkfs esperan algunas opciones y un primer argumento requerido que es el archivo (partición) para estructurar. También se puede utilizar un argumento opcional, a veces utilizado como segundo argumento, el cual especifica el tamaño del sistema de archivos en bloques. El segundo argumento rara vez se utiliza porque, por defecto, el sistema de archivos llenará toda la partición especificada o el disco. Aunque cualquiera tiene permisos para ejecutar los comandos mkfs en la práctica, sólo root tiene permisos para escribir los nodos de dispositivo de bloque que se inicializan. Creación de sistemas de archivos ext 2: mke2fs El sistema de archivos más común de Linux es el sistema de archivos ext2 o su primo cercano el sistema de archivo ext3. Nuestra explicación se centrará en el sistema de archivos ext2. Cerca de la conclusión, hallaremos que todo lo que se dice acerca del sistema de archivos ext2 también se aplica directamente al sistema de archivos ext3. Ya que normalmente se utiliza el sistema de archivos ext2, existe otro comando sinónimo de mkfs.ext2 conocido como mke2fs. Los comandosmke2fs, mkfs.ext y mkfs -t ext2 entregan resultados idénticos. Opciones El siguiente cuadro especifica algunas de las opciones más utilizadas del comando mke2fs. Table 1. Opciones para el comando mke2fs Opción Efecto -b tamaño de bloque Especifica el tamaño en bloques del sistema de archivos en bytes, donde tamaño de bloque puede ser 1024, 2048 o 4096. -c Busca bloques malos mientras crea el sistema de archivos. -i densidad Especifica la densidad de un inodo de densidad bytes por inodo. -L label Establece la etiqueta del volumen del sistema de archivos como label. -m n Establece el porcentaje de bloque reservado a n. -N número Especifica directamente el número de inodos. -j Crea un diario de sistema de archivos Las opciones introducen algunos conceptos de sistemas de archivos, los cuales se abordan a continuación. Etiquetas del sistema de archivos (-L) Al igual que la mayoría de sistemas de archivos, un sistema de archivos ext2 se puede etiquetar con un identificador de cadena de texto, el cual tiene máximo 16 caracteres. Otros sistemas operativos suelen referirse a esta etiqueta como un nombre de volumen(cuando se refieren a una partición formateada con un sistema de archivos como un volumen ). Veremos que Red Hat Enterprise Linux hace uso funcional de las etiquetas de sistemas de archivos. Tamaño de bloque (-b) Anteriormente mencionamos de una forma ambigua la organización de sistema de archivos en "fragmentos de bytes" como en "este fragmento de bytes almacena inodos, mientras que este fragmento de bytes almacena dentries". Los fragmentos a los que nos referimos se llaman de una manera más apropiada bloques y cuando se crea un sistema de archivos se debe seleccionar un tamaño de bloque. El sistema de archivos ext2 admite tamaños de bloque de 1024, 2048 y 4096 bytes ("1k", "2k" y "4k", respectivamente). El sistema de bloque establece la granularidad del sistema de archivos. Cuando hay un espacio en el sistema de archivos para almacenar el contenido de un archivo en particular, el espacio se otorga en bloques de tamaño fijo del tamaño de bloque especificado. Por ejemplo, si el tamaño de bloque fuera de 1024, entonces el almacenamiento de un archivo de 5000 bytes de datos requeriría 5 bloques. El mismo archivo almacenado en un sistema de archivos con tamaño de bloque de 4096 requiere 2 bloques. Una vez se ha asignado un bloque a un propósito particular, no puede utilizarse para nada más. A primera vista, el tamaño de un bloque parece resultar en espacio menos desperdiciado. En el ejemplo anterior, el sistema de archivos con el tamaño de bloque de 1k utiliza aproximadamente 1020 bytes (los restantes del quinto bloque), mientras que el sistema de archivos con un tamaño de bloque de 4k utiliza 4092 bytes (el resto del segundo bloque). Sin embargo, un tamaño de bloque más pequeño requiere más gasto de parte del sistema de archivos. Por ejemplo, el sistema de archivos necesita mantener un cuadro interno de qué bloques se han utilizado y para qué propósito. De nuevo, con relación al ejemplo anterior, el sistema de archivos con un tamaño de bloque de 1k tiene que mantener el rastro de 5 bloques, mientras que el sistema de archivos con un tamaño de bloques de 4k sólo mantiene el rastro de 2. Como regla general, entre más grande el sistema de archivos, más grande el tamaño de bloque. Por defecto, mke2fs elige un tamaño de bloque de 1k o 4k, dependiendo del tamaño del sistema de archivos que se está creando. Inodos (-N o -i) Cada archivo está directamente asociado con una estructura denominada inodo. Un inodo debe existir para cada archivo en el sistema de archivos. Es necesario que el número de inodos que contiene un sistema de archivos se especifique cuando se cree el sistema de archivos. Como el número de inodos no se puede cambiar más adelante, se debe tener cuidado al estimar el número de inodos requeridos. Por lo general, el comando mke2fs elige la configuración predeterminada apropiada. Sin embargo, en algunos casos el número de inodos se puede especificar directamente. Cuando se espera que un sistema de archivos contenga una gran cantidad de archivos pequeños, puede que se necesite aumentar el número de inodos o el sistema de archivos puede agotarse. Cuando se espera que el sistema de archivos contenga pocos archivos grandes, el exceso de espacio asignado a los inodos sin utilizar quita espacio que se pudo utilizar para almacenar datos. Como resultado, puede que se desee disminuir el número de inodos. Hay dos formas de especificar el número de inodos. La opción -N se puede utilizar para especificar un número absoluto de inodos. Para situaciones en que se puede hacer una frase tal como "Este sistema de archivos nunca contendrá más de 18.112 archivos", la opción es correcta. En contraste la opción -i se utiliza para especificar una densidad de inodo en bytes por inodo. En la construcción de un sistema de archivos, el comando mke2fs dividirá el tamaño total del sistema de archivos por la densidad (o más exactamente la densidad-inversa) para determinar el número de inodos. Para situaciones donde se pueden hacer frases tales como "Espero que el tamaño promedio de mi archivo sea de 180 kilobytes", ésta es la opción correcta. Bloques reservados Por defecto, el sistema de archivos ext2 reserva el 5% de su espacio para el usuario root. Esta característica intenta dar al administrador un poco de flexibilidad en el caso de que un usuario en el sistema accidentalmente (o intencionalmente) ocupe todo el sistema de archivos. La opción -m permite especificar el porcentaje de bloques que se van a reservar. Examen de los sistemas de archivos con dumpe2fs El comando dumpe2fs descarga en la salida estándar información de bajo nivel acerca de un sistema de archivos ext2. En el siguiente ejemplo, el comando mke2fs se utiliza para crear un sistema de archivos en la partición sda1 con opciones predeterminadas. [root@station root]# mke2fs /dev/sda1 mke2fs 1.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 31744 inodes, 126960 blocks 6348 blocks (5.00%) reserved for the super user First data block=1 16 block groups 8192 blocks per group, 8192 fragments per group 1984 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Cuando se crea el sistema de archivos, el comando mke2fs presenta detalles acerca del nuevo sistema de archivos, incluyendo lo siguiente. La etiqueta del sistema de archivos especificado (en este caso, ninguno). El tamaño de bloque (escogido por mke2fs, si no se especifica en la línea de comando). En este caso 1024 bytes. El número de inodos y bloques en el sistema de archivos. Después de que el sistema de archivos ha sido creado, el comando dumpe2fs se utiliza para examinar sus detalles. El comando dumpe2fs espera ser llamado con un sólo argumento, el nombre de un archivo (disco o partición) que contiene un sistema de archivos ext2. [root@station root]# dumpe2fs /dev/sda1 dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: dcf63b6b-157f-4493-a257-5221a44c37b9 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: filetype sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 31744 Block count: 126960 Reserved block count: 6348 Free blocks: 122934 Free inodes: 31733 First block: 1 Block size: 1024 Fragment size: 1024 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 1984 Inode blocks per group: 248 Filesystem created: Fri Sep 26 17:17:53 2003 Last mount time: n/a Last write time: Fri Sep 26 17:17:54 2003 Mount count: 0 Maximum mount count: 39 Last checked: Fri Sep 26 17:17:53 2003 Check interval: 15552000 (6 months) Next check after: Wed Mar 28 18:17:53 2004 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Group 0: (Blocks 1-8192) Primary superblock at 1, Group descriptors at 2-2 Block bitmap at 3 (+2), Inode bitmap at 4 (+3) Inode table at 5-252 (+4) 7927 free blocks, 1973 free inodes, 2 directories Free blocks: 266-8192 Free inodes: 12-1984 Group 1: (Blocks 8193-16384) Backup superblock at 8193, Group descriptors at 8194-8194 ... La etiqueta del sistema de archivos de texto. La etiqueta está en blanco porque no se especifica ninguna etiqueta en la línea de comando mke2fs (con la opción -L). El sistema de archivos ext2 puede tener varias características habilitadas, las cuales se listarían aquí. El número de inodos en el sistema de archivo. El número de bloques en el sistema de archivos. Al dividir este valor por el número de inodos (hallados en la línea anterior), encontramos que por defecto, el comando mke2fs incluyó un inodo para cada cuatro bloques. El tamaño de bloque, en este caso 1024 bytes ("1k"). Puesto que la partición era relativamente pequeña (126960 bloques en "1k" cada uno = cerca de 127 MB), el comando mke2fs eligió el tamaño de bloque más pequeño. Por último, el comando mke2fs genera un registro de bloques libres y otra información para cada uno de los grupos de bloque. La función de los grupos de bloque en el sistema de archivos ext2 va más allá del alcance de esta discusión. Información más detallada acerca del diseño del sistema de archivos ext2 se puede encontrar en http://e2fsprogs.sourceforge.net. Características del sistema de archivos Ahora utilizamos el comando dumpe2fs para examinar una partición /dev/hda3 montada actualmente. [root@station root]# dumpe2fs /dev/hda3 dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: / Last mounted on: <not available> Filesystem UUID: c6c6c0ec-6430-470d-b371-754503e49ff6 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal filetype needs_recovery sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 652800 Block count: 1303273 Reserved block count: 65163 Free blocks: 148316 Free inodes: 418518 First block: 0 Block size: 4096 Fragment size: 4096 ... En este caso, al sistema de archivos se le ha dado una etiqueta de “/”. Características del sistema de archivos. Veremos esto con más detalles a continuación. El tamaño de bloque de un sistema de archivos es 4.096 bytes. En la salida anterior, un par de características del sistema de archivos merece atención. needs_recovery Recuerde que en el cuaderno anterior, el kernel guarda en buffer toda la actividad de E/S asociada con los dispositivos de bloque. Aunque esto ofrece un mejor rendimiento, si el kernel fuera a apagarse por alguna razón antes de confirmar algunas escrituras pendientes de su memoria caché, la información interna del sistema de archivos (i.e. qué bloques se utilizan y para qué propósito) podría quedar en un estado inconsistente. Cuando se monta un sistema de archivos (i.e. utilizado. Ampliaremos esto en una próxima lección). se pone una bandera needs_recovery. Si el sistema de archivos se desmonta a través de técnicas normales, como cuando el sistema se apaga desde la línea de comandos, el kernel tiene una oportunidad de descartar sus escrituras pendientes en el disco y se suprime la bandera needs_recovery. Sin embargo, si el sistema de archivos no se desmonta correctamente, como cuando el sistema pierde poder o se apaga sin cerrarse, la banderaneeds_recovery nunca desaparece. Cuando se utiliza (tras el reinicio, por ejemplo), se encontrará la bandera needs_recovery y se hará mantenimiento en el sistema de archivos. has_journal El comando mke2fs sutilmente menciona que este sistema de archivos ext2 tiene un registro de diario asociado. Anteriormente, dijimos que el sistema de archivos ext3 es solo un sistema de archivos ext2 con un diario de registro. ¿Qué nos queda por concluir? Estamos utilizando el comando dumpe2fs para examinar lo que es ¡realmente un sistema de archivo ext3! De nuevo, el sistema de archivos ext3 es apenas un sistema de archivos ext2 con una "característica" agregada de un diario de registro. El sistema de archivos de diario ext3 Sistemas de archivos de diario ¿Cuál es la importancia del sistema de archivos de registro de diario? Un sistema de archivos de registro de diario mantiene un registro de todas las transacciones a través de un proceso más conocido como "guardado de cambios en dos fases". Cuando se escribe información en un disco, un sistema de archivos de registro de diario utiliza un método similar al siguiente: 1. El sistema de archivos escribe al registro de diario los detalles sobre la transacción que se va a realizar. 2. El sistema de archivos realiza la transacción. 3. Tras completarla con éxito, el sistema de archivos borra los detalles sobre la transacción del registro del diario. ¿Qué se obtiene de este trabajo adicional? Al igual que el registro del diario del capitán se utiliza para contarle a los rescatadores lo que estaba sucediendo en el barco cuando el barco chocó, el registro de diario del sistema de archivos cuenta a las utilidades de reparación del sistema de archivos lo que el sistema de archivos iba a hacer cuando se presentó una falla en el sistema de archivos. Al reparar el sistema de archivos ext2, el cual no mantiene un registro de diario, la utilidad de reparación del sistema de archivos debe examinar todo el sistema de archivos, buscando cualquier información de estructuración interna, la cual está en un estado inconsistente. Para cada sistema de archivo moderadamente grande (40 gigabytes, por ejemplo) este proceso puede durar varios minutos. En contraste, al reparar un sistema de archivos ext3, la utilidad de reparación sólo tiene que centrarse en el registro de diario de transacciones pendientes. La utilidad de reparación puede entonces restablecer las estructuras internas de un sistema de archivos asociadas con estas transacciones a un estado consistente y asumir que el resto del sistema de archivos está correcto. La presencia de un registro de diario para guiar la utilidad de reparación reduce dramáticamente la cantidad de tiempo necesario para comenzar a reutilizar un sistema de archivos dañado. Creación de sistemas de archivos ext3 ¿Cómo se crea un sistema de archivos ext3? Observe el cuadro anterior de las opciones más utilizadas para el comando mke2fs, la opción -j se incluyó sin explicación. La opción especifica que la utilidad mke2fs debe incluir un registro de diario con un sistema de archivos ext2 recién creado. En otras palabras, hacer un sistema de archivos ext3. Como ventaja, también se proporciona el comando mkfs.ext3. El comando es un sinónimo para mke2fs -j (o mkfs.ext2 -j o mkfs -t ext2 -j). Comparte todas las opciones con mke2fs. Linux Filesystem Management Ejemplos Creación de un sistema de archivos ext2 Al seguir configurando su nuevo disco, el usuario prince procede a crear su primer sistema de archivos, el cual quiso que fuera un sistema de archivos ext2. Luego toma las siguientes decisiones acerca de las especificaciones. El sabe que va a utilizar el sistema de archivos para almacenar imágenes, por lo tanto decide dar al sistema de archivos la siguiente etiqueta pics. Como él es el único usuario que por rutina utilizará la partición, decide no desperdiciar espacio reservando los bloques para el usuario root y establece el porcentaje del bloque reservado como 0. Puesto que espera almacenar relativamente unos pocos archivos grandes, decide forzar el tamaño del bloque a 4.096 bytes. Para estar seguro, hace que el comando mke2fs compruebe que no hay bloques defectuosos antes de la creación de un sistema de archivos. Escribe las opciones apropiadas y ejecuta el comando mke2fs en la partición. [root@station root]# mke2fs -L pics -m 0 -b 4096 -c /dev/hdb2 mke2fs 1.32 (09-Nov-2002) Filesystem label=pics OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 126720 inodes, 126622 blocks 0 blocks (0.00%) reserved for the super user First data block=0 4 block groups 32768 blocks per group, 32768 fragments per group 31680 inodes per group Superblock backups stored on blocks: 32768, 98304 Checking for bad blocks (read-only test): done Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Para confirmar si el sistema de archivos se ha creado "de acuerdo con las especificaciones", ejecuta el comando dumpe2fs cuya salida se presenta a continuación. [root@station root]# dumpe2fs /dev/hdb2 dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: pics Last mounted on: <not available> Filesystem UUID: dbc2276d-3393-4f75-9e1b-e6d114e87e53 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: filetype sparse_super ... Inode count: 126720 Block count: 126622 Reserved block count: 0 ... Block size: 4096 ... Todo parece estar correcto. Creación de un sistema de archivos vfat La máquina del usuario prince es una máquina de inicio dual con Red Hat Enterprise Linux y Windows XP. Su partición Windows está usando el sistema de archivos NTFS, el cual no es respaldado por Red Hat Enterprise Linux. Puesto que quisiera poder compartir archivos entre los dos sistemas operativos, prince hace una partición FAT que se puede ver desde los dos mundos. Aunque sabe que el comando mkfs.vfat tiene varias opciones que se pueden utilizar para especificar detalles de sistemas de archivos FAT, asume que la configuración predeterminada es apropiada y rápidamente crea la partición. [root@station root]# mkfs.vfat /dev/hdb3 mkfs.vfat 2.8 (28 Feb 2001) Al ver que no hay información que retorna del comando y sin conocer ninguno análogo al comando dumpe2fs para el sistema de archivos vfat, prince asume que todo salió bien y avanza. Creación de un sistema de archivos ext3 Por último, prince va a crear un sistema de archivos ext3 para guardar toda su música que ha sido quemada del CD en el formato ogg vorbis. Decide etiquetar el sistema de archivos ogg de modo apropiado. Sabe que pudo haber utilizado el comando mkfs.ext3, pero debido a que sus dedos tienen la costumbre de teclear mke2fs. Agrega la opción -j para que el archivo resultante sea ext3. [root@station root]# mke2fs -j -c -L ogg /dev/hdb5 mke2fs 1.32 (09-Nov-2002) Filesystem label=ogg OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 125696 inodes, 251362 blocks 12568 blocks (5.00%) reserved for the super user First data block=0 8 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Checking for bad blocks (read-only test): done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. De nuevo, confirma el resultado con el comando dumpe2fs. [root@station root]# dumpe2fs /dev/hdb5 dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: ogg Last mounted on: <not available> Filesystem UUID: 7c82a031-a594-4579-a63f-fb28972bcfc8 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal filetype sparse_super ... Inode count: 125696 Block count: 251362 Reserved block count: 12568 ... Block size: 4096 ... Journal UUID: <none> Journal inode: 8 Journal device: 0x0000 ... Viendo algunos signos que el registro de diario fue creado, prince está satisfecho que el sistema de archivos sea un sistema de archivos ext3. Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Crear una nueva partición ext2. Tiempo estimado: 10 minutos. Specification Este ejercicio de laboratorio continuará usando la partición creada en el ejercicio de laboratorio anterior. Asegúrese que el archivo ~/lab3.1/disk aún exista y que aún se refiera al dispositivo correcto. Crear un sistema de archivos ext2 en la última partición creada en el ejercicio anterior. El sistema de archivos debería cumplir con los siguientes criterios: 1. El sistema de archivos debería tener la etiqueta lab3.2. 2. El sistema de archivos debe tener un tamaño de bloque de 2.048 bytes. 3. El sistema de archivos debería tener exactamente 24.000 inodos (o tan cerca de 24.000 como sea posible). Resultados A title Question 1 1. La última partición en el dispositivo especificada en el archivo ~/lab3.1/disk debe ser formateada con un sistema de archivos ext2, cuya etiqueta es tiene un tamaño de bloque de 2.048 y tiene (cerca de) 24.000 inodos. grade Discusión Montaje de sistemas de archivos En Linux (y Unix), los sistemas de archivos están combinados en un sólo árbol de directorio mediante un concepto denominado montaje. Cada sistema de archivos proporciona un directorio raíz el cual sirve como base del sistema de archivos. Cuando se monta un sistema de archivos, su directorio raíz está vinculado a un directorio ya existente en el árbol de directorios del sistema conocido como el punto de montaje para el sistema de archivos. Cada vez que se haga referencia al punto de montaje, el directorio raíz del sistema de archivos montado se presentará en su lugar. Mientras elaboramos el concepto de montaje, continuemos usando el dispositivo IDE presentado en nuestra discusión sobre particionamiento. Figure 1. Particionamiento para el dispositivo /dev/hda La partición raíz Puesto que el punto de montaje debe ser un directorio ya existente, el primer montaje es especial y realizado por el kernel directamente en el inicio. Este primer sistema de archivos se conoce como la partición raíz y el directorio raíz de la partición raíz se convierte en el directorio raíz del árbol de directorios,"/". En el ejemplo anterior, la partición /dev/hda5 se utiliza como la partición raíz. Figure 1. La partición raíz /dev/hda5 El sistema de archivos contiene un directorio raíz y subdirectorios conocidos tales como /etc, /home y /boot. Si se desea. la partición raíz podría servir como el único sistema de archivos de la máquina. Los directorios anteriores contienen subdirectorios y los subdirectorios a su vez contienen subdirectorios, para que cada archivo en el sistema sea almacenado en este único sistema de archivos. Para estaciones de trabajo sencillas, éste puede ser el diseño apropiado. "Particionamiento " de partes del árbol de directorios En la práctica, los administradores de Linux (y Unix) a menudo prefieren componer su árbol de directorios del sistema de las múltiples particiones. En el ejemplo anterior, la partición /dev/hda6 se conoce como la partición /home puesto que se intenta montar el sistema de archivos al directorio /home en el árbol de directorios. En el siguiente diagrama, examinamos el contenido del sistema de archivos. Figure 1. El sistema de archivos /dev/hda6 El sistema de archivos tiene su propio directorio raíz y subdirectorios tales como /blondie, /elvis, etc. Cuando se montan en el directorio /home, el punto de montaje /home se vincula al directorio raíz del sistema de archivos /dev/hda6. Figure 2. El sistema de archivos montados/dev/hda6 en /home Una vez montados, todas las referencias al directorio /home ya no se ve el contenido del directorio /home en la partición /dev/hda5, sino el directorio raíz de la partición /dev/hda6. Para el usuario final, el efecto no es perceptible. Cuando el usuario pide un ls de /home él ve los directorios elvis, madonna, etc. El proceso puede continuar tanto como se desee. El siguiente diagrama refleja todo el árbol de directorios ensamblado para el dispositivo IDE anterior, con el sistema de archivos /dev/hda6 montado para /home, el sistema de archivos /dev/hda7 montado para /var y el sistema de archivos /dev/hda8 montado para /var/ftp/pub. Todos los nombres de archivos se listan relativos al directorio raíz del sistema de archivos que los contiene. Figure 3. El árbol de directorios completamente ensamblado A menudo, el usuario final, que podría pedir un md5sum del archivo /var/ftp/pub/images/bootdisk.img, no se da cuenta que su referencia absoluta atraviesa tres particiones diferentes. Note En el diagrama del dispositivo IDE y en nuestra explicación, nos hemos referido a la partición /dev/hda6 como la partición "/home". Se debe resaltar el hecho que el directorio /home no exista en el sistema de archivos /dev/hda6. El sistema de archivos sólo se conoce como la partición /home porque se intenta montar en el directorio /home. Puede ser tan fácilmente montada en el directorio /etc, resultando en un árbol de directorios que contiene los directorios /etc/blondie, /etc/elvis, etc (esto es posible, pero no se desea). Montaje de sistemas de archivos con el comando mount Los sistemas de archivos se montan con el comando mount. Por lo general, solo root puede montar sistemas de archivos. El siguiente ejemplo del comando mount ilustra la sintaxis general. [root@station root]# mount -t ext2 -o noatime,noexec /dev/sda1 /home Cada ejecución del comando mount debe de alguna manera resolver las siguientes preguntas. 1. ¿Qué dispositivo está siendo montado? El primer argumento especifica el nombre del dispositivo de bloque que va a ser montado. 2. ¿Con qué sistema de archivos está formateado el dispositivo? El sistema de archivos se puede especificar con la opción -t. 3. ¿En dónde se debe montar el dispositivo? El segundo argumento especifica el directorio ya existente que debe servir como punto de montaje para el sistema de archivos. 4. ¿Hay otras opciones que se deban asociar con el sistema de archivos montado? Las opciones de montaje generalmente se especifican con la opción -o. En el ejemplo anterior, el sistema de archivos montado no registrará tiempos de acceso al archivo y no interpretará ninguno de los archivos como comandos a ejecutar. Listado de todos los dispositivos montados Cuando el comando mount se llama sin argumentos, listará todos los sistemas de archivos montados junto con las respuestas a las cuatro preguntas anteriores. [root@station root]# mount /dev/hda3 on / type ext3 (rw) none on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) /dev/hda1 on /boot type ext3 (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) none on /dev/shm type tmpfs (rw) /dev/sda1 on /home type ext2 (rw,noexec,noatime) Atajos del tipo del sistema de archivos Si el tipo de sistema de archivos no está especificado, el comando mount consultará el archivo /etc/filesystems para obtener /etc/filesystems una lista de los sistemas de archivos propuestos. [root@station root]# cat /etc/filesystems ext3 ext2 nodev proc nodev devpts iso9660 vfat hfs Al montar uno de estos tipos de sistemas de archivos, el sistema de archivos no necesita especificarse manualmente. Opciones de montaje El kernel de Linux admite las siguientes opciones de montaje, las cuales por diseño son genéricas para cualquier sistema de archivos. En la práctica, algunos sistemas de archivos ignoran algunas de las opciones. La mayoría de las opciones de montaje se implementan como opciones complementarias tales como exec y noexec. Dichas opciones binarias se presentan en parejas en el siguiente cuadro. Table 1. Opciones de montaje de Linux Opción Efecto ro, rw La opción ro especifica que el sistema de archivos se debería montar sólo de lectura. Los parámetros internos del sistema de archivos (tales como un conteo de montaje o el tiempo de montaje) tampoco se modifican. Por defecto es rw. (a)sync La opción sync especifica que todas las transacciones deben tener lugar sincrónicamente, i.e. las escrituras deben evitar el caché del kernel. Aunque esta opción ofrece mayor integridad (las transacciones se escriben en el disco inmediatamente) puede degradar el rendimiento del sistema en términos generales. El valor predeterminado es async. Esta opción es compatible actualmente con los sistemas de archivos ufs y ext2/ext3. La opción noatime especifica que los tiempos de acceso al archivo no se deben mantener. Cuando se registran los tiempos de acceso, cada lectura efectiva se convierte en una escritura (porque el atime del inodo requiere (no)atime actualizarse). Si los tiempos de acceso no se consideran importantes, el rendimiento del sistema se puede mejorar al ignorarlos. También resulta útil en los equipos portátiles, esta opción puede impedir que el dispositivo "gire" sin necesidad. Por defecto es atime. (no)dev La opción nodev especifica que ninguno de los archivos dentro del sistema de archivos se deben interpretar como nodos de dispositivo. Por defecto es dev. La opción noexec especifica que ninguno de los archivos dentro del sistema (no)exec de archivos se debe interpretar como comandos ejecutables. Por defecto es exec. La opción nosuid especifica que el bit de permiso suid no se debería atribuir en ningún archivo dentro del sistema de archivos. El bit suid permite a los (no)suid scripts aumentar los privilegios tras la ejecución y se utiliza para implementar puertas de captura en sistemas comprometidos. Por defecto es suid. Además, la mayoría de los sistemas de archivos admiten opciones de montaje para ese sistema de archivos. Consulte la página del manual mount(8) para obtener mayores detalles. En la práctica, las opciones predeterminadas suelen ser apropiadas y el comando mount se llama a menudo con sólo dos argumentos como se indica a continuación. [root@station root]# mount /dev/sda1 /home Desmonte de sistemas de archivos con el comando umount Los sistemas de archivos se desmontan con el comando umount. El comando umount espera ser llamado con un solo argumento, el cual puede ser un nombre de dispositivo o el punto de montaje asociado con el montaje. Cualquiera de los dos comandos a continuación intentarían desmontar la partición /dev/sda1 desde el directorio /home. [root@station root]# umount /home [root@station root]# umount /dev/sda1 Aunque simple en concepto, una complicación suele ayudar a frustrar el intento de desmontar dispositivos: [root@station home]# umount /home umount: /home: device is busy El comando umount sólo desmontará sistemas de archivos que no estén "ocupados". Un sistema de archivos se considera "ocupado" si cualquier proceso tiene un archivo abierto en el sistema de archivos o cualquier proceso tiene un directorio dentro del sistema de archivos como su directorio de trabajo actual. Antes de desmontar el sistema de archivos, el proceso que está ocupándolo se debe rastrear y matar (o convencerlo de que libere los archivos y o directorios que está reclamando). Uso de fuser o lsof para rastrear procesos. Afortunadamente, un comando está diseñado justo con ese propósito en mente. El comando fuser lista los IDs de procesos, los cuales están de alguna manera utilizando un archivo. Más importante aún para nuestros propósitos, si el comando fuser se llama con la opción -m, listará todos los procesos que están utilizando archivos en cualquier parte del sistema de archivos que contiene el archivo especificado. [root@station home]# fuser -m /home /home: 1912c En este caso, el ID del proceso 1912 tiene un directorio de trabajo actual dentro de un sistema de archivos especificado. La observación del intérprete de comandos bash implica que el ID probablemente pertenece a la shell misma. Al cambiar directorios "fuera de " la partición /home se puede desmontar el dispositivo. [root@station home]# cd [root@station root]# umount /home/ El comando lsof (para "liste los archivos abiertos") ofrece una alternativa para fuser. Cuando se invoca en un directorio que sirve como punto de montaje, lsof lista cada archivo abierto dentro del sistema de archivos. [root@station6 foo]# lsof /home COMMAND PID USER FD TYPE DEVICE bash 1912 root cwd DIR 3,5 lsof 15612 root cwd DIR 3,5 lsof 15613 root cwd DIR 3,5 SIZE NODE NAME 1024 12049 /home 1024 12049 /home 1024 12049 /home El comando lsof es muy versátil y es una buena herramienta para tener a su disposición, pero en este punto vale la pena mencionar este uso. Remontar particiones con mount -o remount El comando mount también sirve para asociar nuevas opciones de montaje con particiones que ya están montadas. Al remontar particiones, el comando mount debe llamarse con la opción remount, combinada con cualquiera de las nuevas opciones que deben estar asociadas con el sistema de archivos. Considere el siguiente ejemplo. [root@station root]# date > /home/foo [root@station root]# mount -o remount,ro /home [root@station root]# date > /home/foo -bash: /home/foo: Read-only file system [root@station root]# mount -o remount,rw /home [root@station root]# date > /home/foo Linux Filesystem Management Ejemplos Creación de puntos de montaje Continuando con su trabajo del ejemplo anterior, prince decide crear los siguientes puntos de montaje para sus tres sistemas de archivos: Partición Tamaño /dev/hdb2 512 megabytes /dev/hdb3 512 megabytes Sistema de archivos Punto de montaje ext2 /picts vfat /dosd /dev/hdb5 1024 megabytes ext3 /ogg Su primer paso es crear los directorios necesarios. [root@station root]# mkdir /picts /dosd /ogg Luego, monta sus nuevas particiones, una por una. Dado que está utilizando los tipos del sistema de archivos estándar, no necesita especificar los tipos de sistemas de archivo para el mount command. [root@station root]# mount /dev/hda6 /picts/ [root@station root]# mount /dev/hda7 /dosd [root@station root]# mount /dev/hda8 /ogg [root@station root]# mount /dev/hda6 on / type ext3 (rw) none on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) /dev/hda7 on /var/ftp/pub type ext3 (rw) /dev/hda5 on /home type ext3 (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) none on /dev/shm type tmpfs (rw) /dev/hdb2 on /picts type ext2 (rw) /dev/hdb3 on /dosd type vfat (rw) /dev/hdb5 on /ogg type ext3 (rw) Después de realizar el montaje, prince decide proteger el sistema de archivos vfat hasta poder confirmar que está bien después de reiniciar en Windows XP. Decide agregar la opción de montaje ro. [root@station root]# mount -o remount,ro /dosd [root@station root]# mount ... /dev/hdb2 on /picts type ext2 (rw) /dev/hdb3 on /dosd type vfat (ro) /dev/hdb5 on /ogg type ext3 (rw) Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Montar un sistema de archivos ext2 en un directorio especificado con las opciones de montaje apropiadas. Tiempo estimado: 10 minutos. Specification Este ejercicio de laboratorio continuará usando el sistema de archivos creado en el ejercicio de laboratorio anterior. Asegúrese que el archivo ~/lab3.1/disk aún exista y que aún haga referencia al dispositivo apropiado. La última partición del dispositivo debería tener un sistema de archivos ext2 formateado correctamente. 1. Crear el directorio /lab3 que servira de punto de montaje para su partición. 2. Montar la última partición en el dispositivo especificado en el directorio /lab3 con las opciones de montaje noexec y noatime. Resultados A title Question 1 1. La última partición en el dispositivo especificado en el archivo ~/lab3.1/disk se debe montar en el directorio /lab3 con las opciones noexec y noatime. grade Linux Filesystem Management Discusión En la lección anterior, el comando mount se presentó requiriendo dos argumentos: el dispositivo para montar y el punto de montaje al cual montarlo. Sin embargo, los atajos suelen tomarse con el comando mount, como en los siguientes 3 ejemplos. [root@station root]# mount /mnt/floppy [root@station root]# mount /dev/fd0 [root@station root]# mount -a Cada vez que el comando mount se llama sin información busca un "cuadro de sistema de archivos" para ofrecer más: el archivo /etc/fstab. La sintaxis de los archivos /etc/fstab El siguiente archivo /etc/fstab podría encontrarse en la máquina con el dispositivo IDE de nuestra lección anterior. [root@station root]# cat /etc/fstab /dev/hda5 / ext3 /dev/hda6 /home ext3 /dev/hda7 /var ext3 /dev/hda8 /var/ftp/pub ext3 /dev/hda3 /boot ext3 none /dev/pts devpts none /proc proc none /sys sysfs none /dev/shm tmpfs /dev/hda2 swap swap /dev/hdc /media/cdrom iso9660 tem_u:object_r:removable_t,exec,noauto,managed 0 0 /dev/fd0 /media/floppy auto tem_u:object_r:removable_t,exec,noauto,managed 0 0 defaults 1 1 defaults 1 2 defaults 1 2 defaults 1 2 defaults 1 2 gid=5,mode=620 0 0 defaults 0 0 defaults 0 0 defaults 0 0 defaults 0 0 pamconsole,fscontext=sys pamconsole,fscontext=sys Cada columna del archivo está separada por una combinación de espacio en blanco (generalmente, espacios y/o tabuladores). Cada fila define un montaje, con las primeras cuatro columnas directamente contestando las cuatro preguntas asociadas con cada montaje en la lección anterior: qué, dónde, con qué sistema de archivos y cómo. Las últimas dos columnas son más sutiles y se describen en el cuadro de arriba. Table 1. Formato del archivo /etc/fstab Columna 1 Ejemplo /dev/hda6 Role ¿Qué dispositivo (disco, partición u otra cosa) se va a montar? 2 /home El punto de montaje asociado con el montaje. 3 ext3 El sistema de archivos espera encontrar un dispositivo o la palabra clave "auto" que significa que el sistema de archivos se debe detectar automáticamente. 4 Una lista separada por comas de opciones para asociar con el predeterminados montaje, como se especificaría con la opción -o en el comando mount. 5 0 Utilizado por el comando dump para determinar si esta partición se debe archivar al realizar copias de seguridad. La utilidad dump rara vez se utiliza. 2 El orden "fsck". En el sistema de arranque, el comando fsck "revisión del sistema de archivos" se ejecuta en cada sistema de archivos identificado. Hay tres valores importantes para este campo: 1 (reservado para la partición raíz), 2 (para todas las particiones que van a ser revisadas a excepción de la partición raíz) y 0 (para las particiones que no se deben fsck en el arranque). 6 Cada vez que el comando mount se llama con solo un punto de montaje o con sólo un dispositivo, como su único argumento, busca una línea coincidente /etc/fstab dentro del archivo para suplir la información restante. Ejemplos de estos comandos se han dado anteriormente. Observe la referencia al archivo /etc/fstab cuando el siguiente comando mount se queja. [root@station root]# mount /foo mount: can't find /foo in /etc/fstab or /etc/mtab El comando mount -a especifica montar "todo". El comando /etc/fstab lee línea por línea y realiza los montajes apropiados. El comando mount -a se ejecuta como parte del sistema de arranque. Opciones de montaje relevantes al archivo /etc/fstab La siguientes opciones, aunque se documentan en la página del manual mount(8), sólo tienen sentido al utilizarlas en el archivo /etc/fstab. Table 1. Opciones de montaje relevantes al archivo /etc/fstab Opción Efecto Utilice las opciones: rw, suid, dev, exec, auto, nouser y async (la palabra predeterminados predeterminados tiene el mismo efecto cuando no se especifican opciones, pero algo debe mantener el lugar de la cuarta columna en el archivo /etc/fstab.) (no)auto La opción noauto especifica que la partición not se debería montar al ejecutar mount -a. Esta opción se usa generalmente en las líneas que definen los puntos de montaje para medios temporales tales como disquetes, CD-ROM y dispositivos USB. user Por defecto, solo root puede realizar montajes. La opción user especifica que cualquier persona puede realizar el montaje predefinido. pamconsole Similar a user, la opción pamconsole especifica que cualquier persona sentada físicamente frente a la máquina puede ser capaz de montar el dispositivo (en contraste con alguien que esté usando una conexión de red remota). managed Esta opción no tiene ningún efecto, sino servidores para etiquetar líneas que fueron agregadas automáticamente por la utilidad de detección de hardware (udevd). Si un administrador desea que estas líneas sean parte permanente del archivo /etc/fstab, simplemente debe suprimir la opción managed. Esta opción es específica de Red Hat Enterprise Linux. Especificar dispositivos por etiqueta de sistemas de archivos El ejemplo anterior de un archivo /etc/fstab se puede encontrar en la mayoría de las versiones de Unix y también funcionaría en Linux. El archivo predeterminado /etc/fstab en Red Hat Enterprise Linux, aprovecha una característica adicional del comando mount de Linux. En Red Hat Enterprise Linux, el mismo archivo probablemente se vería como el siguiente, donde las únicas diferencias se presentan en la primera columna. [root@station root]# cat /etc/fstab LABEL=/ / ext3 LABEL=/home /home ext3 LABEL=/var /var ext3 LABEL=pub /var/ftp/pub ext3 LABEL=/boot /boot ext3 none /dev/pts devpts none /proc proc none /sys sysfs none /dev/shm tmpfs LABEL=SWAP-hda2 swap swap /dev/hdc /media/cdrom auto tem_u:object_r:removable_t,exec,noauto,managed 0 0 /dev/fd0 /media/floppy auto tem_u:object_r:removable_t,exec,noauto,managed 0 0 defaults 1 1 defaults 1 2 defaults 1 2 defaults 1 2 defaults 1 2 gid=5,mode=620 0 0 defaults 0 0 defaults 0 0 defaults 0 0 defaults 0 0 pamconsole,fscontext=sys pamconsole,fscontext=sys Al explicar el comando mke2fs, mencionamos que Red Hat Enterprise Linux hace uso funcional de las etiquetas del sistema de archivos. En lugar de especificar directamente un dispositivo, el dispositivo puede ser especificado por la etiqueta del sistema de archivos. Piense en la segunda línea diciendo "examine todos los sistemas de archivos conocidos y monte el que tiene la etiqueta "home" en el directorio /home. Por convención, Anaconda (el instalador de Red Hat Enterprise Linux) etiqueta los sistemas de archivos por su punto de montaje previsto. De esta forma, el sistema de archivos internamente "sabe" dónde se pretende montar. No obstante, como la cuarta línea de arriba lo indica, ésta es solamente una convención. Cualquier etiqueta será suficiente. ¿Por qué Red Hat Enterprise Linux agrega este nivel adicional de indirección con su complejidad asociada? Porque los nombres de dispositivos pueden ser inconstantes. Hay dos situaciones que pueden llevar al cambio de identidades de dispositivos. 1. Borrado de particiones lógicas: Recuerde que todas las particiones lógicas se mantienen como una lista vinculada y si la partición lógica /dev/hda6 se tuviera que borrar, las particiones lógicas /dev/hda7 y /dev/hda8 cambiarían a /dev/hda6 y /dev/hda7. 2. Agregar (o suprimir) Dipositivos SCSI: Cuando un dispositivo SCSI se agrega o suprime del sistema, los dispositivos SCSI pueden cambiar identidades. Lo que fue /dev/sdb en el arranque anterior podría convertirse en /dev/sdc. En el caso anterior, el hacer un movimiento inocentemente intencionado como agregar un disco SCSI al sistema, podría desequilibrar el archivo tradicional /etc/fstab, dejando al sistema potencialmente inarrancable. La identificación de sistemas de archivos por etiqueta de sistema de archivos más que por nombres, protege contra estos eventos infortunados. Uso de etiquetas del sistema de archivos en la línea de comando de montaje Así como se pueden utilizar las etiquetas del sistema de archivos en el archivo /etc/fstab para especificar un dispositivo, también se pueden utilizar en la línea de comando mount directamente con la opción -L, como en el siguiente ejemplo: [root@station root]# dumpe2fs /dev/hda1 | head -1 dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: /boot [root@station root]# mount -L /boot /boot Igualmente, los dispositivos pueden ser identificados en la línea de comando mount (y el archivo /etc/fstab) por su "UUID" (Identificador Universal Único). Para mayor información, refiérase a las páginas de manual mount(8) y fstab(5). Agregar líneas al archivo /etc/fstab Al crear un nuevo sistema de archivos, hay varias razones por las cuales una línea que define un punto de montaje para el sistema de archivos se podría agregar al archivo /etc/fstab. Una línea /etc/fstab define un "lugar" para el sistema de archivos. Aunque el sistema de archivos pudo montarse en cualquier momento y en cualquier directorio, definir un punto de montaje tiene el efecto de dar a los archivos un lugar en el árbol de directorios. El montaje se convierte en parte del proceso de arranque del sistema. A no ser que se agregue la opción noauto, el montaje ocurrirá automáticamente en el inicio del sistema. Los usuarios que no son root pueden realizar el montaje. Por defecto, únicamente root puede realizar un montaje. Sin embargo, si la opción user u owner se especifican en el archivo /etc/fstab, este privilegio puede otorgarse a otros usuarios. En principio, agregar una línea al archivo /etc/fstab es fácil y puede realizarse con cualquier editor de texto. Se debe tener el cuidado de no destruir la sintaxis del archivo. Debido al comando mount -a, el archivo /etc/fstab juega un papel fundamental en el proceso de arranque del sistema. Un archivo /etc/fstab destruido o mal especificado puede dejar el sistema inarrancable. Al editar el archivo /etc/fstab, los editores de texto (o los procesadores de palabra) que implementan "la delimitación de palabra" deben evitarse. Linux Filesystem Management Ejemplos Definición de puntos de montaje en el archivo /etc/fstab Puesto que prince no desea realizar los tres montajes de forma manual para sus tres sistemas de archivos nuevos, cada vez que reinicia la máquina, decide definir los montajes en su archivo /etc/fstab. Primero examina su archivo actual, buscando líneas similares a lo que él quiere. [root@station root]# cat /etc/fstab LABEL=/ / ext3 LABEL=/var/ftp/pub /var/ftp/pub ext3 LABEL=/home /home ext3 LABEL=/boot /boot ext3 none /dev/pts devpts none /proc proc none /sys sysfs none /dev/shm tmpfs LABEL=SWAP-hda2 swap swap /dev/hdc /media/cdrom auto tem_u:object_r:removable_t,exec,noauto,managed 0 0 /dev/fd0 /media/floppy auto tem_u:object_r:removable_t,exec,noauto,managed 0 0 defaults 1 1 defaults 1 2 defaults 1 2 defaults 1 2 gid=5,mode=620 0 0 defaults 0 0 defaults 0 0 defaults 0 0 defaults 0 0 pamconsole,fscontext=sys pamconsole,fscontext=sys Decide que la línea que especifica la partición /boot es tan buena como cualquiera. Antes de proceder, para prevenir hace una copia de seguridad del archivo /etc/fstab. [root@station root]# cp /etc/fstab /etc/fstab.bak Luego, mediante un editor de texto, duplica la línea elegida tres veces. LABEL=/boot LABEL=/boot LABEL=/boot LABEL=/boot /boot /boot /boot /boot ext3 ext3 ext3 ext3 defaults defaults defaults defaults 1 1 1 1 2 2 2 2 Luego, comienza a implementar sus requisitos particulares cambiando únicamente lo necesario. LABEL=/boot LABEL=pics /dev/hdb3 LABEL=/ogg /boot /picts /dosd /ogg ext3 ext2 vfat ext3 defaults defaults defaults defaults 1 1 1 1 2 2 2 2 Puesto que no le dio a su sistema de archivos vfat una etiqueta de volumen, se debe referir a ésta por el nombre de su dispositivo. Afortunadamente, es un dispositivo IDE y una partición primaria, por lo tanto, debe ser seguro. Almacena el archivo y abandona el editor. Por último, ensaya su configuración desmontando primero sus particiones y luego simulando un sistema de arranque al ejecutar el comando mount -a. [root@station root]# umount /picts [root@station root]# umount /dosd [root@station root]# umount /ogg [root@station root]# mount -a mount: special device LABEL=/ogg does not exist Al darse cuenta de su error, corrige el archivo /etc/fstab (remplazando LABEL=/ogg con LABEL=ogg) y ensaya de nuevo. [root@station root]# umount /picts [root@station root]# umount /dosd [root@station root]# umount /ogg umount: /ogg: not mounted [root@station root]# mount -a [root@station root]# mount ... /dev/hdb2 on /picts type ext2 (rw) /dev/hdb3 on /dosd type vfat (rw) /dev/hdb5 on /ogg type ext3 (rw) Ahora está satisfecho con los resultados. Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Crear una entrada /etc/fstab que defina correctamente un punto de montaje para su dispositivo. Tiempo estimado: 10 minutos. Specification Este ejercicio continuará usando el sistema de archivos creado y montado en los dos ejercicios anteriores. Asegúrese que el archivo ~/lab3.1/disk aún exista y que aún haga referencia al dispositivo correcto. La última partición del dispositivo debe tener un sistema de archivos ext2 formateado correctamente. 1. Agregue una línea a su archivo /etc/fstab que defina el montaje realizado en el último laboratorio. Para recapitular, la última partición del dispositivo especificado se debe montar en el directorio /lab3 con las opciones noatime y noexec. 2. La línea debe referirse a su partición no por el nombre del dispositivo, sino por la etiqueta del sistema de archivos. 3. Agregue los requisitos particulares apropiados para que su sistema de archivos no sea montado por defecto en el arranque del sistema. 4. Configure la línea correctamente para que el sistema de archivos no sea archivado por el comando dump. 5. Desmonte la partición antes de calificar su ejercicio. Resultados A title Question 1 1. Un archivo /etc/fstab configurado correctamente que monte la última partición al directorio /lab3 en el dispositivo especificado con las opciones noexec y noatime. La partición no debe ser montada automáticamente en arranques de sistema y no se debe incluir en archivos creados por el comando dump. Se debe hacer referencia a la partición a través de las etiquetas del sistema de archivos. 2. La partición no debe estar actualmente montada grade Linux Filesystem Management Discusión Espacio swap Linux permite la utilización de los dispositivos de bloque para extender la memoria física del sistema. En otros sistemas operativos, el espacio de disco utilizado para dicho propósito se conoce como "memoria virtual". En Linux (y Unix), se denomina espacio swap y la acción de utilizar la memoria de disco se conoce como intercambiar memoria al disco. En Linux, el espacio swap se puede asignar ya sea como una partición entera o como un archivo en un sistema de archivos ya existente (y montado). El anterior es el más común, pero puede ser más difícil de configurar una vez se ha instalado el sistema. El último es menos eficiente, pero se puede instalar rápidamente si alguna próxima operación requiriera grandes cantidades de memoria. La memoria de disco es dramáticamente más lenta para acceder que RAM. Como resultado el espacio swap suele utilizarse para resolver demandas de memoria temporal y no como remplazo general para la memoria física. Si un sistema utiliza constantemente grandes cantidades de espacio swap, más memoria física mejoraría ampliamente su rendimiento. Los nuevos usuarios de Linux algunas veces se sorprenden al descubrir que, incluso cuando no esté ejecutando procesos que solicitan grandes cantidades de memoria, el kernel de Linux utiliza el espacio swap. Recuerde que el kernel de Linux utiliza principalmente memoria para dos procesos: procesar memoria y almacenar en caché operaciones de E/S . Algunas veces, el kernel sacrificará la memoria de proceso que se utilice poco con el fin de incrementar el tamaño del caché de E/S, "intercambiando"las porciones de los procesos poco utilizados con la intención de mejorar todo el funcionamiento del sistema. El hecho de que el Kernel de Linux esté utilizando un poco de espacio swap no implica necesariamente que se requiera más memoria física. Igualmente incluso los sistemas con grandes cantidades de memoria física deben proporcionar alguna cantidad de espacio swap. El kernel de Linux prefiere tener la opción de intercambiar memoria al disco disponible cuando desarrolla sus estrategias de optimización de memoria. Los sistemas que no proporcionan espacios swap se consideran oficialmente como una configuración no soportada por Red Hat. Monitorizar particiones swap: /proc/swaps y /proc/meminfo El archivo /proc/swaps del sistema de archivos proc lista los espacios swap activos, su tipo (de partición o archivo), sus tamaños y su prioridad. [root@station root]# cat /proc/swaps Filename Type /dev/hda2 partition Size 522104 Used 42284 Priority -1 El sistema de archivos proc /proc/meminfo lista la cantidad total de espacio swap asignado actualmente, junto con las estadísticas de la memoria física. [root@station root]# cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 261357568 241696768 19660800 0 38731776 119062528 Swap: 534634496 43298816 491335680 MemTotal: 255232 kB MemFree: 19200 kB MemShared: 0 kB ... SwapTotal: 522104 kB SwapFree: 479820 kB Utilización de swap en bytes. Utilización de swap en kilobytes convencionales (donde 1 kB = 1.024 bytes). Inicialización de espacio swap con mkswap Con el fin de utilizar la partición de disco o archivo como espacio swap, se debe primero inicializar con el comando mkswap. Al igual que la familia de comandos mkfs, el comando mkswap espera ser llamado con un argumento obligatorio, el archivo que debe ser inicializado. En el siguiente ejemplo, el comando mkswap se utiliza para inicializar el dispositivo /dev/sda1 como espacio swap. [root@station root]# mkswap /dev/sda1 Setting up swapspace version 1, size = 130002 kB Al igual que en la creación de un sistema de archivos, la inicialización de un espacio swap con el comando mkswap es una acción de una sola vez. Activación de espacio swap con swapon Una vez inicializado, el espacio swap debe activarse con el comando swapon. En el siguiente ejemplo, el dispositivo /dev/sda1 inicializado anteriormente es activado, examinando el archivo /proc/swaps tanto antes como después para reflejar el cambio. [root@station root]# cat /proc/swaps Filename Type /dev/hda2 partition [root@station root]# swapon /dev/sda1 [root@station root]# cat /proc/swaps Filename Type /dev/hda2 partition /dev/sda1 partition Size 522104 Used 42284 Priority -1 Size 522104 126952 Used 42284 0 Priority -1 -2 El comando swapon también permite que se establezcan prioridades con la opción -p. La áreas swap con mayores prioridades se utilizarán antes que las áreas swap con menor prioridad. Ver la página de manual swapon(2) para obtener mayores detalles. Desactivar las áreas swap con swapoff El complemento para el comando swapon, swapoff desactiva el archivo swap especificado. Si el archivo swap estaba en uso, el comando puede tardarse un tiempo en ejecutar, mientras el kernel reubica todas las páginas intercambiadas a otras áreas swap o en RAM. Predefinir áreas swap en el archivo /etc/fstab Cuando se invoca con la opción -a, el comando swapon examinará el /etc/fstab y activará todas las particiones o archivos swap. Cuando se especifica un área swap en /etc/fstab, la primera columna debe ser el nombre de la partición o el archivo que se va a activar, la segunda y tercera columnas deben establecerse con la palabra “swap” y la cuarta columna se debe establecer como “defaults” o se puede utilizar la opción “pri=n” para asignar al área swap una prioridad de n. Los dos últimos campos se deben establecer como 0. Linux Filesystem Management Ejemplos Inicialización de particiones swap Habiendo configurado sus sistemas de archivos como desea, elvis vuelve su atención a la partición swap que creó. Inicializa la partición con el comando mkswap. [root@station root]# mkswap /dev/hda9 Setting up swapspace version 1, size = 139309 kB Luego, activa el espacio swap con el comando swapon y confirma al examinar /proc/swaps que está activado correctamente. [root@station root]# swapon /dev/hda9 [root@station root]# cat /proc/swaps Filename Type /dev/hda2 partition /dev/hdb1 partition Size Used 2096472 0 136040 0 Priority -1 -2 Para activar la partición swap automáticamente en el arranque del sistema, agrega una línea al archivo /etc/fstab. Siguiendo la misma técnica que utilizó con sus sistemas de archivos, busca una línea similar y la duplica. [root@rosemont-es root]# cp /etc/fstab /etc/fstab.bak cp: overwrite `/etc/fstab.bak'? y /dev/hda2 /dev/hda2 swap swap swap swap defaults defaults 0 0 0 0 Ahora, al editar una sóla palabra, su nueva partición swap está incorporada en el proceso de arranque. /dev/hda2 /dev/hdb1 swap swap swap swap defaults defaults 0 0 0 0 Uso de archivos swap La usuaria blondie está a punto de realizar una compilación de un programa grande que descargó y le preocupa que su máquina no tenga la memoria suficiente. Con el fin de ayudarse en la realización de esta tarea, decide crear un archivo swap. Primero, utilizó el comando dd para crear un archivo de 256 megabytes lleno de ceros. En la línea de comando dd, especifica su archivo de entrada como el dispositivo virtual /dev/zero, el archivo de salida como su archivo swap, /tmp/swap, el tamaño de bloque como 1 megabyte y el tamaño de transferencia de 256 bloques. [root@station root]# dd if=/dev/zero of=/tmp/swap bs=1024k count=256 256+0 records in 256+0 records out [root@station root]# ls -s /tmp/swap 262404 /tmp/swap Después de crear el archivo, lo trata como si fuera una partición, primero inicializándolo para utilizarlo como espacio swap y luego, activando el archivo. [root@station root]# Setting up swapspace [root@station root]# [root@station root]# Filename /dev/hdb2 /dev/hda9 /tmp/swap mkswap /tmp/swap version 1, size = 268431 kB swapon /tmp/swap cat /proc/swaps Type Size partition 2096472 partition 136040 file 262136 Used 0 0 0 Priority -1 -2 -3 Luego realiza su compilación. Al terminar, limpia desactivando el espacio swap y borrando el archivo. [root@station root]# swapoff /tmp/swap [root@station root]# rm /tmp/swap rm: remove regular file `/tmp/swap'? y Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Inicializar una partición swap y configurar su archivo /etc/fstab para que la partición se active automáticamente en el inicio del sistema. Tiempo estimado: 15 minutos. Specification Este ejercicio utilizará la primera partición creada en el primer ejercicio de este cuaderno. Asegúrese que el archivo ~/lab3.1/disk aún exista y que aún haga referencia al dispositivo correcto. La penúltima partición del dispositivo especificado debe ser de un tamaño aproximado de 128 megabytes y debe tener un Id de partición Linux Swap. 1. Inicializar la penúltima partición que se va a utilizar como espacio swap. 2. Activar manualmente la partición swap. 3. Agregar una línea a su archivo /etc/fstab de tal modo que la partición swap se active automáticamente en el inicio del sistema. [Note] Note Al calificar su laboratorio, el espacio swap será desactivado y reactivado. Si la reactivación fracasa, debe reiniciar manualmente el espacio swap (paso 2) antes de volver a calificar. Resultados A title Question 1 1. Una partición swap bien inicializada y activada, la cual es la penúltima partición en el dispositivo especificado. 2. Un archivo /etc/fstab correctamente configurado de tal modo que la partición swap se active automáticamente en el arranque. grade Linux Filesystem Management Discusión En esta última lección, cubrimos varios comandos y conceptos que no se han tratado aún y terminamos con un resumen que reúne las destrezas desarrolladas en este cuaderno y las pone en contexto. El comando e2label El comando e2label se utiliza para mostrar o establecer el nombre de volumen de un sistema de archivos ext2 o ext3. El primer argumento debe ser el nombre de la partición que contiene el sistema de archivos. Si sólo se proporciona un argumento, se muestra el nombre del volumen. Si se provee un segundo argumento opcional, entonces se establece el nombre del volumen. Ambos se ilustran en la siguiente secuencia. [root@station root]# e2label /dev/hda1 /boot [root@station root]# e2label /dev/hda1 foo [root@station root]# e2label /dev/hda1 foo Recuerde que en Red Hat Enterprise Linux, usted no debe cambiar los nombres de volumen sin considerar la configuración del archivo /etc/fstab. Después de realizar este ejemplo, a no ser que la referencia LABEL= para la partición /boot también sea cambiada en el archivo /etc/fstab, la partición /dev/hda1 probablemente no será montada cuando se reinicie la máquina. Reparación del sistema de archivos con fsck Los sistemas de archivos por lo general, mantienen grandes cantidades de datos de la estructura del directorio. Con el tiempo las imperfecciones del disco o del kernel pueden dar lugar a daños menores de los datos del sistema de archivos. Si un sistema se apaga antes de desmontar un sistema de archivos es muy probable que contenga daños. Unix proporciona un comando fsck derivado del inglés "(f)ile (s)ystem (c)hec(k)", el cual se utiliza para diagnosticar y corregir errores en el sistema de archivos. El acto de ejecutar el comando en un sistema de archivos se conoce como "fisking" la partición. Al igual que el comando mkfs, Linux utiliza un comando fsck de primer plano respaldado por varias versiones específicas del sistema de archivos que inician fsck.. [root@station root]# ls /sbin/fsck* /sbin/fsck /sbin/fsck.ext2 /sbin/fsck.jfs /sbin/fsck.cramfs /sbin/fsck.ext3 /sbin/fsck.msdos /sbin/fsck.reiserfs /sbin/fsck.vfat El comando fsck se puede llamar con la opción -t para especificar un tipo de sistema de archivos o la versión específica del sistema de archivos del comando. Si se utiliza sin la opción -t, tratará de determinar automáticamente el tipo del sistema de archivos, aunque esto podría arriesgar los sistemas de archivos que están bastante dañados. Debido a que el sistema de archivos ext2 es tan común, existe otro nombre para el comando fsck.ext2, el e2fsck. Los comandos fsck -t ext2, fsck.ext2 y e2fsck también son sinónimos. Uso de fsck Por lo general, el comando fsck se llama con el nombre de la partición para comprobar como su único argumento. Si el comando fsck encuentra un problema que puede corregir sin arriesgar el perder datos entonces implementará el arreglo. Si existe la posibilidad de perder datos, el comando fsck hará una pausa y preguntará si se puede implementar la corrección. Para los administradores que no tienen un conocimiento detallado del diseño interno del sistema de archivos ext2, no hay otra salida que decir "si". De hecho, el comando fsck se invoca a menudo con la opción -y, la cual de hecho dice "no pregunte, hágalo". El directorio /lost+found El comando fsck suele encontrar datos dañados que reconoce como un archivo, pero que no han asociado un nombre o directorio, (recuerde que, por lo general, el nombre del archivo se almacena en un dentry, no en el inodo.) Cada vez que se crea un sistema de archivos ext2, se crea un directorio llamado lost+found en su directorio raíz. Este directorio existe para solicitar los archivos perdidos descubiertos por fsck. El comando fsck creará un nombre para el archivo y lo ubicará en este directorio. Uso automático de fsck en el arranque Por defecto, la mayoría de los sistemas Linux (y Unix) aplican el comando fsck a todos los sistemas de archivo en el arranque. Si un sistema de archivos no se desmonta correctamente, se realiza un fsck a profundidad. Para sistemas de archivos ext2, se examina todo el sistema de archivos. Para los sistemas de archivos de registro de diario ext3 (y otro), sólo se examina el registro de diario de las transacciones pendientes, lo cual hace que la revisión sea más rápida. Incluso se sugiere para los sistema de archivos de registro de diario una revisión a profundidad ocasional de todo el sistema de archivos. El comando tune2fs El comando tune2fs se utiliza para afinar los parámetros del sistema de archivos para un sistema de archivos ext2 o ext3 ya existente, el cual se especifique como su único argumento. Antes que un sistema de archivos se pueda operar con tune2fs, debe ser desmontado. El siguiente cuadro lista algunos de los parámetros que el comando tune2fs puede modificar. Table 1. Opciones para el comando tune2fs Opción Efecto -c n Establece el conteo máximo de montaje para n. Después de que el sistema de archivos se haya montado n veces, se presenta una revisión fsck obligatoria del sistema de archivos. -j Agrega un registro de diario de un sistema de archivos ext3. -L nombre Establece el nombre del volumen para nombre. Esta opción es idéntica en función al comando e2label. -m n Establece el porcentaje de bloques reservados para n. El conteo de montaje ext2 La mayoría de estas opciones se refieren a las características del sistema de archivos ext2. La excepción es la opción -c y el concepto de un conteo máximo de montaje. El sistema de archivos ext2 mantiene un conteo de montaje, incrementado cada vez que se monta el sistema de archivos y un parámetro de conteo de montaje máximo. Si un montaje excede el conteo de montaje máximo, se aplica un fsck obligatorio y el conteo de montaje se restablece a 0. Conversión de sistemas de archivo ext2 a ext3 Como lo implica la opción -j mencionada anteriormente, la conversión de un sistema de archivos ext2 a ext3 es trivial. Ejecute tune2fs -j en éste. Luego, especifique el tipo de sistema de archivos como ext3 en el montaje (o en el archivo /etc/fstab). La única dificultad se presenta si ésta es la primera vez que un sistema de archivos ext3 se ha utilizado en el sistema. En ese caso, el disco RAM inicial del sistema (initrd) necesita reconstruirse para contener el módulo de kernel ext3.o. Aunque este tema que es bastante complicado se tratará en el siguiente cuaderno, por ahora, observe la siguiente línea de comandos ejecutada como root. el encanto apropiado para reconstruir un disco RAM inicial. [root@station root]# mkinitrd /boot/initrd-$(uname -r).img $(uname -r) De nuevo, este comando sólo se necesita si el sistema aún no contiene un sistema de archivos ext3. Como el sistema de archivos ext3 es el predeterminado, es raro el caso. Montaje de sistemas de archivos ext3 como ext2 No hay necesidad de "convertir" un sistema de archivos ext3 a ext2. En su lugar. solo monte el sistema de archivos, especificando el tipo de sistema de archivos como ext2. El registro de diario será ignorado. Repaso: Agregar un disco nuevo Para hacer uso de un nuevo disco agregado a un sistema existente, se requieren los siguientes pasos. Estos pasos sirven de revisión de muchos de los temas tratados en este cuaderno, puestos en contexto. 1. Conexión física: Conectar físicamente el disco a la máquina. Al reiniciar, se debe identificar el nuevo disco en el flujo de mensajes del kernel que se ven en la consola en el arranque o en una sesión iniciada en el archivo /var/log/dmesg. Si no hay evidencia del nuevo dispositivo, hay un problema de conectividad física o del BIOS que se debe abordar antes de continuar. 2. Particiones: El disco se subdivide en múltiples particiones con el comando fdisk. Como estamos pensando en un dispositivo recién conectado, el sistema probablemente no tendrá que reiniciarse, como sería el caso de volver a crear particiones en un dispositivo que ya está en uso. 3. Formateado: Las particiones que van a ser utilizadas como sistemas de archivos se deben inicializar con la variante apropiada del comando mkfs, como por ejemplo, mkfs.ext3. Asímismo, cualquier partición que se vaya a utilizar como espacio swap se debe inicializar con el comando mkswap. 4. Montaje: Los sistemas de archivos se deben montar en un punto de montaje antes de que puedan ser utilizados. El uso del comando mkdir para crear el punto de montaje suele pasarse por alto. De modo análogo, cualquier partición swap se debe activar con el comando swapon. 5. Actualización/etc/fstab: Si se tiene que montar el sistema de archivos (o activar el área de intercambio) automáticamente en el arranque, se deben agregar las líneas apropiadas al archivo /etc/fstab. Linux Filesystem Management Ejemplos Conversión de un sistema de archivos ext2 a ext3 Después de unas semanas de utilizar su nuevo disco y de esperar que el sistema de archivos ext2 se repare, prince decide que en realidad ha debido hacer un sistema de archivos ext3 para comenzar. Ahora decide convertirlo. Primero, desmonta el sistema de archivos. [root@station root]# umount /picts Luego, opera en el sistema de archivos ext2 con el comando tune2fs, mediante la opción -j para especificar que se debe agregar un registro de diario. Debido a que su memoria es difusa, primero confirma si tiene la partición correcta examinando su etiqueta. [root@station root]# e2label /dev/hda6 pics [root@station root]# tune2fs -j /dev/hda6 tune2fs 1.32 (09-Nov-2002) Creating journal inode: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Al terminar la conversión, trata de realizar el montaje manualmente como un sistema de archivos ext3. [root@station root]# mount -t ext3 -L pics /picts [root@station root]# mount ... /dev/hda7 on /dosd type vfat (rw) /dev/hda8 on /ogg type ext3 (rw) /dev/hda6 on /picts type ext3 (rw) Como parece que funcionó sin ningún problema actualiza su archivo /etc/fstab. LABEL=pics /picts ext3 defaults 1 2 Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Utilizar comandos de mantenimiento del sistema de archivos para modificar sistemas de archivos existentes. Tiempo estimado: 20 minutos. Specification Este ejercicio continuará usando el sistema de archivos creados y montados en los ejercicios anteriores. Asegúrese que el archivo ~/lab3.1/disk aún exista y que aún haga referencia al dispositivo correcto. La última partición del dispositivo debe tener un sistema de archivos ext2 propiamente formateado. 1. Utilice los comandos apropiados para convertir su sistema de archivos ext2 a un sistema de archivos ext3. No cree un sistema de archivos nuevo. Toda información en el sistema de archivos se debe preservar. 2. Cambie la etiqueta del sistema de archivos a lab3.6. 3. Actualice su archivo /etc/fstab, para que se utilice la etiqueta apropiada y se monte el sistema de archivos como un sistema de archivos ext3. 4. Desmonte la partición antes de calificar su ejercicio. Resultados A title Question 1 1. La última partición del dispositivo especificado debe ser un sistema de archivos ext3 con una etiqueta de lab3.6 y sin bloques reservados para root. El contenido del sistema de archivos se debe preservar en el proceso. 2. Un archivo /etc/fstab correctamente configurado, actualizado para referirse a la nueva etiqueta y al sistema de archivos ext3. grade Linux Filesystem Management Discusión Introducción a SELinux ("Linux Seguro") Como una característica de Red Hat Enterprise Linux 4, se ha introducido un nuevo enfoque para la seguridad de Linux (y Unix): SELinux. El resultado de un esfuerzo de desarrollo de la Agencia de Seguridad Nacional de los Estados Unidos (NSA) destinado a proteger infraestructura de sistemas. SELinux, permite a los administradores definir las políticas de seguridad personalizadas, aplicadas por el Kernel de Linux cuando realiza sus operaciones normales. Con SELinux, los procesos se pueden emitir a un dominio determinado de SELinux y a cada recurso del sistema (por ejemplo, archivos, sockets de red, llamadas del sistema, etc) se le puede asignar un contexto determinado de SELinux. Una política SELinux cargada en el kernel (normalmente como parte del proceso de arranque del sistema), define qué dominios de proceso pueden tener acceso a qué contextos de recursos. El diseño de cualquier mecanismo de seguridad debe ser lo suficientemente flexible para ser útil, pero a su vez, sencillo para que un administrador pueda con confianza implementar la política. Tan sencillo como el modelo estándar de Linux de propiedades y permisos de archivos. Probablemente el origen más común de problemas administrativos, se debe a que el archivo estaba demasiado expuesto o porque no lo estaba lo suficientemente expuesto. SELinux está entre el lado flexible y el lado complejo del espectro simple-flexible. Como administrador, usted nunca necesitará escribir o modificar su propia directiva de SELinux. En cambio, en Red Hat Enterprise Linux 4, sus decisiones relacionadas con SELinux se deben limitar a lo siguiente: 1. ¿Deseo habilitar SELinux? 2. Si lo habilito, ¿deseo que SELinux esté en estado permisivo o en estadoimpositivo? 3. ¿Qué contexto de SELinux quiero asignar a un archivo particular? La política SELinux de destino Como se mencionó anteriormente, el diseño de una política de SELinux correcta es una tarea compleja. En principio, una de varias políticas se podrían escoger en el arranque del sistema. En la práctica, Red Hat Enterprise Linux 4 sólo se distribuye con una única politica SELinux, llamada la politica de destino. La politica de destino sólo afecta a la pequeña selección de aplicaciones de red más utilizadas listadas a continuación. dhcpd httpd mysqld named nscd ntpd portmap postgres snmpd squid syslogd A menos que esté administrando archivos utilizados por una de estas aplicaciones, la política de destino de SELinux no debe impedir usos interactivos de la estación de trabajo de Red Hat Enterprise Linux. Debido a que de esta lista solo nos interesa syslogd para este curso, el manejo de SELinux no es nuestro tema central. Sin embargo, cualquier administrador de un sistema de Red Hat Enterprise Linux 4 debe estar por lo menos enterado de los temas tratados en esta lección. Habilitar SELinux: /etc/sysconfig/selinux, setenforce y getenforce Tras el arranque, una máquina de Red Hat Enterprise Linux 4 entra en uno de los tres estados de SELinux. impositivo: Cualquier acción que infrinja la política de SELinux está prohibida y se registra como un mensaje del kernel. permisivo: Cualquier acción que infrinja la directiva de SELinux genera una advertencia (en forma de un mensaje del kernel), pero se le permite continuar. inhabilitado. El estado predeterminado se especifica como parte del proceso de instalación y se registra en el archivo /etc/sysconfig/selinux. El estado predeterminado de SELinux se puede cambiar editando este archivo o con el comando setenforce. El archivo de configuración /etc/sysconfig/selinux Este archivo sencillo de configuración se utiliza tras el arranque para determinar el estado y la directiva de SELinux. [student@station ~]$ cat /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=permissive # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted El estado predeterminado de SELinux se puede establecer con SELINUX. Los cambios se aplican en el siguiente arranque. La política se puede elegir con SELINUXTYPE. Como lo mencionamos, la única directiva relevante para Red Hat Enterprise Linux 4 es la política de destino. Los comandos setenforce y getenforce Asumiendo que SELinux no está inhabilitado, el estado SELinux también se puede cambiar de inmediato de enforcing a permissive con el comando setenforce. El comando espera un único argumento ya sea 0 ó 1, correspondientes a los estados permisivos e impositivos, respectivamente. El siguiente comando cambia SELinux al estado permisivo. [root@station ~]# setenforce 0 [root@station ~]# getenforce Permissive El siguiente comando cambia SELinux al estado impositivo. [root@station ~]# setenforce 1 [root@station ~]# getenforce Enforcing Observe que getenforce apenas muestra el estado actual. El comando setenforce surte efecto inmediatamente, pero no cambia el estado predeterminado si se reinicia la máquina. Estos comandos suelen ser útiles en la depuración de problemas de configuración SELinux. Ver contenido de SELinux: ps -Z y ls -Z Como lo hemos mencionado, cada proceso pertenece a un dominio de SELinux y cada archivo se puede asignar a un contexto SELinux. Los dominios y contextos pertinentes se pueden ver con la (nueva) opción -Z con los comandos convencionales ls y ps. El siguiente comando se puede utilizar para ver el dominio de SELinux de todos los procesos en ejecución. [student@station ~]$ ps ax -Z LABEL user_u:system_r:unconfined_t user_u:system_r:unconfined_t user_u:system_r:unconfined_t user_u:system_r:unconfined_t ... user_u:system_r:syslogd_t user_u:system_r:unconfined_t user_u:system_r:portmap_t root:system_r:httpd_t root:system_r:httpd_t ... user_u:system_r:unconfined_t user_u:system_r:unconfined_t user_u:system_r:unconfined_t user_u:system_r:unconfined_t user_u:system_r:unconfined_t PID 1 2 3 4 TTY ? ? ? ? STAT S SN S< S< TIME 0:00 0:00 0:00 0:00 COMMAND init [5] [ksoftirqd/0] [events/0] [khelper] 2251 2255 2277 3955 3956 ? ? ? ? ? Ss Ss Ss Ss S 0:00 0:00 0:00 0:00 0:00 syslogd -m 0 klogd -x portmap /usr/sbin/httpd /usr/sbin/httpd 2973 2994 2995 2996 3135 pts/1 pts/2 pts/3 pts/4 pts/5 Ss Ss+ Ss+ Ss+ R+ 0:00 0:00 0:00 0:00 0:00 bash bash bash bash ps ax -Z Observe que a excepción de los demonios de servicio de red mencionados anteriormente, el tipo de dominio es unconfined_t, lo que implica que el proceso no está limitado por ningún contexto de SELinux. En particular, las shells interactivas del usuario y los procesos iniciados por shells interactivas de usuario (con las excepciones anteriormente mencionadas) no se efectuan por la directiva de SELinux. El contexto de archivos en SELinux se puede ver al agregar -Z al comando ls. A continuación, la opción -a sólo se necesita porque el directorio de inicio creado recientemente no ha recogido aún los archivos "no ocultos". [student@station ~]$ drwxr-xr-x student drwxr-xr-x root -rw------- student -rw-r--r-- student -rw-r--r-- student -rw-r--r-- student drwx------ student drwx------ student drwx------ student drwx------ student -rw-r--r-- student drwxrwxr-x student -rw-r--r-- student ls -a -Z student root student student student student student student student student student student student root:object_r:file_t user_u:object_r:file_t root:object_r:file_t root:object_r:file_t root:object_r:file_t user_u:object_r:file_t user_u:object_r:file_t user_u:object_r:file_t user_u:object_r:file_t root:object_r:file_t user_u:object_r:file_t root:object_r:file_t . .. .bash_history .bash_logout .bash_profile .bashrc .gconf .gconfd .gnome2 .gnome2_private .gtkrc .mozilla .zshrc Observe que todos estos archivos tienen el tipo genérico file_t. Algunos fueron creados por el usuario, por ejemplo <username>estudiante</username>, cuando el estudiante encendió el navegador Firefox, otros se crearon automáticamente al agregar la cuenta (antes de que el estudiante hubiera ingresado). Las porciones del contexto de SELinux root y user_u denotan si el archivo fue creado por el usuario o por root. La exploración del sistema de archivos con el comando ls -Z generará una gran cantidad de tipos de SELinux asociados con varios archivos, (los directorios /etc y /var son en particular interesantes). Observe que conocer el dominio de SELinux de un proceso no es suficiente. También necesitará conocer la política actual que la rige. Infortunadamente, con el conjunto existente de herramientas de SELinux, examinar la directiva actual no es fácil, y por lo general, los efectos de la directiva de SELinux sólo se descubren, cuando alguien trata de infringirla. Monitorizar las infracciones de SELinux: /var/log/messages Cada vez que se presente una infracción de SELinux, se produce un mensaje del kernel detallando el problema. Por defecto, estos mensajes se registran en el archivo /var/log/messages. Si algo sale mal en la configuración o manejo de uno de los servicios de red anteriormente citados, es sensato revisar el archivo /var/log/messages por si hay infracciones de SELinux. Puede encontrar ejemplos de mensajes del kernel sobre infracciones de SELinux en el siguiente extracto de un archivo /var/log/messages. Jul 2 01:02:30 station4 kernel: audit(1122958950.735:0): avc: denied { read } for pid=15842 exe=/usr/bin/ssh name=mounts dev=proc ino=1038221328 scontext=ro ot:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass= file Jul 2 01:02:30 station4 kernel: audit(1122958950.808:0): avc: denied { getatt r } for pid=15842 exe=/usr/bin/ssh path=/etc/krb5.conf dev=hda3 ino=609458 scon text=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:krb5_conf_t tcl ass=file La expresión en paréntesis especifica que la acción ocasionó la infracción. En este caso (getattr), un proceso estaba buscando los atributos de una archivo, como por ejemplo, el propietario del archivo y los permisos. Los dos valores a continuación (pid=15842 y exe=/usr/bin/ssh) identifican el proceso que produjo la infracción. Los tres valores a continuación (path=/etc/krb5.conf, dev=hda3 y ino=609458) identifican el archivo al que se ha tenido acceso, donde dev se refiere a la partición que contiene el archivo y ino es el número de inodo del archivo dentro del sistema de archivos. Los dos valores siguientes identifican los contextos SELinux del proceso y el archivo de destino. Al examinar el mensaje de registro, se puede deducir que los procesos en el dominio root:system_r:httpd_sys_script_t no tienen permiso para examinar los metadatos de archivos en el contexto system_u:object_r:krb5_conf_t. Cambio del contexto de SELinux de un archivo: chcon Si la política de SELinux de destino está ocasionando el problema, el administrador tiene por lo general dos opciones: 1. Inhabilitar SELinux. 2. Cambiar el contexto SELinux del archivo que está ocasionando la infracción. Ya hemos explicado cómo inhabilitar SELinux (recuerde el comando setenforce y el archivo de configuración /etc/sysconfig/selinux). Al igual que un propietario de archivo, grupo o modo (permisos) se cambian con chown, chgrp y chmod(respectivamente), un contexto de seguridad SELinux de archivo se cambia con chcon. Table 1. Opciones para el comando chcon Opción Efecto -R, --recursive cambia archivos y directorios de modo recursivo --reference=FILE Utiliza el contexto de seguridad del FILE para definir el contexto resultante. -u, --user=USER; -r, -role=ROLE; -t, --type=TYPE establece los componentes USER, ROLE o TYPE del contexto de seguridad del archivo respectivamente Normalmente, un administrador desea que un archivo problemático se realice en el contexto de un archivo "bien conocido". Por ejemplo, el comando /etc/named.conf haría heredar el contexto de seguridad SELinux de /etc/named.conf.rpmorig. [root@station ~]# chcon --reference=/etc/named.conf.orig /etc/named.conf Linux Filesystem Management Ejemplos Cambio del contexto SELinux de un archivo El usuario <username>prince</username> desea publicar archivos que documenten sus visitas a través del servidor de la red colocándolas en el directorio raíz del documento del servidor, /var/www/html. Inicia sus dos archivos que ha creado en su directorio de inicio elvis_in_austin.html y elvis_in_pheonix.html. El primero, lo copia al documento raíz. El segundo, lo pasa allá. Luego revisa que los archivos puedan ser leídos por el usuario del sistema <username>apache</username>. [prince@station ~]$ su Password: [root@station prince]# cp elvis_in_austin.html /var/www/html/ [root@station prince]# mv elvis_in_pheonix.html /var/www/html/ [root@station prince]# ls -l /var/www/html/ total 56 -rw-r--r-- 1 root root 219 Jul 31 19:38 elvis_in_austin.html -rw-rw-r-- 1 prince prince 228 Jul 31 19:37 elvis_in_pheonix.html Después de observar que cada uno de los archivos es legible por todos y contento porque el servidor de red podrá leer el archivo (el cual se ejecuta como usuario <username>apache</username>), abre un navegador y hace referencia a los archivos. [prince@localhost ~]$ elinks -dump http://localhost/elvis_in_austin.html Elvis seen watching bats in Austin Austin native Fred Anderson claims to have seen Elvis watching the bats fly from a underneath the Congress St. bridge in Austin TX. When ... [prince@localhost ~]$ elinks -dump http://localhost/elvis_in_pheonix.html Forbidden You don't have permission to access /elvis_in_pheonix.html on this server. ... Sorprendido porque se le prohibió el acceso a elvis_in_pheonix.html, prince sospecha que fue SELinux. Para confirmar, prince se convierte en root y temporalmente cambia el estado de SELinux de impositivo a permisivo y trata de nuevo. [prince@localhost Password: [root@station ~]# Enforcing [root@station ~]# [root@station ~]# Permissive ~]$ su getenforce setenforce 0 getenforce [prince@localhost ~]$ elinks -dump http://localhost/elvis_in_pheonix.html Elvis seen Jousting Cactus outside of Pheonix Pheonix native John Doe claims to have seen Elvis riding a llama, jousting a cactus with a fishing pole. When approached, however, Elvis and the ... Convencido que la directiva de SELinux estaba causando el problema, busca un mensaje de registro en /var/log/messages. [root@station8 prince]# tail /var/log/messages ... Jul 2 02:16:56 station8 kernel: audit(1122963416.875:0): avc: denied { getatt r } for pid=15520 exe=/usr/sbin/httpd path=/var/www/html/elvis_in_pheonix.html dev=hda2 ino=327853 scontext=root:system_r:httpd_t tcontext=user_u:object_r:user _home_t tclass=file ... Al examinar los tipos de SELinux de los dos archivos, comienza a entender el problema. [root@station ~]# ls -Z /var/www/html/ -rw-r--r-- root root root:object_r:httpd_sys_content_t elvis_in_austin.html -rw-rw-r-- prince prince user_u:object_r:file_t elvis_in_pheonix.html Debido a que elvis_in_austin.html es copiado en /var/www/html con cp, el archivo resultante es un archivo recién creado, el cual hereda el usuario que lo creó (<username>root</username>) y el contexto de SELinux del directorio en que se creó (httpd_sys_content_t). En contraste, el archivo elvis_in_pheonix.html setraslada a su nuevo destino con el comando mv. El traslado de un archivo no crea uno nuevo, sino que lo reubica en un archivo ya existente. Como resultado, el usuario que lo creó (<username>prince</username>) y más pertinente aún el contexto de SELinux (file_t) se retiene. Cuando el proceso del servidor de red trata de leer un archivo de tipo file_t, se produce una infracción a la directiva de SELinux. Para arreglar la situación, prince (como root) utiliza el comando chcon para pasar el contexto de SELinux desde el archivo "bueno" al archivo "malo" y setenforce para restaurar SELinux al estado impositivo. [root@station ~]# cd [root@station html]# [root@station html]# -rw-r--r-- root -rw-rw-r-- prince [root@station html]# /var/www/html/ chcon --reference elvis_in_austin.html elvis_in_pheonix.html ls -Z root root:object_r:httpd_sys_content_t elvis_in_austin.html prince root:object_r:httpd_sys_content_t elvis_in_pheonix.html setenforce 1 Ahora, el servidor de red puede ver el archivo con tranquilidad. [prince@localhost ~]$ elinks -dump http://localhost/elvis_in_pheonix.html Elvis seen Jousting Cactus outside of Pheonix Pheonix native John Doe claims to have seen Elvis riding a llama, jousting a cactus with a fishing pole. When approached, however, Elvis and the ... [Note] Note Si usted se confunde con el uso del servidor de red anterior o la referencia al término "document root", no se preocupe demasiado y anímese porque necesitamos tratar de encontrar un ejemplo de un problema ocasionado por SELinux para este curso. Linux Filesystem Management Ejercicios en línea [Warning] Lab Exercise Objetivo: Establecer los contextos apropiados de SELinux para archivos Tiempo estimado: 20 minutos. Specification 1. Su sistema debe estar en el estado impositivo de SELinux. Si no lo está, edite el archivo /etc/sysconfig/selinux de modo apropiado y reinicie su máquina. Debe poder reproducir el siguiente comando. [root@station4 html]# getenforce Enforcing 2. En este laboratorio, usted publicará archivos con su servidor de red. Si aún no ha iniciado su servidor de red (y probablemente no lo ha hecho), inicie con el comando service. [root@station8 ~]# service httpd start Starting httpd: [ OK ] [root@station8 ~]# service httpd status httpd (pid 15611 15610 15609 15608 15607 15606 15605 15604 15601) is running... 3. Desea publicar una copia de su archivo /var/log/dmesg, (no se preocupe si aún no sabe de qué se trata). Copie el archivo al directorio /var/www/html y observe las propiedades y permisos. Podrá ver el contenido señalando cualquier navegador a http://localhost/dmesg. 4. Debe también poder publicar una copia del archivo /var/log/rpmpkgs, pero se da cuenta que este archivo se actualiza por la noche. Para publicar automáticamente las actualizaciones también, utiliza un enlace duro al archivo en el directorio /var/www/html. [root@station4 html]# ln /var/log/rpmpkgs /var/www/html/ [root@station4 html]# ls -i /var/log/rpmpkgs /var/www/html/rpmpkgs 180333 /var/log/rpmpkgs 180333 /var/www/html/rpmpkgs [root@station8 html]# ll /var/www/html/rpmpkgs -rw-r--r-- 2 root root 23076 Jul 2 04:04 /var/www/html/rpmpkgs Aunque el archivo /var/www/html/rpmpkgs es legible por todos, usted aún no tendra acceso a http://localhost/rpmpkgs desde un navegador de red. ¿Por qué? 5. Utilice el comando chcon, haciendo referencia al archivo de "trabajo" /var/www/html/dmesg, para asignar a /var/log/html/rpmpkgs el contexto de seguridad SELinux apropiado. Si completó bien el ejercicio podrá acceder a http://localhost/rpmpkgs desde su navegador de red. Utilice ls -Z para observar el contexto SELinux de /var/log/rpmpkgs. ¿Por qué cambió también? Resultados A title Question 1 1. El sistema está en el estado impositivode SELinux. 2. Un navegador de red puede tener acceso a http://localhost/dmesg. 3. Un navegador de red puede tener acceso a http://localhost/rpmpkgs. 4. Los archivos /var/log/rpmpkgs y /var/www/html/rpmpkgs tienen el mismo número de inodo (i.e., son enlaces duros del mismo archivo). grade Limpieza Después de haber completado el ejercicio, restaure su sistema al estado que desee de SELinux, borre /var/www/html/rpmpkgs y restaure el contexto apropiado en /var/log/rpmpkgs con el siguiente comando. [root@station8 ~]# chcon --reference /var/log /var/log/rpmpkgs