Semana 10 - Administracion de Sistemas de Archivos

Anuncio
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
Descargar