DPD Dispositivos sistema herencia

De Gleducar, http://www.gleducar.org.ar

Tabla de contenidos

Particiones y sistemas de archivos

Veremos como crear y formatear particiones con las herramientas que ofrece GNU/Linux.

Los comandos que se verán en este tema son:

fdisk
mkfs

Hay muchas herramientas para crear particiones y sistemas de archivos en sistemas Linux. La utilidad fdisk se usa para trabajar con particiones en discos duros. La utilidad fips se utiliza para redimensionar particiones, y los sistemas de archivos se crean utilizando la utilidad mkfs. Se pueden utilizar estas herramientas conjuntamente para preparar un disco duro para usar sistema Linux.

En el mundo real
muchas distribuciones Linux incluyen herramientas que crean automáticamente las particiones y el sistema de archivos Linux durante la instalación. Mucha gente no necesitará nunca usar utilidades como fdisk o mkfs. Sin embargo, los usuarios avanzados y los administradores de sistemas deben estar familiarizados con el uso de estas herramientas.

fdisk

La herramienta principal usada para crear particiones de disco es fdisk. Este comando divide el disco en particiones y escribe la tabla de particiones en el sector 0 (conocido como superblock). Cuando se utiliza sin parámetros, fdisk presenta un menú de opciones con las que se puede interactuar. Se puede evitar el menú y ejecutar fdisk con las siguientes opciones:

-l
lista las tablas de particiones.
-v
Nos da únicamente la versión de fdisk.

Si no se utiliza ninguna de esas opciones, fdisk comprueba si el número de cilindros del dispositivo por defecto (hda1) es mayor de 1024 y avisa de ello si es así. Entonces espera una instrucción. Se puede iniciar fdisk con un dispositivo distinto al hda1 especificándolo en la línea de comandos. Por ejemplo, para arrancar fdisk con el tercer driver IDE, se debe poner:

$ fdisk /dev/hdc

Una vez la utilidad está iniciada, entrando m se presenta una ayuda en forma de menú, algunas de las cuales se listan en la siguiente tabla:

Opción Función
p Muestra información sobre la partición.
d Borra una partición.
n Crea una partición.
q Sale de la aplicación sin guardar los cambios.
w Guarda los cambios y sale de la aplicación.
m Muestra los comandos disponibles.
v Verifica la tabla de particiones.
a Cambia el indicador de estado de arranque de la partición.

Los siguientes ejemplos ilustran que se puede hacer con esta utilidad, empezando por acciones simples y acabando con algunas más complicadas.

En primer lugar, para ver la tabla de particiones, se debe introducir la opción p. El resultado se debe parecer a:

Disk /dev/hda:	16 head, 63 sectors, 16383 cylinders
Units = cylinders of 1008 + 512 bytes

Device		Boot	Start	End	Blocks	Id	System
/dev/hda1	+	1	4063	2047720+	83	Linux
/dev/hda2		4064	4316	127512	82	Linux swap
/dev/hda3		4317	16383	6081768	83	Linux

Se muestra tres particiones (de 1 a 3) en un único disco IDE (hda). La primera partición es de arranque (marcada en la columna boot) , la segunda de swap, y la tercera es el resto del disco.

Para modificar el sistema de archivos, vamos a cambiar la tercera partición en dos de menor tamaño. Primero entramos la opción d para borrar la partición. El prompt preguntará que partición (1 a 4). Se entra 3, y ya está.

Para crear una nueva partición, se entrará la opción n. El prompt que muestra será:

e-	extendida
p-	partición primaria (1-4)

Si ya se han creado algunas particiones, el prompt puede no aparecerá. Por ejemplo, si ya se tiene una partición extendida, no se puede crear otra ya que ésta ya existe. Si se entra p para una primaria, seguidamente se pedirá el número (1-4) para crearla; si se da un número ya usado, el comando falla ya que primero se debería haber borrado la partición antes de volverla a añadir.

En este caso, suponiendo que se quiere crear dos particiones iguales en el espacio que antes ocupaba la tercera partición, por lo tanto después de entrar p la secuencia será la siguiente (valores entrados en cursiva)

Número de particion (1-4): 3
Primer cilindro (4317-16383, defecto 4317): (aceptar)
Usando el valor de defecto 4317
Último cilindro o +size o +sizeM o +sizeK _
(4317-16383, defecto 16383): 10350

Command (m para ayuda): p

Disco /dev/had: 16 head, 63 sectors, 16383 cylinders
Units = cylinders of 1008 + 512 bytes

Device		Boot	Start	End	Blocks	Id	System
/dev/hda1	+	1	4063	2047720+	83	Linux
/dev/hda2		 4064	4316	127512	82	Linux swap
/dev/hda3		4317	10350	3041136	83	Linux

Command (m para ayuda): n

Command        action
   e         extended
   p         primary partition (1-4)

p

Número de partición (1-4): 4

Primer cilindro (10531-16383, default 10351): (aceptar)
Usando el valor de defecto 10351
Último cilindro o +size o +sizeM o +sizeK _
(10351-16383, defecto 16383): (aceptar)
Usando el valor de defecto 16383

Command (m para ayuda): p

Disco /dev/had: 16 head, 63 sectors, 16383 cylinders
Units = cylinders of 1008 + 512 bytes

Device		Boot	Start	End	Blocks	Id	System
/dev/hda1	+	1	4063	2047720+	83	Linux
/dev/hda2		 4064	4316	127512	82	Linux swap
/dev/hda3		4317	10350	3041136	83	Linux
/dev/hda4		10351	16383	3040632	83	Linux

Para cambiar la tercera partición a sistema de archivos swap (partición de swap) la secuencia es:

Command (m para ayuda): t

Número de partición (1-4): 3

Hex code ( L para la lista de códigos): 82

Cambiado tipo de sistema de la partición 3 a 82 (Linux swap)


Entonces, para cambiar la partición existente de swap (la 2) a una partición Linux, se debe hacer lo mismo que se ha hecho, pero como código hex el 83. Poniendo L cuando se pida el hex code se mostrarán todos los sistemas de archivos posibles (igual que poniendo I en el menú principal de fdisk).

