Tema 1_C - Administración Avanzada de Sistemas

Anuncio
Discos y Sistemas de ficheros
1. Introducción 2. Esquemas de disco por volúmenes lógicos 2.1. LVM 2.2. Disco Dinámico (Windows) 3. Raid por software 4. Sistemas de ficheros 4.1. Operaciones habituales con sistemas de archivos 4.2. El sistema de ficheros EXT3 4.2.1. El Inodo 4.2.2. Estructura del sistema de ficheros ext3 4.2.3. El Journal 4.3. Reiser FS 5. Otras utilidades interesantes del disco Bibliografía Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
1
1. Introducción
Los discos de los ordenadores son dispositivos de bloques que se encuentran en el directorio /dev. Típicamente y según la configuración del equipo se pueden encontrar discos de distintos tipos: ● IDE (en desuso): /dev/hda (el primary master), /dev/hdb (primary slave), /dev/hdc (secondary master) y /dev/hdd (secondary slave) ● Disqueteras (en desuso): /dev/fd0 y /dev/fd1 ● Discos SCSI y Serial ATA: /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd … ● Discos virtuales de XEN: /dev/xvda, /dev/xvdb, /dev/xvdc... Para obtener un listado de discos es común el uso de la herramienta fdisk (con el argumento ­l) ó lshw (aunque esta última es necesario instalarla). Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
2
# fdisk -l
Disco /dev/sda: 1073 MB, 1073741824 bytes
106 heads, 39 sectors/track, 507 cylinders, 2097152 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00093847
Disposit. Inicio
/dev/sda1 *
Comienzo
Fin
2048
2095103
Bloques Id Sistema
1046528 83 Linux
Disco /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, 2097152 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000
El disco /dev/sdb no contiene una tabla de particiones válida
Disco /dev/sdc: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, 2097152 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identificador del disco: 0x00000000
El disco /dev/sdc no contiene una tabla de particiones válida
# apt-get install lshw
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
lshw
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 287 kB de archivos.
Se utilizarán 705 kB de espacio de disco adicional después de esta operación.
Des:1 http://ftp.es.debian.org/debian/ wheezy/main lshw i386 02.16-1 [287 kB]
Descargados 287 kB en 0seg. (739 kB/s)
Seleccionando el paquete lshw previamente no seleccionado.
(Leyendo la base de datos ... 26398 ficheros o directorios instalados actualmente.)
Desempaquetando lshw (de .../archives/lshw_02.16-1_i386.deb) ...
Procesando disparadores para man-db ...
Configurando lshw (02.16-1) ...
# lshw -class disk
*-cdrom
description: DVD-RAM writer
physical id: 0.0.0
bus info: scsi@1:0.0.0
logical name: /dev/cdrom
logical name: /dev/cdrw
logical name: /dev/dvd
logical name: /dev/dvdrw
logical name: /dev/sr0
capabilities: audio cd-r cd-rw dvd dvd-r dvd-ram partitioned partitioned:dos
configuration: signature=5608539f status=ready
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
3
*-disk:0
description: SCSI Disk
physical id: 0.0.0
bus info: scsi@2:0.0.0
logical name: /dev/sda
size: 1GiB (1073MB)
capabilities: partitioned partitioned:dos
configuration: sectorsize=512 signature=00093847
*-disk:1
description: SCSI Disk
physical id: 0.1.0
bus info: scsi@2:0.1.0
logical name: /dev/sdb
size: 1GiB (1073MB)
configuration: sectorsize=512
*-disk:2
description: SCSI Disk
physical id: 0.2.0
bus info: scsi@2:0.2.0
logical name: /dev/sdc
size: 1GiB (1073MB)
configuration: sectorsize=512
En cuanto a los dispositivos, a continuación se muestra un ejemplo de discos virtuales Xen de un equipo. $ ls /dev/xvd*
/dev/xvda /dev/xvdb1 /dev/xvdd /dev/xvdf /dev/xvdg1
/dev/xvda1 /dev/xvdc /dev/xvde /dev/xvdf1 /dev/xvdh
/dev/xvdb /dev/xvdc1 /dev/xvde1 /dev/xvdg /dev/xvdh1
$ ls -l /dev/xvd*
brw-r--r-- 1 root root 202, 0 abr 18 2012 /dev/xvda
brw-r--r-- 1 root root 202, 1 abr 18 2012 /dev/xvda1
brw-r--r-- 1 root root 202, 16 abr 18 2012 /dev/xvdb
brw-r--r-- 1 root root 202, 17 abr 18 2012 /dev/xvdb1
brw-r--r-- 1 root root 202, 32 abr 18 2012 /dev/xvdc
brw-r--r-- 1 root root 202, 33 sep 30 07:08 /dev/xvdc1
brw-r--r-- 1 root root 202, 48 abr 18 2012 /dev/xvdd
brw-r--r-- 1 root root 202, 64 abr 18 2012 /dev/xvde
brw-r--r-- 1 root root 202, 65 sep 30 07:08 /dev/xvde1
brw-r--r-- 1 root root 202, 80 abr 18 2012 /dev/xvdf
brw-r--r-- 1 root root 202, 81 sep 30 07:08 /dev/xvdf1
brw-r--r-- 1 root root 202, 96 sep 29 13:50 /dev/xvdg
brw-r--r-- 1 root root 202, 97 sep 30 07:08 /dev/xvdg1
brw-r--r-- 1 root root 202, 112 oct 1 07:58 /dev/xvdh
brw-r--r-- 1 root root 202, 113 oct 1 08:29 /dev/xvdh1
En linux los dispositivos se pueden crear con el comando mknod aunque existen utilidades de rastreo de hardware que permiten la creación en disco de todos los dispositivos necesarios (aunque a veces pueden fallar). Para crear un disco (ó una partición) en linux se usa el comando: Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
4
mknod /dev/<device> b <mayor> <minor>
En este comando, el dispositivo es el nombre del dispositivo, mayor es el código del driver y minor es una especificación del dispositivo. Mayor y minor se usan de la siguiente forma: ● Discos IDE: El mayor es 3 y los minor se distribuyen de 64 en 64 (0, 64, 128…). Así el primary master (hda) tiene el minor 0, el primary slave (hdb) tiene el minor 64, el secondary master (hdc) tiene el 128 y el secondary slave (hdd) tiene el minor 192. Los identificadores intermedios de minor se usan para identificar las particiones (hda1, hda2, etc). Así el mayor 3 con el minor 1 se refiere a la primera partición del disco primary master. Esta distribución resultó muy adecuada para una época en la que los ordenadores contaban sólo con 4 ranuras para colocar discos (bus IDE). ● Discos SCSI y SATA: El mayor es 8 y los minor se distribuyen en saltos de 16 (0, 16, 32…). Los códigos intermedios entre dos identificadores de dos discos SATA/SCSI se usan para identificar las particiones del correspondiente disco. Así el mayor 8 con el minor 1 se refiere a la primera partición del primer disco del bus (que a su vez seria el mayor 8 con el minor 0) y que corresponde con /dev/sda1. ● Discos virtuales XEN: El mayor es 202 y los minor se distribuyen en saltos de 16 de la misma forma que los discos SATA/SCSI. En cuanto a los disquetes, en la actualidad están en desuso. El código del mayor es 2 y los minor son números consecutivos 0 (primera disquetera ó fd0), 1 (segunda disquetera o fd1). No se dejan identificadores de hardware intermedios porque los disquetes no permiten el particionado. Los discos se organizan en particiones (aunque se pueden usar esquemas basados en volúmenes como LVM ó el disco dinamico de Windows) y estas particiones son a su vez dispositivos. Las herramientas cfdisk (más cómoda) o fdisk (con un menú “cutre”) permiten crear particiones. A veces puede ocurrir que, tras particionar el disco no se encuentren los dispositivos correspondientes a las particiones y haya que crearlos manualmente con mknod. De la misma forma el hecho de que exista /dev/sda3 no significa que el disco /dev/sda tenga 3 particiones ni que exista una partición con un identificador 3 en /dev/sda. En este tipo de situaciones en las que existe /dev/sdaX pero no la partición correspondiente, cualquier operación sobre /dev/sdaX (formatear, montar, etc) dará como resultado un error de entrada/salida. A mayores, se puede crear dispositivos de bloques que emulen discos mediante el uso de dispositivos de loop (/dev/loopX). Estos dispositivos tienen el mayor 7 y códigos de minor consecutivos (0, 1, 2, …). No se puede representar, por tanto, particiones dispositivos de loop. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
5
Estos dispositivos usan un fichero como soporte de almacenamiento con el dispositivo de loop correspondiente. Para asociar el fichero de almacenamiento a un dispositivo de loop se emplea con el comando losetup. A continuación se muestra un ejemplo de uso del comando losetup y de la herramienta fdisk (en la que se particiona el dispositivo de loop aunque esas particiones no puedan ser direccionables). $ ls /dev/loop*
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
$ dd if=/dev/zero of=ej bs=1M count=512
512+0 records in
512+0 records out
$ sudo losetup /dev/loop0 $(pwd)/ej
$ sudo losetup /dev/loop0
/dev/loop0: [ca01]:295310 (/home/moncho/ej)
$ sudo cfdisk /dev/loop0
cfdisk (util-linux-ng 2.17.2)
Disk Drive: /dev/loop0
Size: 536870912 bytes, 536 MB
Heads: 255 Sectors per Track: 63 Cylinders: 65
Name
Flags
Part Type FS Type
[Label]
Size (MB)
-----------------------------------------------------------------------------Pri/Log Free Space
534,65
[ Help
[ Write
] [
]
New
] [ Print
] [
Quit
] [ Units
]
Create new partition from free space
Ejercicio: Emplear CFDISK para particionar el dispositivo de loop Las particiones de disco (o los discos sin particionar) se pueden formatear con el comando mkfs empleando distintos esquemas para guardar los ficheros y directorios. Estos esquemas de representar los ficheros y directorios contenidos en un disco se conocen como sistemas de ficheros y se estudian con mayor detalle en el apartado 4. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
6
2. Esquemas de disco por volúmenes lógicos
La principal limitación de un esquema de uso de disco por particiones es la dificultad y complejidad para redimensionar las particiones. Así, por ejemplo, en un esquema de uso de disco como el que se expone en la siguiente imagen, resulta complejo (aunque posible) redimensionar la partición sda2. Los volúmenes nacieron principalmente para facilitar la resolución de este tipo de problemas permitiendo que un volumen (que es el concepto análogo a particion en un sistema de gestión de volúmenes) pueda distribuirse en distintas zonas de disco empleando esquemas de combinación RAID. Así, por ejemplo, con un sistema de gestión de volúmenes es posible el siguiente despliegue: Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
7
Usando este esquema de gestión por volúmenes es posible aumentar las particiones tanto como sea necesario siempre que haya espacio ó se añadan más discos. Nótese que un volumen puede extenderse en varios discos físicos. Las implementaciones más conocidas de gestores de volúmenes son LVM para Linux y Disco dinámico de Windows. 2.1. LVM
LVM (Logical Volume Manager) es una implementación de un administrador de volúmenes lógicos para el kernel de Linux que nos permite: ● Redimensionado de grupos lógicos ● Redimensionado de volúmenes lógicos ● Respaldos de lectura y escritura (solo en su versión 2, LVM2) ● RAID0 de volúmenes lógicos. En LVM existen 5 niveles de abstracción (ó conceptos) que se emplean para manera el almacenamiento. Estos niveles son: ● Volúmenes Físicos o Physical Volumes: Son los contenedores de almacenamiento de la información. Un volumen físico puede ser un disco entero ó una partición de un disco de tipo Linux LVM. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
8
●
Grupos de volúmenes o Volume Groups: Enlaza varios volúmenes físicos (que se usan como soporte de la información) con varios volúmenes lógicos (particiones). ● Volúmenes Lógicos o Logical Volumes: Es el equivalente a una partición de un disco duro, por lo que puede contener un sistema de archivos como por ejemplo /home. ● Extensión Lógica o Logical Extents: Cada volumen lógico está dividido en trozos de datos (que se almacenan en volúmenes físicos distintos) llamados extensión lógica (logical extents). ● Extensión Física o Physical Extents: Cada volumen físico esta divido en pequeños trozos datos (que pertenecen a distintas extensiones lógicas de volúmenes de datos) que se llaman extensión física (physical extents). En el ejemplo que se coloca a continuación se usa LVM para poder redimensionar fácilmente el directorio /home. el primer paso para emplear LVM consiste en instalar el paquete LVM: # apt-get install lvm2
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
libdevmapper-event1.02.1 libreadline5
Se instalarán los siguientes paquetes NUEVOS:
libdevmapper-event1.02.1 libreadline5 lvm2
0 actualizados, 3 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 774 kB de archivos.
Se utilizarán 1.718 kB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
Des:1 http://ftp.es.debian.org/debian/ wheezy/main libdevmapper-event1.02.1 i386 2:1.02.74-8 [32,4
kB]
Des:2 http://ftp.es.debian.org/debian/ wheezy/main libreadline5 i386 5.2+dfsg-2~deb7u1 [146 kB]
Des:3 http://ftp.es.debian.org/debian/ wheezy/main lvm2 i386 2.02.95-8 [596 kB]
Descargados 774 kB en 0seg. (2.388 kB/s)
Seleccionando el paquete libdevmapper-event1.02.1:i386 previamente no seleccionado.
(Leyendo la base de datos ... 26404 ficheros o directorios instalados actualmente.)
Desempaquetando libdevmapper-event1.02.1:i386 (de
.../libdevmapper-event1.02.1_2%3a1.02.74-8_i386.deb) ...
Seleccionando el paquete libreadline5:i386 previamente no seleccionado.
Desempaquetando libreadline5:i386 (de .../libreadline5_5.2+dfsg-2~deb7u1_i386.deb) ...
Seleccionando el paquete lvm2 previamente no seleccionado.
Desempaquetando lvm2 (de .../lvm2_2.02.95-8_i386.deb) ...
Procesando disparadores para man-db ...
Configurando libdevmapper-event1.02.1:i386 (2:1.02.74-8) ...
Configurando libreadline5:i386 (5.2+dfsg-2~deb7u1) ...
Configurando lvm2 (2.02.95-8) ...
[....] Setting up LVM Volume Groups... No volume groups found
No volume groups found
done.
update-initramfs: deferring update (trigger activated)
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
9
A continuación se crearán particiones de tipo Linux LVM en el espacio de disco que se vaya a emplear. Este paso se puede hacer con las herramientas cfdisk ó con fdisk. Las particiones serán de tipo Linux LVM (8E). # cfdisk /dev/sdc
# cfdisk /dev/sdc
# ls -la /dev/sd*
brw-rw---T 1 root disk 8, 0 oct
brw-rw---T 1 root disk 8, 1 oct
brw-rw---T 1 root disk 8, 16 oct
brw-rw---T 1 root disk 8, 17 oct
brw-rw---T 1 root disk 8, 32 oct
brw-rw---T 1 root disk 8, 33 oct
2 12:55 /dev/sda
2 12:55 /dev/sda1
2 13:06 /dev/sdb
2 13:06 /dev/sdb1
2 13:07 /dev/sdc
2 13:07 /dev/sdc1
Crear los volúmenes físicos que se vayan a emplear: # pvcreate /dev/sdb1
Writing physical volume data to disk "/dev/sdb1"
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
Writing physical volume data to disk "/dev/sdc1"
Physical volume "/dev/sdc1" successfully created
# pvdisplay
"/dev/sdb1" is a new physical volume of "1023,97 MiB"
--- NEW Physical volume --PV Name
/dev/sdb1
VG Name
PV Size
1023,97 MiB
Allocatable
NO
PE Size
0
Total PE
0
Free PE
0
Allocated PE
0
PV UUID
0QO8cj-gZrn-dpdK-yavs-22gQ-hQ49-LsCRW6
"/dev/sdc1" is a new physical volume of "1023,97 MiB"
--- NEW Physical volume --PV Name
/dev/sdc1
VG Name
PV Size
1023,97 MiB
Allocatable
NO
PE Size
0
Total PE
0
Free PE
0
Allocated PE
0
PV UUID
pZ3P1O-P8ak-O37Z-rl4k-k5mW-flrP-Cgfy1v
El comando pvremove <partición> permite eliminar un volumen físico. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
10
Una vez creados los volúmenes físicos, se deben crear los grupos de volúmenes. Se puede crear un grupo de volúmenes con un solo volumen físico ó con varios volúmenes a la vez. # vgcreate vg1 /dev/sdb1
Volume group "vg1" successfully created
# vgdisplay
--- Volume group --VG Name
vg1
System ID
Format
lvm2
Metadata Areas
1
Metadata Sequence No 1
VG Access
read/write
VG Status
resizable
MAX LV
0
Cur LV
0
Open LV
0
Max PV
0
Cur PV
1
Act PV
1
VG Size
1020,00 MiB
PE Size
4,00 MiB
Total PE
255
Alloc PE / Size
0/0
Free PE / Size
255 / 1020,00 MiB
VG UUID
UHPxsa-Yrrk-ja2z-93lm-eK39-BXPy-cTVQ1Y
# vgremove vg1
Volume group "vg1" successfully removed
# vgcreate vg1 /dev/sdb1 /dev/sdc1
Volume group "vg1" successfully created
# vgdisplay
--- Volume group --VG Name
vg1
System ID
Format
lvm2
Metadata Areas
2
Metadata Sequence No 1
VG Access
read/write
VG Status
resizable
MAX LV
0
Cur LV
0
Open LV
0
Max PV
0
Cur PV
2
Act PV
2
VG Size
1,99 GiB
PE Size
4,00 MiB
Total PE
510
Alloc PE / Size
0/0
Free PE / Size
510 / 1,99 GiB
VG UUID
ve47jL-D309-X4Ft-sMBH-wKPA-GHyS-kyigdG
# pvdisplay
--- Physical volume --PV Name
/dev/sdb1
VG Name
vg1
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
11
PV Size
Allocatable
PE Size
Total PE
Free PE
Allocated PE
PV UUID
1023,97 MiB / not usable 3,97 MiB
yes
4,00 MiB
255
255
0
0QO8cj-gZrn-dpdK-yavs-22gQ-hQ49-LsCRW6
--- Physical volume --PV Name
/dev/sdc1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
255
Allocated PE
0
PV UUID
pZ3P1O-P8ak-O37Z-rl4k-k5mW-flrP-Cgfy1v
# pvcreate /dev/sdd1
Writing physical volume data to disk "/dev/sdd1"
Physical volume "/dev/sdd1" successfully created
# vgextend vg1 /dev/sdd1
Volume group "vg1" successfully extended
# vgdisplay
--- Volume group --VG Name
vg1
System ID
Format
lvm2
Metadata Areas
3
Metadata Sequence No 3
VG Access
read/write
VG Status
resizable
MAX LV
0
Cur LV
1
Open LV
0
Max PV
0
Cur PV
3
Act PV
3
VG Size
2,99 GiB
PE Size
4,00 MiB
Total PE
765
Alloc PE / Size
50 / 200,00 MiB
Free PE / Size
715 / 2,79 GiB
VG UUID
ve47jL-D309-X4Ft-sMBH-wKPA-GHyS-kyigdG
El comando vgremove <grupo de volumenes> permite la eliminación de grupos de volúmenes. Por último es necesario crear sobre los volúmenes lógicos sobre los grupos de volúmenes que se hace con el comando lvcreate tal como sigue: # lvcreate -n home_vol -L200M vg1
Logical volume "home_vol" created
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
12
# lvdisplay
--- Logical volume --LV Path
/dev/vg1/home_vol
LV Name
home_vol
VG Name
vg1
LV UUID
PgnUuw-iDKx-qWgi-8Wj4-zQ0n-s2MK-8tjks3
LV Write Access
read/write
LV Creation host, time debian, 2014-10-02 13:19:49 +0200
LV Status
available
# open
0
LV Size
200,00 MiB
Current LE
50
Segments
1
Allocation
inherit
Read ahead sectors
auto
- currently set to
256
Block device
254:0
Una vez creados los volúmenes lógicos, estos funcionan como particiones (el dispositivo tiene la forma /dev/<volume_group>/<logical_volume_name>) que habrá que formatear adecuadamente y montar como cualquier dispositivo normal. Cierto es que habitualmente lso volúmenes lógicos se emplean como soporte de imágenes de máquinas virtuales en plataformas como Xen, libvirt, etc. # mkfs -t ext3 /dev/vg1/home_vol
mke2fs 1.42.5 (29-Jul-2012)
Etiqueta del sistema de ficheros=
OS type: Linux
Tamaño del bloque=1024 (bitácora=0)
Tamaño del fragmento=1024 (bitácora=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
Primer bloque de datos=1
Número máximo de bloques del sistema de ficheros=67371008
25 bloque de grupos
8192 bloques por grupo, 8192 fragmentos por grupo
2048 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
8193, 24577, 40961, 57345, 73729
Allocating group tables: hecho
Escribiendo las tablas de nodos-i: hecho
Creating journal (4096 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho
# mkdir /home2
# mount /dev/vg1/home_vol /home2
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
13
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=62963,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51440k,mode=755)
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 on / type ext4
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102860k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/mapper/vg1-home_vol on /home2 type ext3
(rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
Redimensionar un volumen se puede hacer fácilmente con el comando lvresize tal como se muestra a continuación. # umount /home2
# lvextend --size +50M /dev/vg1/home_vol
Rounding up size to full physical extent 52,00 MiB
Extending logical volume home_vol to 252,00 MiB
Logical volume home_vol successfully resized
# resize2fs /dev/vg1/home_vol
resize2fs 1.42.5 (29-Jul-2012)
Por favor ejecute antes 'e2fsck -f /dev/vg1/home_vol'.
# e2fsck -f /dev/vg1/home_vol
e2fsck 1.42.5 (29-Jul-2012)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/vg1/home_vol: 11/51200 files (0.0% non-contiguous), 12126/204800 blocks
# resize2fs /dev/vg1/home_vol
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/vg1/home_vol to 258048 (1k) blocks.
The filesystem on /dev/vg1/home_vol is now 258048 blocks long.
# mount /dev/vg1/home_vol /home2/
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=62963,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51440k,mode=755)
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 on / type ext4
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102860k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/mapper/vg1-home_vol on /home2 type ext3
(rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
# df -h
S.ficheros
Tamaño Usados Disp Uso% Montado en
rootfs
1006M 657M 299M 69% /
udev
10M
0 10M 0% /dev
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
14
tmpfs
51M
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 1006M
tmpfs
5,0M
tmpfs
101M
/dev/mapper/vg1-home_vol
244M
260K
657M
0
0
6,1M
50M 1% /run
299M 69% /
5,0M 0% /run/lock
101M 0% /run/shm
226M 3% /home2
Por supuesto, el redimensionado de estos volúmenes se hace sin perder los datos originales. El comando lvremove <dispositivo_volumen_logico> permite la eliminación de volúmenes lógicos. Además de esto, mediante la herramienta lvcreate, se permite la creación de volúmenes mediante técnicas de RAID. Con este objetivo, se puede forzar la división de un volúmen lógico en varias extensiones lógicas (logical extents) que se colocarán en distintos volúmenes físicos configurando las extensiones físicas de un volumen físico (phisical extents). Los comandos lvdisplay ­m y pvdisplay ­m permiten consultar respectivamente las extensiones lógicas y físicas de volúmenes lógicos y físicos. # lvdisplay -m
--- Logical volume --LV Path
/dev/vg1/home_vol
LV Name
home_vol
VG Name
vg1
LV UUID
PgnUuw-iDKx-qWgi-8Wj4-zQ0n-s2MK-8tjks3
LV Write Access
read/write
LV Creation host, time debian, 2014-10-02 13:19:49 +0200
LV Status
available
# open
1
LV Size
252,00 MiB
Current LE
63
Segments
1
Allocation
inherit
Read ahead sectors
auto
- currently set to
256
Block device
254:0
--- Segments --Logical extent 0 to 62:
Type
linear
Physical volume
/dev/sdb1
Physical extents
0 to 62
# pvdisplay -m
--- Physical volume --PV Name
/dev/sdb1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
15
Total PE
Free PE
Allocated PE
PV UUID
255
192
63
0QO8cj-gZrn-dpdK-yavs-22gQ-hQ49-LsCRW6
--- Physical Segments --Physical extent 0 to 62:
Logical volume
/dev/vg1/home_vol
Logical extents
0 to 62
Physical extent 63 to 254:
FREE
--- Physical volume --PV Name
/dev/sdc1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
255
Allocated PE
0
PV UUID
pZ3P1O-P8ak-O37Z-rl4k-k5mW-flrP-Cgfy1v
--- Physical Segments --Physical extent 0 to 254:
FREE
--- Physical volume --PV Name
/dev/sdd1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
255
Allocated PE
0
PV UUID
v6oRQG-BccN-oLtX-qOx7-5S4r-gXwY-uHcZ9j
--- Physical Segments --Physical extent 0 to 254:
FREE
Como se puede ver en el comando anterior, el volúmen lógico /dev/vg1/home_vol se compone de 63 (0­62) extensiones lógicas que se almacenan linealmente en el volumen físico /dev/sdb1. Este volumen físico tiene 254 extensiones físicas de las cuales las 63 primeras están ocupadas por el volumen lógico /dev/vg1/home_vol. A continuación, se crea un raid 1 y se puede ver cómo se distribuye este el almacenamiento en los volúmenes físicos: # lvcreate -m1 -L100M -n prueba_raid1 vg1
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
16
Logical volume "prueba_raid1" created
# pvdisplay -m
--- Physical volume --PV Name
/dev/sdb1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
167
Allocated PE
88
PV UUID
0QO8cj-gZrn-dpdK-yavs-22gQ-hQ49-LsCRW6
--- Physical Segments --Physical extent 0 to 62:
Logical volume
/dev/vg1/home_vol
Logical extents
0 to 62
Physical extent 63 to 87:
Logical volume
/dev/vg1/prueba_raid1_mimage_0
Logical extents
0 to 24
Physical extent 88 to 254:
FREE
--- Physical volume --PV Name
/dev/sdc1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
230
Allocated PE
25
PV UUID
pZ3P1O-P8ak-O37Z-rl4k-k5mW-flrP-Cgfy1v
--- Physical Segments --Physical extent 0 to 24:
Logical volume
/dev/vg1/prueba_raid1_mimage_1
Logical extents
0 to 24
Physical extent 25 to 254:
FREE
--- Physical volume --PV Name
/dev/sdd1
VG Name
vg1
PV Size
1023,97 MiB / not usable 3,97 MiB
Allocatable
yes
PE Size
4,00 MiB
Total PE
255
Free PE
254
Allocated PE
1
PV UUID
v6oRQG-BccN-oLtX-qOx7-5S4r-gXwY-uHcZ9j
--- Physical Segments --Physical extent 0 to 0:
Logical volume
/dev/vg1/prueba_raid1_mlog
Logical extents
0 to 0
Physical extent 1 to 254:
FREE
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
17
Ejercicio: A la vista de los resultados del comando anterior ¿Dónde se guardan las imágenes replicadas del RAID1 creado? En los comandos de abajo se crean volúmenes lógicos RAID0 (stripped) usando 3 discos (­i 3) y RAID5 . # lvcreate -i 3 -L100M -n prueba_raid0 vg1
Using default stripesize 64,00 KiB
Rounding size (25 extents) up to stripe boundary size (27 extents)
Logical volume "prueba_raid0" created
# lvcreate --type raid5 -i 2 -L100M -n prueba_raid5 vg1
Using default stripesize 64,00 KiB
Rounding size (25 extents) up to stripe boundary size (26 extents)
Logical volume "prueba_raid5" created
Ejercicio: Averigua dónde se colocan los datos de los volúmenes prueba_raid_0 y prueba_raid_5. Los volúmenes RAID 6 requieren de la existencia de 5 volúmenes físicos. No obstante se colocan aquí los comandos correspondientes para su creación. # lvcreate --type raid6 -i 3 -L100M -n prueba_raid6 vg1
2.2. Disco Dinámico (Windows)
Se trata de otra implementación de un gestor de volúmenes lógicos y es la empleada por Microsoft. Esta funcionalidad se incluye desde Windows 2000. Esta implementación no se incluye en este manual pero puede ser consultada en los materiales ofrecidos por el Centro de profesores y recursos Juan de Lanuza (ver Bibliografía). 3. Raid por software
En Linux es posible crear arrays de disco mediante software. Para ello es necesario instalar las herramientas mdadm. # apt-get install mdadm
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
18
mdadm
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 566 kB de archivos.
Se utilizarán 1.098 kB de espacio de disco adicional después de esta operación.
Des:1 http://ftp.es.debian.org/debian/ wheezy/main mdadm i386 3.2.5-5 [566 kB]
Descargados 566 kB en 0seg. (1.514 kB/s)
Preconfigurando paquetes ...
Seleccionando el paquete mdadm previamente no seleccionado.
(Leyendo la base de datos ... 26535 ficheros o directorios instalados actualmente.)
Desempaquetando mdadm (de .../mdadm_3.2.5-5_i386.deb) ...
Procesando disparadores para man-db ...
Configurando mdadm (3.2.5-5) ...
Generating array device nodes... done.
Generating mdadm.conf... done.
update-initramfs: deferring update (trigger activated)
[ ok ....] Assembling MD arrays...done (no arrays found in config file or automatically).
[ ok ] Starting MD monitoring service: mdadm --monitor.
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
W: mdadm: no arrays defined in configuration file.
Durante el proceso de instalación pregunta sobre los arrays que se cargan al arrancar el ordenador. Dejar la configuración por defecto en el valor “all”. Todas las particiones empleadas en un raid por software creado con mdadm (y gestionados por el kernel) deben ser de tipo Raid Autodetect (0xfd). Se debe cambiar con cfdisk los tipos de partición implicadas a este tipo. La variable del kernel mdstat (/proc/mdstat) proporciona información sobre los niveles de raid soportados por el kernel. # cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
unused devices: <none>
La creación de dispositivos de se hace con el comando mdadm. Los siguientes ejemplos pretenden ser ilustrativos de cómo crear distintos tipos de RAID con mdadm (L, 0, 1 y 5). Además, se pueden definir discos de reserva (­­spare­devices n <list_devices>) . Se pueden observar los cambios en /proc/mdstat. # mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
19
Personalities : [raid1] [raid6] [raid5] [raid4] [linear]
md0 : active linear sdc1[1] sdb1[0]
2097073 blocks super 1.2 0k rounding
unused devices: <none>
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --remove /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear]
md0 : active linear sdc1[1] sdb1[0]
2097073 blocks super 1.2 0k rounding
unused devices: <none>
# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: chunk size defaults to 512K
mdadm: /dev/sdb1 appears to be part of a raid array:
level=linear devices=2 ctime=Mon Oct 6 14:37:41 2014
mdadm: /dev/sdc1 appears to be part of a raid array:
level=linear devices=2 ctime=Mon Oct 6 14:37:41 2014
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
md0 : active raid0 sdc1[1] sdb1[0]
2096128 blocks super 1.2 512k chunks
unused devices: <none>
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --remove /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
unused devices: <none>
# mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 /dev/sdc1
--spare-devices=1 /dev/sdd1
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid5 devices=2 ctime=Mon Oct 6 14:49:29 2014
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: /dev/sdc1 appears to be part of a raid array:
level=raid5 devices=2 ctime=Mon Oct 6 14:49:29 2014
mdadm: /dev/sdd1 appears to be part of a raid array:
level=raid5 devices=2 ctime=Mon Oct 6 14:49:29 2014
mdadm: size set to 1048000K
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
md0 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
1048000 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
20
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --remove /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
unused devices: <none>
# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
/sdb1 /dev/sdc1 /dev/sdd1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid5 devices=3 ctime=Mon Oct 6 14:57:48 2014
mdadm: /dev/sdc1 appears to be part of a raid array:
level=raid5 devices=3 ctime=Mon Oct 6 14:57:48 2014
mdadm: /dev/sdd1 appears to be part of a raid array:
level=raid5 devices=3 ctime=Mon Oct 6 14:57:48 2014
mdadm: size set to 1047552K
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=>...................] recovery = 6.1% (64316/1047552) finish=1.5min speed=10719K/sec
unused devices: <none>
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --remove /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [raid0]
unused devices: <none>
Una vez creada la configuración de arrays de disco, si se desea que esta persista tras apagar el ordenador, es necesario guardar la configuración en un fichero que se cargará al siguiente arranque del ordenador. No obstante las opciones ­­detail y ­­scan de mdadm permiten obtener las líneas de configuración necesarias para el fichero. A continuación es necesario actualizar los ficheros initrd. # update-initramfs -u
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
W: mdadm: no arrays defined in configuration file.
# mdadm --detail --scan --verbose > /etc/mdadm/mdadm.conf
# cat /etc/mdadm/mdadm.conf
ARRAY /dev/md0 level=raid5 num-devices=2 metadata=1.2 spares=1 name=debian:0
UUID=31c1516a:0babf049:fa94bda6:ba2790cf
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1
# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
21
4. Sistemas de ficheros
Un sistema de archivos es un método para el almacenamiento y organización de archivos y los datos que estos contienen, para hacer más fácil la tarea encontrarlos y acceder a su contenido. Los sistemas de archivos son usados en dispositivos de almacenamiento como discos duros y CD­ROM e involucran el mantenimiento de la localización física de los archivos. Más formalmente, un sistema de archivos es un conjunto de tipo de datos abstractos que son implementados para el almacenamiento, la organización jerárquica, la manipulación, el acceso, el direccionamiento y la recuperación de datos. Los sistemas de archivos comparten mucho en común con la tecnología de las bases de datos. En este apartado se estudian algunos sistemas de archivos empleados habitualmente en entorno GNU/Linux y se aprenden los comandos necesarios para su inicialización y manejo. 4.1. Operaciones habituales con sistemas de archivos
Crear un sistema de archivos (también llamado formatear) implica la creación e inicialización de ciertas estructuras de datos que se guardan en un dispositivo de bloques (partición/disco) y permiten la representación de los ficheros, directorios, permisos, y contenidos. Dado que existen muchos sistemas de ficheros distintos (ext3, ntfs, vfat…, etc), y que cada uno de ellos representa la información de distinta forma, es necesario contar diferentes herramientas para realizar el formateo. Como la opción de emplear múltiples herramientas resulta poco amigable para los usuarios se ha creado un wrapper que simplifica la creación de estos sistemas de ficheros. Este wrapper es mkfs y se ocupa de llamar a herramientas específicas de formateo como son mkfs.ext3, mkfs.msdos, mkfs.vfat, mkfs.xfs, … etc en función del valor del parámetro ­t (tipo de formato). Las herramientas de formato (por ejemplo mkfs.xfs) se deben instalar (típicamente el paquete se llama <nombre_fs>progs). # apt-get install dosfstools ntfsprogs xfs
xfs
xfslibs-dev
xfstt
xfsdump
xfsprogs
xfswitch-plugin
root@debian:~# apt-get install dosfstools ntfsprogs xfsprogs
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
fuse ntfs-3g
Paquetes sugeridos:
xfsdump acl attr quota
Se instalarán los siguientes paquetes NUEVOS:
dosfstools fuse ntfs-3g ntfsprogs xfsprogs
0 actualizados, 5 se instalarán, 0 para eliminar y 0 no actualizados.
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
22
Necesito descargar 2.390 kB de archivos.
Se utilizarán 5.467 kB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
Des:1 http://ftp.es.debian.org/debian/ wheezy/main fuse i386 2.9.0-2+deb7u1 [71,5 kB]
Des:2 http://ftp.es.debian.org/debian/ wheezy/main ntfs-3g i386 1:2012.1.15AR.5-2.1 [667 kB]
Des:3 http://ftp.es.debian.org/debian/ wheezy/main dosfstools i386 3.0.13-1 [70,0 kB]
Des:4 http://ftp.es.debian.org/debian/ wheezy/main ntfsprogs all 1:2012.1.15AR.5-2.1 [17,5 kB]
Des:5 http://ftp.es.debian.org/debian/ wheezy/main xfsprogs i386 3.1.7+b1 [1.564 kB]
Descargados 2.390 kB en 0seg. (3.023 kB/s)
Preconfigurando paquetes ...
Seleccionando el paquete fuse previamente no seleccionado.
(Leyendo la base de datos ... 26589 ficheros o directorios instalados actualmente.)
Desempaquetando fuse (de .../fuse_2.9.0-2+deb7u1_i386.deb) ...
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Procesando disparadores para man-db ...
Configurando fuse (2.9.0-2+deb7u1) ...
Creating fuse group...
Añadiendo el grupo `fuse' (GID 106) ...
Hecho.
udev active, skipping device node creation.
update-initramfs: deferring update (trigger activated)
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Seleccionando el paquete ntfs-3g previamente no seleccionado.
(Leyendo la base de datos ... 26604 ficheros o directorios instalados actualmente.)
Desempaquetando ntfs-3g (de .../ntfs-3g_1%3a2012.1.15AR.5-2.1_i386.deb) ...
Seleccionando el paquete dosfstools previamente no seleccionado.
Desempaquetando dosfstools (de .../dosfstools_3.0.13-1_i386.deb) ...
Seleccionando el paquete ntfsprogs previamente no seleccionado.
Desempaquetando ntfsprogs (de .../ntfsprogs_1%3a2012.1.15AR.5-2.1_all.deb) ...
Seleccionando el paquete xfsprogs previamente no seleccionado.
Desempaquetando xfsprogs (de .../xfsprogs_3.1.7+b1_i386.deb) ...
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Procesando disparadores para man-db ...
Configurando ntfs-3g (1:2012.1.15AR.5-2.1) ...
update-initramfs: deferring update (trigger activated)
Configurando dosfstools (3.0.13-1) ...
Configurando xfsprogs (3.1.7+b1) ...
Procesando disparadores para initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Configurando ntfsprogs (1:2012.1.15AR.5-2.1) ...
# mkfs -t ntfs /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
Initializing device with zeroes: 100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
# mkfs -t ext3 /dev/sdc1
mke2fs 1.42.5 (29-Jul-2012)
Etiqueta del sistema de ficheros=
OS type: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262143 blocks
13107 blocks (5.00%) reserved for the super user
Primer bloque de datos=0
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
23
Número máximo de bloques del sistema de ficheros=268435456
8 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
32768, 98304, 163840, 229376
Allocating group tables: hecho
Escribiendo las tablas de nodos-i: hecho
Creating journal (4096 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho
# mkfs -t xfs /dev/sdd1
meta-data=/dev/sdd1
=
data
=
=
naming =version 2
log
=internal log
=
realtime =none
isize=256
sectsz=512
bsize=4096
sunit=0
bsize=4096
bsize=4096
sectsz=512
extsz=4096
agcount=4, agsize=65536 blks
attr=2, projid32bit=0
blocks=262143, imaxpct=25
swidth=0 blks
ascii-ci=0
blocks=1200, version=2
sunit=0 blks, lazy-count=1
blocks=0, rtextents=0
Algunos sistemas de ficheros permiten la utilización de parámetros concretos (como el tamaño de bloque en ext3) que se especifican directamente sobre la herramienta mkfs y esta añade los parámetros específicos a la herramienta concreta de formateo (­b 1024). Una vez que un sistema de ficheros se construye, es necesario hacerlo disponible a partir de un determinado directorio en el árbol global de directorios de Linux. Esta operación se conoce informalmente como montar el disco. Nuevamente, y con el mismo objetivo de la creación del wrapper mkfs, se creó el wrapper mount que permite manejar distintas utilidades de montado (mount.ntfs, mount.nfs, etc) en función de los resultados de la autodetección del sistema de ficheros del dispositivo a montar o de lo especificado por el usuario con la opción ­t. Para montar un sistema de ficheros únicamente es necesario especificar a mount el dispositivo de bloques que lo contiene y la carpeta a partir de la que se hará disponible el sistema de ficheros. # mount /dev/sdb1 /mnt
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=62963,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51440k,mode=755)
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 on / type ext4
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102860k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sdb1 on /mnt type fuseblk
(rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
24
# umount /dev/sdb1
# mount /dev/sdc1 /mnt
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=62963,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51440k,mode=755)
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 on / type ext4
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102860k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sdc1 on /mnt type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
# umount /mnt
# mount /dev/sdd1 /mnt
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=62963,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51440k,mode=755)
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 on / type ext4
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102860k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sdd1 on /mnt type xfs (rw,relatime,attr2,delaylog,noquota)
Finalmente, comentar la importancia de la herramienta df que permite conocer en cada momento la cantidad de disco libre y usado de todas los sistemas de ficheros montados. Resulta especialmente útil la opción ­h (human readable) que realiza la medición usando KB, MB, GB, etc. # df -h
S.ficheros
Tamaño Usados
rootfs
1006M 672M
udev
10M
0
tmpfs
51M 264K
/dev/disk/by-uuid/5c27f42c-e65b-455c-8ba6-992e0bad2236 1006M 672M
tmpfs
5,0M
0
tmpfs
101M
0
/dev/sdd1
1020M
33M
Disp Uso% Montado en
284M 71% /
10M 0% /dev
50M 1% /run
284M 71% /
5,0M 0% /run/lock
101M 0% /run/shm
988M 4% /mnt
4.2. El sistema de ficheros EXT3
El sistema de ficheros ext3 es una mejora del antiguo sistema de ficheros EXT2 y precursor del sistema de ficheros ext4. Como novedad de este sistema de ficheros cabe comentar que este Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
25
sistema de ficheros cuenta con un sistema de journaling que permite la restauracion del sistema de ficheros hasta recuperar el último estado conocido. Los sistemas de ficheros ext se basan típicamente en el concepto de inodo que se describe en el apartado 2.1. 4.2.1. El Inodo
Un inodo es una estructura de datos de 128 bytes asociada a cada fichero/directorio que tiene un esquema similar al presentado en la siguiente figura. Como se puede comprobar, el inodo permite almacenar metainformación del fichero incluyendo tiempo de acceso, creación y modificación, usuario y grupo al que pertenece y tamaño. A mayores de estos atributos, también se almacenan otros que no se representan en la figura por cuestiones de espacio (como el número de links, etc) y que se pueden ver en la siguiente extracto del fichero de cabecera linux/include/linux/ext3_fs.h: /*
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
26
* Constants relative to the data blocks
*/
#defineEXT3_NDIR_BLOCKS
12
#defineEXT3_IND_BLOCK
EXT3_NDIR_BLOCKS
#defineEXT3_DIND_BLOCK
(EXT3_IND_BLOCK + 1)
#defineEXT3_TIND_BLOCK
(EXT3_DIND_BLOCK + 1)
#defineEXT3_N_BLOCKS
(EXT3_TIND_BLOCK + 1)
…
/*
* Structure of an inode on the disk
*/
struct ext3_inode {
__u16 i_mode;
/* File mode */
__u16 i_uid;
/* Low 16 bits of Owner Uid */
__u32 i_size;
/* Size in bytes */
__u32 i_atime;
/* Access time */
__u32 i_ctime;
/* Creation time */
__u32 i_mtime;
/* Modification time */
__u32 i_dtime;
/* Deletion Time */
__u16 i_gid;
/* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks;
/* Blocks count */
__u32 i_flags;
/* File flags */
union {
struct {
__u32 l_i_reserved1;
} linux1;
struct {
__u32 h_i_translator;
} hurd1;
struct {
__u32 m_i_reserved1;
} masix1;
} osd1;
/* OS dependent 1 */
__u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */
__u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl;
/* File ACL */
__u32 i_dir_acl;
/* Directory ACL */
__u32 i_faddr;
/* Fragment address */
union {
struct {
__u8
l_i_frag;
/* Fragment number */
__u8
l_i_fsize;
/* Fragment size */
__u16 i_pad1;
__u16 l_i_uid_high; /* these 2 fields
*/
__u16 l_i_gid_high; /* were reserved2[0] */
__u32 l_i_reserved2;
} linux2;
struct {
__u8
h_i_frag;
/* Fragment number */
__u8
h_i_fsize;
/* Fragment size */
__u16 h_i_mode_high;
__u16 h_i_uid_high;
__u16 h_i_gid_high;
__u32 h_i_author;
} hurd2;
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
27
struct {
__u8
__u8
__u16
__u32
} masix2;
m_i_frag;
/* Fragment number */
m_i_fsize;
/* Fragment size */
m_pad1;
m_i_reserved2[2];
} osd2;
/* OS dependent 2 */
};
Como se puede ver en el código fuente mostrado, además de los atributos se permite direccionar 15 bloques (campo i_block). Cada bloque de datos tiene un tamaño de 4096 bytes por defecto (se puede configurar). Los primeros 12 elementos del array i_block (EXT3_NDIR_BLOCKS) son punteros a bloques de datos son directamente accesibles. El elemento 13 de i_block (EXT3_IND_BLOCK) es un puntero de acceso indirecto de primer nivel que apunta a un bloque que contiene a su vez punteros a los siguientes bloques del contenido del fichero. El elemento 14 de i_block (EXT3_DIND_BLOCK) es un puntero un un bloque de acceso indirecto de segundo nivel que contiene apunta a un bloque punteros a otros bloques que a su vez tienen punteros a otros bloques que contienen contenido del fichero. Por último, el elemento 15 de i_block (EXT3_TIND_BLOCK) permite el acceso con indirección de tercer nivel (un nivel más de indirección). Para entender este concepto de indirección, se incluye la siguiente figura: Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
28
Como se puede ver, el sistema de ficheros ext3 no permite usar ficheros de más de 4GB de datos, limitación que parece no ser acorde a las necesidades actuales pero sí a las necesidades del momento de mayor auge de este sistema de ficheros (ext3 fue ideado en el año 2001). Ejercicio: Véase la siguiente ejecución de comandos e intenta explicar que se está consultando en cada comando. # cat spam.eng_.labels_0.txt | wc -c
199314
# ls -l spam.eng_.labels_0.txt
-rw-r--r-- 1 moncho moncho 199314 sep 30 07:14 spam.eng_.labels_0.txt
# du -b spam.eng_.labels_0.txt
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
29
199314 spam.eng_.labels_0.txt
# ls -lh spam.eng_.labels_0.txt
-rw-r--r-- 1 moncho moncho 195K sep 30 07:14 spam.eng_.labels_0.txt
# du --apparent-size spam.eng_.labels_0.txt
195
spam.eng_.labels_0.txt
# du -h spam.eng_.labels_0.txt
196K
spam.eng_.labels_0.txt
La siguiente tabla muestra los valores de tamaños máximos y ocupación mínima de ficheros en función del tamaño del bloque (nótese que el tamaño mínimo no es el del fichero sino el de la utilización de disco): Tamaño de bloque Ocupación mínima por un fichero Tamaño máximo del Tamaño máximo fichero sistema de archivos almacenable 1024 (1 KB) 1024 16 GB 2 TB 2048 (2KB) 2048 256 GB 8 TB 4096 (4KB) 4092 2 TB 16 TB 8192 (8KB sólo en Alpha) 8192 2 TB 32 TB Dado que el tamaño del bloque influye directamente en la cantidad de espacio desperdiciado, se debe seleccionar un tamaño de bloque acorde al uso que se le va a otorgar al sistema de ficheros. Si se prevé trabajar con muchos enlaces simbólicos o con muchos ficheros que no alcanzan 1 KB de tamaño es conveniente ajustar el tamaño de bloque. 4.2.2. Estructura del sistema de ficheros ext3
Un sistema de ficheros ext3 organiza el espacio del disco según la figura que se muestra abajo: Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
30
El superbloque ocupa 1024 bytes y se sitúa con un desplazamiento de 1024 bytes respecto del inicio de partición ó disco. En el superbloque se guarda meta­información sobre el sistema de ficheros ext3 incluyendo el tamaño total, número de bloques, número de inodos, tamaño de cada bloque, tamaño de cada grupo de bloques, etc. Los bloques en ext3 son por defecto de 4K (4096 bytes). Por cuestiones de rendimiento, los bloques se agrupan en grupos de bloques. Un grupo de bloques puede estar compuesto por mile de bloques aunque en el superbloque se guarda información sobre el número de bloques que se incluirán en cada grupo de bloques (Number of blocks per group). A continuación se muestra cómo emplear la herramienta ext3grep para obtener información del superbloque. Sobre el listado de comandos y la salida se ha resaltado en azul la información sobre el número de bloques por grupo que tiene este sistema de ficheros así como el tamaño de bloque). # apt-get install ext3grep
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
ext3grep
0 actualizados, 1 se instalarán, 0 para eliminar y 57 no actualizados.
Necesito descargar 116 kB de archivos.
Se utilizarán 303 kB de espacio de disco adicional después de esta operación.
Des:1 http://ftp.es.debian.org/debian/ squeeze/main ext3grep i386 0.10.1-3+b1 [116 kB]
Descargados 116 kB en 0seg. (587 kB/s)
Seleccionando el paquete ext3grep previamente no seleccionado.
(Leyendo la base de datos ... 82433 ficheros o directorios instalados actualmente.)
Desempaquetando ext3grep (de .../ext3grep_0.10.1-3+b1_i386.deb) ...
Procesando disparadores para man-db ...
Configurando ext3grep (0.10.1-3+b1) ...
# ext3grep /dev/xvda1 --superblock
Running ext3grep version 0.10.1
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
31
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set. This either means that your partition is still
mounted, and/or the file system is in an unclean state.
Inodes count: 524288
Blocks count: 1048233
Reserved blocks count: 52411
Free blocks count: 648329
Free inodes count: 504219
First Data Block: 0
Block size: 4096
Fragment size: 4096
Number of blocks per group: 32768
Number of fragments per group: 32768
Number of inodes per group: 16384
Mount time: Thu Jun 6 15:45:32 2013
Write time: Thu Jun 6 15:45:32 2013
Mount count: 14
Maximal mount count: 30
Magic signature: 0xef53
File system state: 'Unmounted cleanly'
Size of inode structure: 128
Block group # of this superblock: 0
compatible feature set: HAS_JOURNAL RESIZE_INODE DIR_INDEX
incompatible feature set: FILETYPE RECOVER
readonly-compatible feature set: SPARSE_SUPER LARGE_FILE
Per group desc for online growth: 255
UUID of journal superblock: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00
Inode number of journal file: 8
Device number of journal file: 0
Start of list of inodes to delete: 442376
First metablock block group: 0
Number of groups: 32
Group 0: block bitmap at 257, inodes bitmap at 258, inode table at 259
15402 free blocks, 16357 free inodes, 2 used directory
Group 1: block bitmap at 33025, inodes bitmap at 33026, inode table at 33027
30901 free blocks, 16274 free inodes, 1 used directory
Group 2: block bitmap at 65536, inodes bitmap at 65537, inode table at 65538
31591 free blocks, 16365 free inodes, 1 used directory
Group 3: block bitmap at 98561, inodes bitmap at 98562, inode table at 98563
31135 free blocks, 16264 free inodes, 0 used directory
Group 4: block bitmap at 131072, inodes bitmap at 131073, inode table at 131074
31070 free blocks, 16374 free inodes, 0 used directory
Group 5: block bitmap at 164097, inodes bitmap at 164098, inode table at 164099
29788 free blocks, 16247 free inodes, 11 used directory
Group 6: block bitmap at 196608, inodes bitmap at 196609, inode table at 196610
30292 free blocks, 16374 free inodes, 0 used directory
Group 7: block bitmap at 229633, inodes bitmap at 229634, inode table at 229635
29894 free blocks, 16362 free inodes, 5 used directory
Group 8: block bitmap at 262144, inodes bitmap at 262145, inode table at 262146
32149 free blocks, 16379 free inodes, 1 used directory
Group 9: block bitmap at 295169, inodes bitmap at 295170, inode table at 295171
31612 free blocks, 16368 free inodes, 1 used directory
Group 10: block bitmap at 327680, inodes bitmap at 327681, inode table at 327682
30619 free blocks, 16370 free inodes, 1 used directory
Group 11: block bitmap at 360448, inodes bitmap at 360449, inode table at 360450
8980 free blocks, 13086 free inodes, 103 used directory
Group 12: block bitmap at 393216, inodes bitmap at 393217, inode table at 393218
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
32
17722 free blocks, 14833 free inodes, 136 used directory
Group 13: block bitmap at 425984, inodes bitmap at 425985, inode table at 425986
7484 free blocks, 16199 free inodes, 42 used directory
Group 14: block bitmap at 458752, inodes bitmap at 458753, inode table at 458754
25389 free blocks, 15677 free inodes, 75 used directory
Group 15: block bitmap at 491520, inodes bitmap at 491521, inode table at 491522
20804 free blocks, 16004 free inodes, 3 used directory
Group 16: block bitmap at 524288, inodes bitmap at 524289, inode table at 524290
8576 free blocks, 14618 free inodes, 122 used directory
Group 17: block bitmap at 557056, inodes bitmap at 557057, inode table at 557058
22504 free blocks, 15939 free inodes, 9 used directory
Group 18: block bitmap at 589824, inodes bitmap at 589825, inode table at 589826
17479 free blocks, 11824 free inodes, 736 used directory
Group 19: block bitmap at 622592, inodes bitmap at 622593, inode table at 622594
17382 free blocks, 11381 free inodes, 758 used directory
Group 20: block bitmap at 655360, inodes bitmap at 655361, inode table at 655362
4089 free blocks, 15935 free inodes, 58 used directory
Group 21: block bitmap at 688128, inodes bitmap at 688129, inode table at 688130
17778 free blocks, 13728 free inodes, 83 used directory
Group 22: block bitmap at 720896, inodes bitmap at 720897, inode table at 720898
17618 free blocks, 10264 free inodes, 628 used directory
Group 23: block bitmap at 753664, inodes bitmap at 753665, inode table at 753666
27915 free blocks, 15029 free inodes, 37 used directory
Group 24: block bitmap at 786432, inodes bitmap at 786433, inode table at 786434
30954 free blocks, 16294 free inodes, 14 used directory
Group 25: block bitmap at 819457, inodes bitmap at 819458, inode table at 819459
26999 free blocks, 16068 free inodes, 4 used directory
Group 26: block bitmap at 851968, inodes bitmap at 851969, inode table at 851970
30820 free blocks, 16242 free inodes, 4 used directory
Group 27: block bitmap at 884993, inodes bitmap at 884994, inode table at 884995
27968 free blocks, 16341 free inodes, 10 used directory
Group 28: block bitmap at 917504, inodes bitmap at 917505, inode table at 917506
32176 free blocks, 16377 free inodes, 1 used directory
Group 29: block bitmap at 950272, inodes bitmap at 950273, inode table at 950274
32001 free blocks, 16374 free inodes, 1 used directory
Group 30: block bitmap at 983040, inodes bitmap at 983041, inode table at 983042
31850 free blocks, 16377 free inodes, 1 used directory
Group 31: block bitmap at 1015808, inodes bitmap at 1015809, inode table at 1015810
30664 free blocks, 16297 free inodes, 0 used directory
Minimum / maximum journal block: 777 / 17179
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 9244189 = Fri Apr 17 23:49:49
1970
Number of descriptors in journal: 12734; min / max sequence numbers: 487502394 / 487516634
No action was specified. For example, specify one of:
--inode ino
Show info on inode 'ino'; inode 2 is the root.
--block blk [--ls]
Show info on block 'blk'.
--histogram=dtime --after=1000000000 --before=1400000000
Show deletion-time histogram (zoom in afterwards).
--help
Show all possible command line options.
Del campo de los descriptores de grupo contiene punteros a los campos de cada grupo de bloques (puntero al bitmap de bloque, puntero al bitmap de inodos, puntero al primer inodo de la Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
33
tabla de inodos) e información del estado de cada grupo (bloques libres, inodos libres, etc). En la figura anterior se ha resaltado en rojo la información proporcionada por la herramienta ext3grep de este campo. La siguiente figura muestra la estructura básica del campo de los descriptores de grupo. Cada grupo de bloques puede comenzar con una copia de respaldo de la información contenida en el superbloque a modo de copia de seguridad. Durante el proceso de formateado se pueden ver entre qué grupos de bloques se encuentran las copias de seguridad del superbloque. Esta misma información se puede consultar con la herramienta dumpe2fs cuyo funcionamiento es similar a ext3grep pero que proporciona mayor cantidad de información. # dumpe2fs /dev/xvda1 | grep -i superbloque
dumpe2fs 1.41.12 (17-May-2010)
Primario superbloque en 0, descriptores de grupo en 1-1
Respaldo superbloque en 32768, descriptores de grupo en 32769-32769
Respaldo superbloque en 98304, descriptores de grupo en 98305-98305
Respaldo superbloque en 163840, descriptores de grupo en 163841-163841
Respaldo superbloque en 229376, descriptores de grupo en 229377-229377
Respaldo superbloque en 294912, descriptores de grupo en 294913-294913
Respaldo superbloque en 819200, descriptores de grupo en 819201-819201
Respaldo superbloque en 884736, descriptores de grupo en 884737-884737
Dentro de cada grupo de bloques, el bitmap de bloques contiene bits a 0 ó a 1 indicando para cada uno de los bloques si está asignado a un fichero ó se puede emplear. El bitmap de inodes Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
34
hace lo mismo que el bitmap de bloques pero para inodos. La información de inodos libres y bloques libres se puede consultar con las utilidades ext3grep y dump2fs. Ejercicio: ¿Cuánto ocupa Block Bitmap de cada grupo? ¿Cuanto ocupa el Inode Bitmap de cada grupo? Una vez colocados los bitmaps de bloques y lo bitmaps de inodos, se dispone la información del grupo de bloques. En primer lugar se colocan la información de los inodos (cada inodo con sus 128 bytes). Y una vez colocados todos los inodos se colocan los bloques de datos (cada bloque de datos con 4096 bytes). Existe una relación de tamaño de 32(por defecto) entre el tamaño de bloque y el tamaño del inodo (4096/128=32). Además, el número de inodos por cada grupo de bloques se hace coincidir con un múltiplo de 32. Debido a esta relación en muchos trabajos se habla de que no existe el concepto tabla de inodos sinó que los inodos se colocan en los primeros bloques de datos (number of inodes per group/32) y se habla sólo de bloques de datos. Considerando el ejemplo de la salida del comando ext3grep en donde el número de inodos por grupo es de 16384, se emplearían los primeros 512 bloques de datos para guardar los inodes y, a continuación se colocarán 32768 bloques de datos más. El total de bloques de datos sería de 33280 y se consumiría un espacio de 130 MB. 4.2.3. El Journal
Un sistema con journaling es un sistema de ficheros tolerante a fallos en el cual la integridad de los datos está asegurada porque las modificaciones de la meta­información de los ficheros son primero grabadas en un registro cronológico (log o journal, que simplemente es una lista de transacciones) antes que los bloques originales sean modificados. En el caso de un fallo del sistema, un sistema con journaling asegura la recuperación de consistencia del sistema de ficheros. El método más común es el de grabar previamente cualquier modificación de la meta­información en un área especial del disco de modo que, el sistema realmente grabará los datos una vez que la actualización de los registros haya sido completada. A la hora de recuperar la consistencia después de un fallo, el módulo de recuperación analizará el registro y sólo repetirá las operaciones incompletas en aquellos ficheros inconsistentes, es decir que la operación registrada no se haya llevado a cabo finalmente, con lo que se recuperará la consistencia del sistema de ficheros casi al instante, ya que en vez de examinar todos los meta­ datos (como hace el "fsck"), sólo se inspeccionan aquellas porciones de los meta­datos que han sido cambiadas recientemente. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
35
Los sistemas ext3 y ext2 son iguales excepto por una pequeña diferencia: ext3 incorpora el concepto de journal o diario de transacciones. Esto permite que el sistema de ficheros pueda recuperar el último estado conocido válido tras un fallos súbito. En ext3 el journal se almacena como un superbloque. Ejercicio: Crea un sistema de ficheros ext3 añade contenido y móntalo especificando la opción ­t ext2. Haz un ls ­la en el directorio de montaje. Revisa los ficheros ¿Que ocurre? Con ext3, el código de las transacciones utiliza un API especial denominado la capa del dispositivo de bloques (Journaling Block Device layer), o JBD. JBD ha sido diseñado con el propósito expreso de implementar un diario de transacciones en cualquier dispositivo de bloque. Ext3 implementa sus transacciones "atrapándolas" con el API JBD. Por ejemplo, el código del sistema de ficheros ext3 informará a JBD de las modificaciones que está realizando, y también solicitará permiso al JBD antes de modificar ciertos datos en el disco. Haciendo ésto, se le proporcionan las oportunidades adecuadas para manejar el diario de transacciones a cargo del controlador del sistema de ficheros ext3 a JBD. Es una buena solución y, dado que JBD está siendo desarrollado como una entidad separada, genérica, puede ser añadido para sumar la capacidad del diario de transacciones a otros sistemas de ficheros en el futuro. El diario de transacciones de ext3 se almacena en un inodo (como si de un archivo se tratase). Por supuesto, almacenando el diario de transacciones en un inodo, ext3 es capaz de añadir el diario de transacciones al sistema de ficheros sin requerir extensiones innecesarias a los metadatos de ext2. Ésta es una de las claves por las que el sistema de ficheros ext3 mantiene su compatibilidad con los metadatos de ext2, y además, con el controlador del sistema de ficheros ext2. Cabe la posibilidad de emplear distintos esquemas para implementar un diario de transacciones. Por ejemplo, un desarrollador de un sistema de ficheros podría optar por desarrollar un diario de transacciones almacene exactamente los bytes que deben ser modificados en el sistema de ficheros anfitrión. La ventaja de este remedio es el diario de transacciones será capaz de almacenar muchas pequeñas modificaciones al sistema de ficheros de forma muy eficiente, dado que únicamente necesitará almacenar los bytes individuales que deben ser modificados y nada más. JBD usa otro esquema que resulta en ciertos aspectos, mejor. En lugar de almacenar gran cantidad de pequeñas transacciones (bytes que necesitan ser modificados), JBD almacena los bloques completos de datos modificados en sí mismos. El controlador del sistema de ficheros también utiliza este remedio y almacena réplicas completas de los bloques modificados (tanto de 1K, 2K o 4K) en la memoria para controlar las operaciones IO (entrada/salida) pendientes. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
36
En principio, ésto puede parecer una pérdida de recursos completamente innecesaria. Después de todo, los bloques completos contienen datos modificados pero además pueden contener datos sin modificar (ya presentes en el disco) también. El remedio que JBD usa se denomina diario de transacciones físico, lo que significa que JBD utiliza bloques físicos completos para implementar su diario de transacciones. Por contra, el remedio consistente en almacenar montones de bytes modificados en lugar de bloques completos se denomina diario de transacciones lógico, y es el remedio que utiliza XFS. Dado que ext3 utiliza el diario de transacciones físico, un diario de transacciones ext3 dejará, relativamente, una mayor huella en el disco que, digamos, el diario de transacciones de un sistema de ficheros XFS. Pero dado que ext3 usa bloques completos internamente y en su diario de transacciones, ext3 no se enfrenta a toda la complejidad que tendría que abordarse con la implementación de un diario de transacciones lógico. Además, el uso de bloques completos permite a ext3 realizar algunas optimizaciones adicionales, tales como "tomar huella" de múltiples operaciones pendientes IO (entrada/salida) dentro de un solo bloque en la misma estructura de la memoria. Ésto, además, permite a ext3 escribir todos esos cambios en el disco en una sola operación de escritura, en lugar de en muchas. Añadiendo a esto que los datos literales de los bloques son almacenados en la memoria, apenas se requiere ninguna modificación en la memoria antes de escribirlos al disco, reduciendo mucho la sobrecarga en la CPU. 4.3. Reiser FS
En esencia, el sistema de ficheros ReiserFS en un sistema Journaling que trata a toda la partición del disco como si fuera una única tabla de una base de datos. Los directorios, ficheros y metadatos se organizan en una eficiente estructura de datos (el árbol balanceado). Esto difiere bastante de la manera tradicional de trabajar de otros sistemas de ficheros, pero ofrece grandes mejoras de velocidad en muchas aplicaciones, especialmente aquellas que utilizan gran cantidad de ficheros pequeños. Leer y escribir en ficheros grandes, como películas en AVI, normalmente está limitado por la velocidad del hardware implicado o por el canal de entrada / salida. Win embargo, los accesos a pequeños ficheros como los scripts de la shell estan normalmente limitados por la eficiencia del sistema de ficheros. Esto es debido a que la apertura de un fichero requiere que primero el sistema localice el fichero, lo que implica la lectura del directorio en el que se encuentra. Después, el sistema necesita examinar los metadatos para saber si el usuario tiene los permisos de accesos necesarios, lo conlleva una serie de lecturas adicionales del disco. En definitiva, el sistema pierde más tiempo decidiendo si permite el acceso al fichero que el tiempo que finalmente se tarda en obtener la información del mismo. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
37
ReiserFS utiliza los árboles balanceados (Árboles B*) para racionalizar el proceso de la localización de los ficheros y la obtención de la información de los metadatos (y otro tipo de información adicional). Para ficheros extremadamente pequeños, toda la información del fichero puede físicamente almacenarse cerca de los metadatos, de manera que ambos pueden ser accedidos simultáneamente con un poco o nada de movimiento en el mecanismo de búsqueda del disco. Si una aplicación necesita abrir ficheros muy pequeños rápidamente, este planteamiento mejora el rendimiento significativamente. Los nodos hojas (leaf nodes), almacenan los datos en sí, y no tienen hijos. Los nodos que contienen información se dice que están formateados. Solo los nodos hoja pueden estar no formateados. Los punteros se almacenan en nodos formateados por lo que los nodos intermedios (internal nodes) necesariamente tienen que estar formateados. El nodo raíz es de donde nace el árbol. Otra característica de ReiserFS es que los árboles balanceados no solo almacenan metadatos, si que también almacenan los datos en sí. En un sistema de ficheros tradicional como el ext2, el espacio en disco se reparte en bloques de tamaño desde 512 bytes a 4096 bytes. Si el tamaño de un fichero no es múltiplo del tamaño de bloque habrá cierto espacio que se desperdiciara (fragmentación interna). Por ejemplo, supongamos un tamaño de bloque de 1024 bytes y un espacio requerido de 8195 bytes. 8192 bytes estarán almacenados en 8 bloques (8 x 1024), y los restantes 3 bytes se tendrán que ubicar en un bloque de 1024, desperdiciándose de esta manera, 1021 bytes. De los 9 bloques que se han tenido que asignar casi uno por completo se desperdicia, lo que representa un 11% del total solicitado (1 byte / 9 bytes). Ahora imaginemos un fichero de 1025 bytes. Casi cabe por completo en un solo bloque, pero requiere dos. El espacio desperdiciado es del 50% (1/2). El peor de los casos se da con ficheros muy pequeños, como un script muy trivial de una sola línea. Este fichero podría ser de unos 50 bytes, teniendo que ocupar un bloque completo. Si como hemos dicho, el tamaño de bloque es de 1024 bytes, el espacio desperdiciado será de un 95 % del espacio asignado. Como se puede ver, el espacio desperdiciado (en porcentaje) es menor cuanto mayor es el tamaño del fichero. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
38
ReiserFS no utiliza el enfoque clásico de bloques a la hora dividir el espacio de disco, en vez de eso se apoya en la estructura arbórea para mantener un seguimiento de los bytes asignados. En ficheros pequeños, esto puede ahorrar como ya hemos dicho mucho espacio de almacenamiento. Es más, debido a que los ficheros tienden a colocarse cercanos unos de otros, el sistema es capaz de abrir y leer muchos ficheros pequeños con un único acceso físico al disco. Esto conlleva un ahorro de tiempo al disminuir el tiempo de búsqueda de la cabeza lectora del disco. Algunas aplicaciones se benefician más que otras de este tipo de optimización. Imagínate un directorio con cientos de pequeños ficheros PNG o GIF que son utilizados como iconos en una página Web muy visitada. Esta situación está hecha a la medida del sistema de ficheros ReiserFS. Así como una página Web con miles de ficheros HTML, cada uno de unos poco kilobytes de tamaño, es un excelente candidato. Por otro lado, una partición de disco que almacena imágenes ISO9660 de CDROM, cada una de cientos de megabytes, vera poca mejora en su rendimiento con el ReiserFS. Como con otras muchas cosas en el mundo de la informática, el mejor rendimiento se obtiene a través de la selección de la herramienta que más se ajuste a las necesidades específicas del problema a resolver. (Nota: esto no significa que ReiserFS sea más lento que Ext2 a la hora de gestionar ficheros de gran tamaño, solo que no se notara mucha diferencia de rendimiento en esos casos.) Para almacenar grandes ficheros, ReiserFS versión 3 utiliza el método BLOB (Binary Large OBject) que desbalanceaba el árbol reduciendo así el rendimiento. En este método se almacenan (en los nodos hoja formateados) punteros a nodos que contienen el fichero en su conjunto (como muestra la imagen). De manera que desbalancea al árbol. Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
39
En la versión 4 de ReiserFS se intenta solucionar este problema haciendo que todos los punteros a ficheros se almacenan en el mismo nivel. Los nodos Twig, son los padres de los nodos hojas. Los nodos Branch son nodos internos que no son Twig. En ReiserFS, los nodos Twig no solo apuntan a nodos hoja, sino que también apuntan a nodos Extendidos (Extended nodes). De esta manera se mantiene al árbol balanceado, almacenando los ficheros pequeños en nodos hoja y los grandes en nodos a través de punteros extendidos. Otra característica destacable del ReiserFS es la utilización de Plugins, lo que permite la adaptación del sistema de ficheros a nuevas características sin la necesidad de formateo. Los Plugins trabajan de forma independiente sobre el núcleo del sistema de ficheros. Todas las operaciones se implementan en Plugins, por lo que permite que se modifique la funcionalidad del sistema de ficheros (añadiendo o eliminando Plugins existentes) sin necesidad de modificar el núcleo. 5. Otras utilidades interesantes del disco
Una cosa importante para la garantía de los discos es poder obtener el modelo ó el números de serie de un disco sin necesidad de desmontar el disco. Esta información se puede obtener con el comando hdparm (que habrá que instalar en algunos sistemas como Debian Squeeze) # apt-get install hdparm
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
powermgmt-base
Paquetes sugeridos:
apmd
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
40
Se instalarán los siguientes paquetes NUEVOS:
hdparm powermgmt-base
0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 125 kB de archivos.
Se utilizarán 383 kB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
Des:1 http://ftp.es.debian.org/debian/ wheezy/main hdparm i386 9.39-1+b1 [113 kB]
Des:2 http://ftp.es.debian.org/debian/ wheezy/main powermgmt-base i386 1.31 [11,7 kB]
Descargados 125 kB en 0seg. (464 kB/s)
Seleccionando el paquete hdparm previamente no seleccionado.
(Leyendo la base de datos ... 26759 ficheros o directorios instalados actualmente.)
Desempaquetando hdparm (de .../hdparm_9.39-1+b1_i386.deb) ...
Seleccionando el paquete powermgmt-base previamente no seleccionado.
Desempaquetando powermgmt-base (de .../powermgmt-base_1.31_i386.deb) ...
Procesando disparadores para man-db ...
Configurando hdparm (9.39-1+b1) ...
Configurando powermgmt-base (1.31) ...
# hdparm -i /dev/sda
/dev/sda:
Model=ST250LT012-9WS141, FwRev=0001SDM1, SerialNo=W0V9TWGF
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=488397168
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-4,5,6,7
* signifies the current active mode
Otra utilidad interesante es la posibilidad de copiar discos bit a bit con el comando dd (incluído en el sistema). A mayores, dd permite ver la velocidad de copia entre los dispositivos lo cual puede permitir evaluar la rapidez de copia. # dd if=/dev/sdb of=/dev/sdc
2097152+0 registros leídos
2097152+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 76,1723 s, 14,1 MB/s
Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
41
Bibliografía
DiarioLinux.com (2010). Disección del sistema de archivos ext3. Available at http://diariolinux.com/2010/09/11/diseccion­del­sistema­de­archivos­ext3/ [Last Access: 16/09/2014] Gentoo Linux (2005). Guia Avanzada de Implementacion de Sistemas de Ficheros. Available at https://www.gentoo.org/doc/es/articles/afig­ct­ext3­intro.xml [Last Access: 1/09/2014] Ignacio Solinis Cmalich y Emilio González Diaz (2014). Implementacion del sistema de ficheros: Superbloque. Available at http://sopa.dis.ulpgc.es/ii­dso/leclinux/fs/superbloque/superbloque.doc [Last Access: 1/10/2014] Linux Para Todos (2014). Volumenes Logicos (LVM). Available at http://www.linuxparatodos.net/web/comunidad/base­de­conocimiento/­/wiki/Base+de+Conocimi
ento/Volumenes+Lógicos+(LVM) [Last Access: 2/10/2014] Centro de profesores y recursos Juan de Lanuza (2014). Configuración de un servidor de archivos. Available at http://cprzara2.educa.aragon.es/ficheros/recursosxp/Otras%20tareas%20administrativas/2.­%2
0Configuracion%20de%20un%20servidor%20de%20archivos.pdf [Last Access: 3/10/2014] Administración Avanzada de Sistemas
José Ramón Méndez Reboredo
David Ruano Ordás
42
Descargar