Después de efectuar todos los cambios, se puede salir de fdisk y formatear las particiones que lo necesiten. Si se guardan los cambios, aparecerá una alerta indicando que la tabla de particiones ha sido alterada y el disco será sincronizado. Se deberá reiniciar el sistema para asegurarse de que la tabla está actualizada adecuadamente.

Se pueden hacer muchos cambios con fdisk y deshecharlos si se usa la opción q. Si se desea grabar los cambios realizados, se deben salvar con w.

mkfs

Una vez se ha creado la partición, el sistema de archivos debe ser añadido para que Linux pueda hacer uso de este espacio. La utilidad mkfs se usa para crear sistemas de archivos en particiones vacías. Esta utilidad se utiliza con muchas opciones distintas, las cuales se pueden ver en la siguiente tabla.

Opción Uso
-t fstype Especifica el tipo de sistema de archivos a crear. Por defecto se usa ext2.
fs -options Opciones específicas de sistema de archivos para ser pasados al sistema real de archivos que vamos a crear.
-c Comprueba el dispositivo en busca de bloques defectuosos antes de crear el sistema de archivos.
-l archivo Lee los bloques defectuosos del archivo.
-v Produce una salida con más información (modo verboso), incluyendo todas las órdenes específicas del sistema de archivos concreto que se ejecutan. Ésto es realmente sólo útil para comprobaciones.

Las opciones usadas por mkfs están seguidas por un argumento especificando la partición que debe ser formateada. Después de la ejecución del comando, el código de salida 0 (cero) indicará que se ha llevado a cabo con éxito mientras que el código de salida 1 (uno) indicará una falla.

Ejemplo de la sintaxis usada:

mkfs -opciones argumentos

Cuando se crea un sistema de archivos con mkfs, se pueden utilizar muchos comandos para especificar el tipo de sistema de archivos. Estos comandos son accesibles sólo para el usuario root.

Utilidades para la creación de Sistemas de archivos
Comando Uso
mkfs.ext2 o mke2fs Crea un sistema de archivos ext2
mkfs.msdos o mkdosfs Crea un sistema de archivos MS-DOS
mkswap Crea un sistema de archivos de Linux swap
mkraid Inicializa y actualiza cadenas de dispositivos RAID
mkfs.minix Crea un sistema de archivos Minix
mkfs.bfs Crea un sistema de archivos SCO BFS

Por ejemplo, un uso apropiado de estas utilidades es crear un partición ext2 usando mkfs.ext2:

# mke2fs /dev/hda3

fips

La utilidad fips es útil conocerla cuando queremos añadir Linux a un sistema ya existente. Se trata de una utilidad MS-DOS proporcionada con Red-Hat para redimensionar particiones en un disco duro. La utilidad produce dos particiones, la partición original redimensionada y una nueva partición creada a partir del espacio libre, también creado en esta acción.

Antes de utilizar la utilidad fips es importante hacer copia de seguridad de los datos almacenados en la partición sobre la que se trabajará.

La utilidad se ejecuta desde la línea de comandos de MS-DOS, y los cursores se utilizan para redimensionar las particiones. Se debe tener extremo cuidado usando esta utilidad.

En el mundo real
La utilidad fips es similar al PartitionMagic y otros programas comerciales que se utilizan para crear y redimensionar particiones.


Integridad del sistema de archivos

Con el trascurso del tiempo los filesystems activos pueden terminar presentando problemas como los siguientes:

Un filesystem se llena hasta el límite de su capacidad, causando que los programas o, quizás, el sistema entero dejen de funcionar.
Un filesystem se corrompe, seguramente por un corte de alimentación o por una caída inesperada del sistema.
Un filesystem se queda sin inodos libres de tal forma que no se pueden crear nuevos objetos en el mismo.

Monitorizar y comprobar cuidadosa y regularmente los filesystems de Linux nos ayudará a prevenir o corregir estos problemas.

Espacio e inodos libres del disco

Un sistema de lectura/escritura no sirve de mucho si crece hasta el punto en que no pueda admitir nuevos archivos. Esto podría ocurrir si el filesystem se llena o si se queda sin inodos libres.

Los inodos son las estructuras de datos dentro del filesystem que describen los archivos en el disco. Cada filesystem contiene un número finito de inodos que se establece en el momento de creación del mismo. Este número es, a su vez, el máximo número de archivos que un filesystem puede acomodar. Como los filesystems se crean con un número de inodos enorme, probablemente nunca crearás tantos archivos como para agotar este número. No obstante, es posible quedarse sin inodos libres en particiones que contengan muchos archivos pequeños.

Es muy importante prevenir la escasez de inodos libres en las particiones del sistema. El comando df proporciona información necesaria tanto sobre la uso del espacio en disco como de los inodos libres.

Sintaxis:

df [opciones] [directorios]

Descripción:

Muestra información general sobre el uso del disco en los filesystems montados en directorios. Normalmente, en directorios indicamos archivos de dispositivos de particiones como /dev/hda1, pero si indicamos otro tipo de nombre de archivo o directorio obtendremos información sobre la partición donde está ubicado dicho archivo o directorio.

Si omitimos directorios, se mostrará la información relativa a los filesystems montados en los dispositivos incluidos en /etc/fstab.

Opciones frecuentemente utilizadas por df
Opción Uso
-h Muestra los resultados en un formato legible para las personas, incluyendo sufijos como M(megabytes) y G (gigabytes).
-i Muestra información sobre los inodos libres en lugar de la información por defecto sobre el espacio libre en disco.
Ejemplo 1
Revisar el uso del espacio en disco en todos los filesystems:
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             387M   56M  311M  15% /
/dev/sda5             296M  5.2M  276M   2% /boot
/dev/sda9             1.9G  406M  1.4G  22% /home
/dev/sda6              53M   12M   39M  23% /root
/dev/sda10             99M  104k   93M   0% /tmp
/dev/sda8             972M  507M  414M  55% /usr
/dev/sda7             296M  9.3M  272M   3% /var

En este ejemplo se observa que en ninguno de los siete filesystems montados por defecto, el espacio utilizado excede del 55 por ciento de su capacidad.

Ejemplo 2
Revisar el uso de inodos en los mismos filesystems:
# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             102800    7062   95738    7% /
/dev/sda5              78312      29   78283    0% /boot
/dev/sda9             514000     934  513066    0% /home
/dev/sda6              14056     641   13415    5% /root
/dev/sda10             26104      60   26044    0% /tmp
/dev/sda8             257040   36700  220340   14% /usr
/dev/sda7              78312     269   78043    0% /var

Entre estas particiones el mayor consumo de inodos es sólo de un 14 por ciento. Está claro que ninguno de éstos filesystems se está acercando en su consumo al máximo disponible. Observa que la partición /usr (con el 14 por ciento de los inodos utilizados) ha consumido el 55 por ciento del espacio en disco. Con ésta tónica de utilización, lo más probable es que el volumen /usr agote su capacidad en disco antes de agotar los inodos libres.

Ejemplo 3
Determina rápidamente en que partición está situado el directorio de trabajo actual (puede representarse, simplemente, por un punto):
# df .
/dev/sda1             102800    7062   95738    7% /

Cuando un filesystem está próximo a agotar su capacidad podemos, simplemente, eliminar archivos para obtener más espacio libre. Sin embargo en el caso improbable de una escasez de inodos, deberíamos volver a crear el filesystem con un número mayor de inodos a menos que podamos borrar una muy buena cantidad de archivos.

Uso del Espacio en Disco

Te preguntaste alguna vez ¿A dónde va todo el espacio consumido en el disco? En algunos sistemas operativos es bastante complicado obtener la respuesta a esta pregunta con las herramientas nativas. En Linux, el comando du nos puede ayudar, mostrándonos directorio por directorio el uso del espacio en disco, a responder a esta pregunta. El comando du examina los directorios recursivamente y muestra información detallada o resumida sobre el espacio en disco consumido.

Sintaxis

du [opciones] [directorios]

Descripción Muestra información sobre el uso del disco en los directorios. Si se omiten los directorios se buscará en el directorio de trabajo actual.

Opciones frecuentemente utilizadas por du
Opción Uso
-a Muestra todos los archivos, no solo los directorios.
-c Genera un gran total de todos los elementos listados.
-h Muestra los resultados en un formato legible para las personas, incluyendo sufijos como M (megabytes) y G (gigabytes).
-s Visualiza un sumario para cada uno de los directorios especificados, en lugar de los totales encontrados recursivamente en cada subdirectorio.
-S Excluye los subdirectorios de las sumas y los totales, limitándose a totalizar los directorios.
Ejemplo 1
Examinar el uso del disco en /etc/rc.d:
# du /etc/rc.d
882     /etc/rc.d/init.d
1       /etc/rc.d/rc0.d
1       /etc/rc.d/rc1.d
1       /etc/rc.d/rc2.d
1       /etc/rc.d/rc3.d
1       /etc/rc.d/rc4.d
1       /etc/rc.d/rc5.d
1       /etc/rc.d/rc6.d
904     /etc/rc.d
Ejemplo 2
Muestra el espacio en disco utilizado por archivos, incluyendo los subdirectorios interiores, en /etc:
# du -s /etc
13002   /etc
Ejemplo 3
Muestra el espacio en disco utilizado por archivos, excluyendo los subdirectorios interiores, en /etc:
# du -Ss /etc
1732    /etc
Ejemplo 4
Muestra un sumario de todos los subdirectorios bajo /home, con una salida legible por las personas:
# du -csh /home/*
42k     /home/bsmith
1.5M    /home/httpd
9.5M    /home/jdean
42k     /home/jdoe
12k     /home/lost+found
1.0k    /home/samba
11M     total

Este resultado muestra que se han utilizado 11 MB del espacio total del disco.

Ejemplo 5
Muestra el mismo sumario, pero ordenando los resultados de mayor a menor utilización:
# du -cs /home/* | sort -nr
11386   total
9772    jdean
1517    httpd
42      jdoe
42      bsmith
12      lost+found
1       samba

Este resultado muestra que el usuario jdean está consumiendo la mayor cantidad de espacio. Ten en cuenta que el formato legible por las personas no ordenaría de esta forma ya que sort no interpreta dicho formato.

Integridad del Filesystem

Independientemente de lo estables que sean, las computadoras terminan fallando en algún momento, incluso por algo tan simple como un cable de alimentación desconectado por accidente. Desafortunadamente una interrupción de este tipo puede provocar daños en un filesystem. Si se abortase una operación de escritura en disco antes de completarse, los datos implicados se perderían y las partes del disco que se reservaron para ellos quedarían marcadas como en uso. Además, las escrituras en el filesystem no suelen ser directas, sino que suelen pasar previamente por una cache de memoria, un corte de corriente o una caída del sistema impediría al kernel sincronizar ésta cache con el disco. Cualquiera de estos casos provocaría que nos encontrásemos con inconsistencias en el filesystem que deberán ser corregidas para asegurar un funcionamiento fiable del mismo.

Los filesystems se comprueban con fsck. Al igual que mkfs, esta es una utilidad específica al tipo de filesystem instalado – esto incluye fsck.ext2, que es un link al programa e2fsck (mira en las páginas man para más información).

Una parte de la información almacenada en el disco para describir un filesystem es la conocida como superbloque que se encuentra en el bloque 1 de la partición. Si éste área se corrompiese, el filesystem quedaría inaccesible. Debido a la importancia del superbloque, se realizan copias del mismo en intervalos regulares del filesystem, por defecto cada 8192 bloques. La primera copia del superbloque se encuentra en el bloque 8193, la segunda en el bloque 16385, y así sucesivamente. Como verás, fsck puede utilizar la información en las copias del superbloque para restaurar el superbloque principal

Si bien esto es útil en cualquier filesystem, actualmente se están utilizando filesystems con un dispositivo llamando Journaling. Esto permite que ante una catastrofe, los datos que han quedado sin guardarse, puedan recuperarse “automáticamente� sin necesidad de reparación del sistema. Algunos de estos filesystems más conocidos y utilizados son: ext3 y reiserfs.

Sintaxis

fsck [opciones] [-t tipo] [opciones-fs] filesystems

Descripción

Comprueba si los filesystems tienen errores y, opcionalmente, los corrige. Por defecto, fsck asume el tipo de filesystem ext2 y funciona de modo interactivo interrumpiendo la ejecución para pedir permiso antes de aplicar las correcciones.

Durante la comprobación del sistema de fsck se hace lo siguiente:

  1. Comprobar inodos, bloques y tamaños.
  2. Comprobar la estructura de directorios.
  3. Comprobar la conectividad de directorios.
  4. Comprobar las referencias.
  5. Comprobar el total de la información.
Opciones frecuentemente utilizadas por
Opción Uso
-A Ejecuta comprobaciones en todos los filesystems incluidos en /etc/fstab. Esta opción está pensada para utilizarse en tiempo de carga del sistema, antes de montar los filesystems.
-N No se ejecuta, pero muestra lo que debería hacerse.
-t tipo Especifica el tipo de filesystem a comprobar; por defecto se asume ext2. El valor de tipo determina que verificador específico para el filesystem es utilizado.
-b superbloque Utiliza una copia del superbloque alternativa. En el modo interactivo, e2fsck utiliza automáticamente superbloques alternativos. Normalmente, para restaurar un superbloque defectuoso, utilizarás -b 8193 en el modo no interactivo.
-c Comprobar bloques defectuosos.
-f Fuerza una comprobación, incluso si el filesystem parece limpio.
-p Repara automáticamente el filesystem sin hacer preguntas.
-y Responde automáticamente "yes" a todas las preguntas interactivas permitiendo la utilización no interactiva de e2fsck.
Ejemplo 1
Comprueba el filesystem del tipo ext2 en /dev/hda5 que, que en este momento, no está montado:
# fsck /dev/hda5
[/sbin/fsck.ext2 -- ] fsck.ext2 /dev/hda5
Parallelizing fsck version 1.14 (9-Jan-1999)
e2fsck 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
/dev/hda5: clean, 1011/34136 files, 4360/136521 blocks

La partición estaba marcada como limpia, por tanto fsck no llegó a verificarla.

Ejemplo 2
Fuerza una comprobación:
# fsck -f /dev/hda5
Parallelizing fsck version 1.14 (9-Jan-1999)
e2fsck 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/hda5: 1011/34136 files (0.1% non-contiguous), 
   4360/136521 blocks
Ejemplo 3
Fuerza otra comprobación, en este caso con salida de mensajes completa:
# fsck -fv /dev/hda5
Parallelizing fsck version 1.14 (9-Jan-1999)
e2fsck 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
    1011 inodes used (2%)
       1 non-contiguous inodes (0.1%)
         # of inodes with ind/dind/tind blocks: 0/0/0
    4360 blocks used (3%)
       0 bad blocks
    1000 regular files
       2 directorios
       0 character device files   0 block device files
       0 fifos
       0 links
       0 symbolic links (0 fast symbolic links)
       0 sockets
--------
    1002 files
Ejemplo 4
Permite que fsck realice automáticamente todas las reparaciones en un filesystem dañado especificando la opción -y:
[root@smp /mnt]# fsck -y /dev/hda5
Parallelizing fsck version 1.14 (9-Jan-1999)
e2fsck 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Couldn't find ext2 superblock, trying backup blocks...
/dev/hda5 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences:  +1 +2 +3 +4
Fix? yes

Inode bitmap differences:  +1 +2 +3 +4 +5 +6
Fix? yes

/dev/hda5: ***** FILE SYSTEM WAS MODIFIED *****
/dev/hda5: 1011/34136 files (0.1% non-contiguous), 
   4360/136521 blocks

Cuando Linux carga, el kernel realiza una comprobación de todos los filesystems incluidos en /etc/fstab utilizando la opción -A. Se comprobará cualquier filesystem que no hubiese sido desmontado limpiamente (A menos que la entrada en /etc/fstab incluya la opción noauto) Si dicha comprobación encontrase algún error significativo, el sistema se pondría en modo monousuario de tal forma que se pueda ejecutar fsck de forma manual.

Algunos de los errores que pueden causar esto son:

  • Bloques solicitados por múltiples archivos.
  • Bloques solicitados fuera del sistema de archivos.
  • Detectados pocos enlaces.
  • Bloques no detectados.
  • Directorios que corresponden a inodos no localizados.
  • Errores de formato.

En los casos dónde el directorio padre de un archivo no pueda ser determinado, el archivo será ubicado en /lost+found. Los archivos entonces se renombran con su número de inodo. Es útil examinar el contenido de este directorio después de haber perdido archivos a consecuencia de un error del sistema.

La información (códigos) de finalización que nos da la utilidad fsck es útil para determinar el resultado de la operación. Cada código representa un tipo de condición de finalización. El código que nos retorna es la suma de las condiciones de salida. Los códigos de salida se muestran en la línea de comandos cuando el comando finaliza su operación. Estos códigos se muestran en la siguiente Tabla.

Códigos de Finalización de fsck
Código Significado
0 Sin error.
1 Errores del sistema de archivos corregidos.
2 El sistema debería ser reiniciado.
4 Errores del sistema de archivos sin corregir.
8 Error operacional.
16 Errores de sintaxis o uso.
128 Error en la librería compartida.

Desafortunadamente, a menos que tengas un conocimiento muy detallado del funcionamiento interno del filesystem, podrás hacer muy poco aparte de permitir que fsck realice todas las reparaciones. Por todo esto, lo más normal es utilizar la opción -y y confiar en la suerte.

Creación de sistemas de archivos

Para crear un sistema de archivos debe ser utilizada la herramienta correcta de las especificadas en la siguiente tabla. Un ejemplo de uso correcto de esas utilidades es lo siguiente:

# mkfs.ext3 /dev/hda3
Utilidades para la creación de filesystems
Comando Tipo de filesystem creado
mkfs.ext2 ext2
mkfs.ext3 ext3
mkfs.msdos MS-DOS
mkswap swap
mkraid Raid
mkfs.vfat FAT
mkfs.mimix mimix

Utilidades de los filesystems

Comando debugfs – Depurador de filesystems (sistemas de archivos) ext2.

Sintaxis:

debugfs [ -b tamaño_bloque ] [ -s superbloque ] [ -f archivo_comandos ] [ -R peticion ]
[ -V ] [ [ -w ] [ -c ] [ -i ] [ dispositivo ] ]

Descripción

El programa debugfs es un depurador interactivo de filesystems. Puede utilizarse para examinar y cambiar el estado de un filesystem del tipo ext2. Dispositivo indica el archivo especial correspondiente al dispositivo que contiene el filesystem ext2 (p.ej. /dev/hdXX).

Comando dumpe2fs – volcado de la información de un filesystem

Sintaxis:

dumpe2fs [ -bfhixV ] [ -ob superbloque ] [ -oB tamaño_bloque ] dispositivo

Descripción:

dumpe2fs muestra la información de grupo del superbloque y los demás bloques del filesystem existente en dispositivo.

Comando tune2fs - ajusta los parámetros configurables en un filesystem ext2.

Sintaxis:

tune2fs [ -l ] [ -c contador-max-montajes ] [ -e comportamiento-errores ] [ -f ]
[ -i intervalo-entre-comprobaciones ]  [  -j  ]  [ -J  opciones-de-diario ]
[ -m   porcentaje-bloques-reservados ] [ -o [^]opciones-de-montaje[,...] ]
[ -r contador-bloques-reservados ] [ -s sparse-super-flag ] [ -u usuario ] [ -g grupo ]
[ -C contador-montajes ] [ -L nombre-volumen ] [ -M directorio-ultimo-montaje ]
[ -O [^]caracteristica[,...]  ] [ -T hora-ultima-comprobacion ] [  -U  UUID  ]dispositivo

Descripción:

tune2fs ajusta los parámetros configurables en un filesystem ext2.

Montar y Desmontar sistemas de archivos

Los filesystems son montados con el comando mount. Durante el arranque, los filesystems que no contienen un 0 en el pass number son chequeados y luego montados. Después del arranque se pueden añadir más sistemas de archivos manualmente con el comando mount.

Sintaxis de mount

mount [opciones] device
mount [opciones] directorio
mount [opciones] device directorio

Descripción: Se usa para montar (y así poder usar) filesystems dentro de la estructura del árbol del sistema. La primera y segunda entrada consultan al archivo /etc/fstab para montar los dispositivos y así tomar las opciones que se le especifiquen en el /etc/fstab. La tercera opción es independiente del archivo /etc/fstab y monta el filesystem (device) en el directorio (directorio)

El comando mount admite dos tipos de opciones, unos para el comando en si, y otros para especificar opciones del sistema de archivos.

Opciones del comando mount
Opción Uso
-a Monta todos los fileystems especificados en el /etc/fstab menos los que tengan la opción noauto
-h Ayuda del comando mount
-o Especifica las opciones del mount en la linea de comandos
-r Monta filesystems en modo de solo lectura
-t fstype Especifica un tipo de fileystem
-v Salida interactiva
-w Monta fileystems de lectura/escritura

Opciones del mount

Estas opciones se especifican en el archivo /etc/fstab o bien en la linea de comandos con la opción -o. Estas opciones modifican el modo de montaje del comando mount, algunas de las opciones son:

Opciones del comando mount sobre sist. de archivos
Opción Uso
async Toda la E/S al sistema de archivos debería hacerse asíncronamente.
auto Puede montarse con la opción -a
defaults Establece las opciones: rw, suid, dev, exec, auto, nouser y async. Es la opcion por defecto en sistemas ext2
dev Interpretar dispositivos especiales de caracteres o bloques en el sistema de archivos
exec Permitir la ejecución de binarios
noauto Sólo puede montarse explícitamente (esto es, la opción -a no hará que el sistema de archivos se monte)
noexec No permitir la ejecución de ningún binario en el sistema de archivos montado. Esta opción puede ser útil para un servidor que tiene sistemas de archivos que contienen binarios para otras arquitecturas distintas de la suya.
nosuid No permitir el efecto de los bits SUID ni SGID
nouser Prohibir a un usuario ordinario (esto es, distinto de root) montar el sistema de archivos. Esto es lo predeterminado
ro Montar el sistema de archivos en modo de sólo lectura.
rw Montar el sistema de archivos de lectura y escritura
suid Permitir el efecto de los bits SUID y SGID
sync Toda la E/S al sistema de archivos debería hacerse síncronamente.
user Permitir a un usuario ordinario montar el sistema de archivos
users Permite a cualquier usuario el montaje/desmontaje de el sistema de archivos

Ejemplos

Ejemplo 1: Para mostrar los filesystems actualmente montados en el sistema

$ mount

Ejemplo 2: Montar un CD-ROM situado en /dev/hdc en el directorio existente /cdrom de sólo lectura:

$ mount -rt iso9660 /dev/hdc /cdrom

Si se monta sin la opción -r, se mostrará un aviso de que el CD-ROM está protegido contra escritura y se montará como sólo lectura, sería el caso del comando:

$ mount -t iso9660 /dev/hdc /cdrom

Ejemplo 3: Montar un diskette (/dev/fd0) con sistema MS-DOS en el directorio /floppy

$ mount -t msdos /dev/fd0 /floppy

Ejemplo 4: Si da el caso de que la partición /home y /swap fueron desactivadas por algún motivo se podrían volver a montar con la opción -a

$ mount -av

De este modo montamos los filesystems que no lo estén y nos muestra la acción del comando conforme se va ejecutando (opción -v)


Desmontando filesystems

Los filesystems pueden ser desmontados usando el comando umount. Cuando un filesystem es desmontado, los contenidos del árbol principal se actualizan, no pudiendose usar (el umount) si el sistema de archivos que se quiere desmontar está en uso.

Si el sistema de archivos está en uso el comando umount dará un error. Esto puede ocurrir por ejemplo cuando tenemos abierto un archivo de un CD-ROM o un proceso está haciendo uso del mismo. Otros errores pueden surgir si quitamos dispositivos removibles sin antes desmontarlos: perdida de datos, corrupción de los mismos etc etc

Sintaxis de umount

umount [opciones] device
umount [opciones] directorios

Descripción: Desmonta un filesystem de un dispositivo o un directorio.

Opciones de umount

-a: Desmonta todos los filesystems descritos en /etc/mtab. Este archivo está mantenido por los comando mount y umount en tiempo real, se usa normalmente cuando se apaga/reinicia el PC.

-t fstype:Desmonta sólo los filesystems del tipo especificado

Ejemplos

Ejemplo 1: Desmontar el cdrom (/dev/hdc) montado en /cdrom

$ umount /cdrom

o bien

$ umount /dev/hdc

Ejemplo 2: Desmontar todos los sistemas de archivos NFS:

$ umount -at nfs

Cuotas de disco

Establecer y Consultar Cuotas de Disco

La administración del espacio en disco puede ser una tarea problemática. El espacio disponible es un recurso limitado que muy a menudo se consume a un ritmo alarmante provocando que un filesystem bien proporcionado se vuelva insuficiente al cabo del tiempo. En los sistemas multiusuario – no importa lo grande que sea el filesystem – los usuarios siempre terminarán llenándolo. Y a nadie le interesa que un filesystem se llene demasiado pronto. Una forma de prevenir que ésto ocurra es el establecimiento de cuotas de disco, de esta forma podrán establecerse límites a la cantidad de espacio en disco consumido por usuarios independientes o por grupos de éstos.

Típicamente un tamaño de cuota es mucho menor que el espacio libre del filesystem donde se configura, de esta forma se puede evitar que un usuario o un grupo consuma demasiado espacio. Pueden configurarse cuotas para cada filesystem incluido en /etc/fstab, aunque normalmente solo se aplican en aquellos filesystems donde los usuarios finales guardan sus archivos (p.e., /home/nombreusuario). No es necesario establecer una cuota en /usr, por ejemplo, ya que los usuarios finales no pueden guardar archivos allí. Pueden configurarse cuotas para los usuarios individuales incluidos en /etc/passwd y para los grupos en /etc/group.

Cuotas de Limitación

Pueden establecerse hasta cinco tipos de cuotas de limitación por cada filesystem. Estas limitaciones se especifican en bloques de disco, normalmente de 1024 bytes cada uno:

Límite hard por usuario: El límite hard es la máxima cantidad de espacio en disco que un usuario puede disponer en el sistema. Una vez que el usuario alcanza este límite ya no se le permitirá realizar nuevas escrituras en el disco.

Límite soft por usuario: Cada usuario puede almacenar datos libremente en el filesystem hasta que alcance el límite soft. Éste límite actúa como una especie de zona de aviso, advirtiendo al usuario que debe ir limpiando sus directorios pero, a diferencia del límite hard se le permite seguir trabajando. Cuando el espacio consumido por un usuario supera el límite soft pero no el límite hard se envían mensajes de aviso al terminal del usuario advirtiéndole que está excediendo su cuota pero las operaciones de escritura terminarán correctamente.

Límite hard por grupo: Se trata del límite final asignado a un grupo por el sistema de cuotas. Una vez que se alcanza este límite, ninguno de los miembros de dicho grupo podrán realizar escrituras en el disco, incluso aunque no hayan excedido sus límites individuales.

Límite soft por grupo: Este límite se comporta de la misma forma que el de usuario pero se controla en base al espacio consumido por el grupo en lugar de por el usuario individual.


Periodo de gracia: Una vez que se alcanza el límite soft comienza el periodo de gracia para el usuario o el grupo. Cuando expira éste periodo de gracia, el límite soft se convierte en límite hard hasta que se hayan eliminado los archivos suficientes para que se resuelva el exceso de cuota. El periodo de gracia puede ajustarse para cualquier número de meses, semanas, días, horas, minutos o segundos. Un valor típico es el de siete días. Todos estos límites pueden establecerse utilizando el comando edquota, que se detallará a continuación.

Cuando una escritura en disco excede un límite hard o un límite soft con el periodo de gracia expirado, solo se completará una parte de la operación de escritura dejando un archivo truncado y, probablemente, inservible.

IMPORTANTE: Puede que el usuario no haya podido ver los mensajes de fin de cuota porque la aplicación haya ocultado la shell y los mensajes de dicha aplicación lo lleven a confusión al indicarle que el disco está lleno o protegido de escritura.


Comandos de cuotas

Linux proporciona una serie de comandos para gestión y consulta de las cuotas en los filesystems. Parte de la configuración requerida para establecer las cuotas inicialmente ha de hacerse a mano y sin ninguno de los comandos específicos de cuotas. Este proceso se explicará en la siguiente sección: Habilitando las Cuotas.


quota

Muestra las limitaciones de cuota en usuario o en grupo. La opción -u está activada por defecto. Solo el superusuario puede utilizar la opción -u y usuario para ver las limitaciones de otros usuarios. El resto de los usuarios usuarios podrán usar la opción -g y grupo para ver solamente las limitaciones de los grupos de los que sean miembros, siempre y cuando tengan permiso de lectura en los archivos quota.group.

Sintaxis de quota

quota [-u] [opciones] usuario
quota -g [opciones] grupo
Opciones frecuentemente utilizadas por quota
Opción Uso
-q Establece el modo “silencioso� que solo muestra las situaciones de exceso de cuota.
-v Establece el modo explícito que muestra las cuotas incluso cuando no se ha consumido ningún espacio en disco o no se hayan definido.

Ejemplos

Ejemplo 1 Siendo root, examina todas las cuotas del usuario fulanito :

# quota -uv fulanito
Disk quotas for user fulanito (uid 500):
Filesystem  blks  quota limit grace  files quota limit grace
/dev/sda9   9456  10000 10200           32     0     0
/dev/hda1     23      0     0           17     0     0

Este ejemplo muestra que fulanito está cerca de consumir su límite soft de 10,000 bloques, con un límite hard de 10,200 bloques en /dev/sda9, y que no tiene cuota establecida en /dev/hda1. La línea correspondiente /dev/hda1 se muestra debido a la utilización de la opción -v. No se muestran los valores correspondientes al periodo de gracia porque aun no se ha excedido el límite soft.

Ejemplo 2 Siendo el usuario fulanito, examina las cuotas para el grupo finanzas, del que dicho usuario es miembro:

$ quota -gv finanzas
Disk quotas for group finanzas (gid 501):
Filesystem  blks  quota  limit grace  files quota limit grace
/dev/sda9   1000* 990    1000  6days     34  3980  4000
/dev/hda1         0      0     0          0     0     0

En este caso, el grupo finanzas ha excedido el escaso límite soft de 990 bloques y ha alcanzado su límite hard de 1000 bloques. (Probablemente no se pudo completar la operación de escritura que escribió el bloque número 1000.) El periodo de gracia original en este ejemplo se estableció en siete días de los cuales quedan seis días restantes, lo que quiere decir que ha pasado un día desde que se excedió el límite soft.

quotaon

Activa las cuotas configuradas previamente en uno o más filesystems.

Sintaxis

quotaon [opciones] [filesystems]
quotaon [opciones] -a
Opciones frecuentemente utilizadas por
Opción Uso
-a Activa las cuotas en todos los filesystems incluidos en /etc/fstab y que estén marcados como de lectura-escritura y con cuotas. Normalmente se utiliza en el proceso de arranque para activar las cuotas.
-g Activa las cuotas de grupo. Esta opción no es necesaria si se utiliza -a ya que ésta otra activa tanto las cuotas de usuario como las de grupo.
-u Activa las cuotas de usuario; esta es la opción por defecto.
-v Establece el modo explícito de tal forma que se muestra un mensaje por cada filesystem en el que se han activado las cuotas.

Ejemplos

Ejemplo 1:Activar todas las cuotas definidas en /etc/fstab :

# quotaon -av

Ejemplo 2 Activar las cuotas de usuario sólo en el filesystem /home:

# quotaon -uv /home

quotaoff

Desactiva las cuotas de disco en uno o más filesystems.

Sintaxis

quotaoff [opciones] [filesystems]
quotaoff [opciones] -a
Opciones frecuentemente utilizadas por quotaoff
Opción Uso
-a Desactiva las cuotas en todos los filesystems en /etc/fstab.
-g Desactiva las cuotas de grupo. Esta opción no es necesaria si se utiliza la -a ya que ésta última incluye tanto las cuotas de usuario como las de grupo.
-u Desactiva las cuotas de usuario; esta es la opción por defecto.
-v Establece el modo explícito que mostrará un mensaje para cada filesystem en el que se desactiven las cuotas.

Ejemplos

Desactivar todas las cuotas mostrando todos los mensajes:

# quotaoff -av

quotacheck

Examina los filesystems y compila las bases de datos de cuotas. Esta comando no está incluido específicamente en los objetivos del examen LPI 101, pero es un componente importante en el sistema de cuotas de Linux. El comando quotacheck -a debería ser ejecutado de forma regular (posiblemente semanalmente) por medio de cron.

Sintaxis

quotacheck [opciones] filesystems
quotacheck [opciones] -a


Opciones frecuentemente utilizadas por
Opción Uso
-a Comprueba todas las cuotas de los filesystems incluidos en /etc/fstab. Se comprobarán tanto las cuotas de usuario como las de grupo según se indique en las opciones usrquota y grpquota.
-g grupo Compila solamente la información de grupo.
-u usuario Compila solamente la información de usuario; ésta es la opción por defecto. No obstante, si se especificase la opción -g, entonces habría que incluir esta si se desea que se procesen también las cuotas de usuario.
-v Establece el modo explícito que mostrará toda la información de lo que el programa está haciendo. Esta opción indica que el programa está activo mediante un símbolo giratorio en el terminal. Ésto queda muy bonito pero podría ser un problema si estamos conectados mediante un módem lento.

Ejemplo

Ejemplo 1 Inicializa todos los archivos de cuotas:

  1. quotaoff -a
  1. quotacheck -aguv
  1. quotaon -a

Para actualizar los archivos de bases de datos de cuotas debemos desactivar primero las mismas.

Ejemplo 2 Con las cuotas activas, actualizar las cuotas de usuario en memoria para el filesystem /home :

  1. quotacheck -v /home

edquota

Modifica las cuotas de usuario o grupo. Este es un comando interactivo que utiliza un editor de texto para configurar los parámetros de cuotas para usuarios o grupos. Por defecto se utiliza el editor vi a menos que las variables de entorno EDITOR o VISUAL apunten a otro editor como Emacs. Cuando se envía el comando, se ejecuta un editor con un archivo temporal que contiene las opciones de cuotas. Al guardar el archivo temporal, el editor finaliza y los cambios se guardan en las bases de datos de cuotas. En la primera forma del comando, se modifica una lista de usuarios o grupos separados por espacios en blanco especificados en el apartado nombres. Si se incluye la opción -p y proto-usuario, las cuotas de ese usuario o grupo se utilizarán para los nombres y no se lanzará ningún editor. En la segunda forma del comando, con la opción -t, se editarán interactivamente los límites soft para cada filesystem.

Sintaxis

edquota [-p proto-usuario] [opciones] nombres
edquota [opciones] -t
Opciones frecuentemente utilizadas por
Opción Uso
-g Modifica las cuotas de grupo. Si se especifica -g, se asumirá que todos los nombres son grupos y no usuarios, incluso si se especificase también -u.
-p proto-usuario Duplica las cuotas del usuario prototipo para cada grupo o usuario especificado. Este es el mecanismo mas habitualmente utilizado para inicializar al mismo tiempo las cuotas de varios usuarios o grupos.
-t Modifica los límites soft. Este comando interpreta unidades de sec(segundos), min(minutos), hour (horas), day (días), week (semanas), y month (meses).
-u Modifica las cuotas de usuario. Es la opción por defecto, pero se ignorará si se especificase la opción -g

Ejemplos

Los siguientes ejemplos muestran la salida de los comandos utilizando el editor vi.

Ejemplo 1 Modifica las cuotas de usuario para fulanito :

# edquota -u fulanito
Quotas for user fulanito:
/dev/sda9: blocks in use: 87, limits (soft = 99900, 
       hard = 100000)
       inodes in use: 84, limits (soft = 0, hard = 0)
/dev/hda1: blocks in use: 0, limits (soft = 0, hard = 0)
       inodes in use: 0, limits (soft = 0, hard = 0)
"/tmp/EdP.auHTZJ0" 5 lines, 241 characters


En este ejemplo, a fulanito se le ha definido en /dev/sda9 un límite soft de 99.900 bloques, un límite hard de 100.000 bloques, y ningún límite de archivos. No tiene ninguna limitación en /dev/hda1.

Ejemplo 2 Modificar los límites soft para usuarios en todos los filesystems:

# edquota -tu
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda9: block grace period: 7 days, 
   file grace period: 3 days
/dev/hda1: block grace period: 7 days, 
   file grace period: 3 days
"/tmp/EdP.aiTShJB" 5 lines, 249 characters

En este caso se han establecido unos periodos de gracia de siete días para bloques (espacio en disco) y de tres días para archivos (inodos).

repquota

Se utiliza para obtener un informe de la situación de las cuotas. En la primera forma del comando, repquota mostrará un informe por usuario o por grupo de las cuotas de los filesystems indicados. En la segunda forma, la opción -a hará que se muestre un sumario de todos los filesystems con cuotas. Este comando solo podrá ejecutarlo el usuario root, a menos que los archivos de bases de datos de las cuotas tengan permisos de lectura universales. Para cada usuario se imprime el número de archivos y el espacio en disco utilizados en ese momento junto con las cuotas creadas con edquota.

Sintaxis

repquota [opciones] filesystems
repquota -a [opciones]
Opciones frecuentemente utilizadas por
Opción Uso
-a Hace informes de todas las cuotas de todos los filesystems de lectura-escritura incluidos en /etc/fstab. Se mostrarán tanto las cuotas de usuario como las de grupo según se indique en las opciones usrquota y grpquota.
-g Muestra las cuotas de grupos.
-u Muestra las cuotas de usuarios; es la opción por defecto.
-v Activa el modo explícito, el cual añade una cabecera descriptiva a la salida del comando.


Ejemplo

Informe de las cuotas de usuario para el filesystem /home:

# repquota -v /home

Habilitando las cuotas

Para poder utilizar las cuotas, en primer lugar hay que habilitarlas (El kernel debe estar compilado con soporte para cuotas. En el caso improbable de que no fuese así, habría que recompilarlo con esta opción.). No es un proceso dificultoso pero, desgraciadamente, tampoco es simple. Para aclarar un poco este proceso, en esta sección se incluirá un breve tutorial explicando como habilitar las cuotas de usuario y de grupo en el filesystem /dev/sda9 montado bajo /home. Hay que tener en cuenta que pueden habilitarse cuotas solo de usuario, de grupo o ambas según sea necesario.

1. Definir las opciones en /etc/fstab. En la línea que contiene el filesystem /home, añadir las opciones usrquota y grpquota a la opción default, como en este ejemplo:
/dev/sda9   /home    ext2    defaults,usrquota,grpquota  1  2
Estas opciones indican a las utilidades de configuración de cuotas que particiones deben ser tratadas por dichas utilidades cuando éstas busquen en /etc/fstab.
2. Crear los archivos quota.user y quota.group en la raíz del filesystem /home y dar permisos sólo para root:
# touch /home/quota.user /home/quota.group
# chmod 600 /home/quota.user /home/quota.group
Estos dos archivos son las bases de datos de las cuotas de usuarios y grupos. Cada filesystem con cuotas utilizará sus propias bases de datos. Al habilitar las cuotas, estos archivos contendrán datos binarios (no son archivos de texto). Si se quisiera que los usuarios puedan examinar las cuotas de los grupos a los que pertenecen, el archivo quota.group necesitará un permiso de 644 en lugar de 600.
3. Ejecutar quotacheck para inicializar las bases de datos:
# quotacheck -avug
Scanning /dev/sda9 [/home] done
Checked 236 directories and 695 files
Using quotafile /home/quota.user
Using quotafile /home/quota.group
4. Ahora, verificar que los archivos de bases de datos se han inicializado realmente, para ello nos aseguramos que su tamaño no sea cero (en este ejemplo cada uno ocupa 16.192):
# ls -al /home/quota.*
-rw-------  1 root  root 16192 Dec 27 19:53 /home/quota.group
-rw-------  1 root  root 16192 Dec 27 19:53 /home/quota.user
5. Ejecutar quotaon para activar el sistema de cuotas:
# quotaon -a
6. Verificar que el script de inicialización del sistema ( /etc/rc.d/rc.sysinit o similar) activará las cuotas cada vez que el sistema cargue.
Puede ser algo similar al ejemplo siguiente aunque puede variar de sistema a sistema:
if [ -x /sbin/quotacheck ]
then
   echo "Checking quotas."
   /sbin/quotacheck -avug
   echo " Done."
fi
if [ -x /sbin/quotaon ]
then
   echo "Turning on quotas."
   /sbin/quotaon -avug
fi
7. Añadir un script al directorio crontab del sistema (por ejemplo /etc/crontab.weekly) para que se ejecute quotacheck rutinariamente. El script del ejemplo puede ser válido:
#!/bin/bash
/sbin/quotacheck -avug
Alternativamente, podría ponerse /sbin/quotacheck en el archivo crontab de root (utilizando el comando crontab -e) para su ejecución semanal, como en este ejemplo:
# ejecutar quotacheck semanalmente
0 3 * * 0   /sbin/quotacheck -avug 

En este momento, el filesystem /home está listo para aceptar cuotas de usuario o de grupo, controlarlas y emitir informes sobre ellas.

Segunda parte del apunte