Diferencia entre revisiones de «Sistemas de archivos»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Paso 6.1: Instalación y configuración del servidor de NFS)
(Paso 8.3: Gestionar el almacenamiento)
 
(No se muestran 97 ediciones intermedias de 3 usuarios)
Línea 1: Línea 1:
 
= Paso 1: Añadir un disco a la máquina virtual =
 
= Paso 1: Añadir un disco a la máquina virtual =
  
Vamos a usar cualquier máquina virtual de ubuntu cloud que hayamos usado
+
Vamos a usar cualquier máquina virtual de debian cloud que hayamos usado
 
previamente y vamos a añadir dos discos virtuales para hacer pruebas.
 
previamente y vamos a añadir dos discos virtuales para hacer pruebas.
  
Línea 9: Línea 9:
 
# Repetir el paso anterior y crear otro disco de 4GB
 
# Repetir el paso anterior y crear otro disco de 4GB
  
= Paso 2: Ver discos en Linux =
+
Para crear un nuevo disco virtual desde el intérprete de órdenes:
 +
 
 +
<syntaxhighlight lang="bash">
 +
qemu-img create -f qcow2 mi-disco.img 20G
 +
</syntaxhighlight>
 +
 
 +
Para adjuntar este disco a una máquina virtual existente:
 +
 
 +
<syntaxhighlight lang="bash">
 +
virsh attach-disk mi-mv /home/usuario/mi-disco.img vdb --cache none --subdriver qcow2 --config
 +
</syntaxhighlight>
 +
 
 +
Esto va a adjuntar el disco virtual creando anteriormente a la máquina virtual cuyo nombre es ''mi-mv'' haciendo uso del driver paravirtualizado ''VirtIO''.
 +
 
 +
Ojo: ''virsh attach-disk'' requiere una ruta absoluta al disco virtual.
  
Volvamos a la vista consola (Vista -> Consola) y arranquemos la máquina (Máquina virtual -> Ejecutar).
+
Posible errores:
  
Para comprobar los discos añadidos en el paso 1 vamos a utilizar el comando lsblk, el cual nos mostrará una salida similar a la siguiente:
+
* La máquina virtual a la que se quiere adjuntar el nuevo disco no existe
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
+
error: failed to get domain 'mi-mv'
sr0          11:0    1  1024M  0 rom
 
vda        252:0    0  2.2G  0 disk
 
├─vda1      252:1    0  2.1G  0 part /
 
├─vda14    252:14  0    4M  0 part
 
└─vda15    252:15  0  106M  0 part /boot/efi
 
vdb        252:16  0    5G  0 disk
 
vdc        252:32  0    4G  0 disk
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Aqui vemos que tenemos 3 discos:
+
Consulte el listado de máquinas virtuales existentes con ''virsh''.
 +
 
 +
* El identificador del disco virtual ya existe:
 +
 
 +
<syntaxhighlight lang="bash">
 +
error: Failed to attach disk
 +
error: XML error: target 'vdb' duplicated for disk sources ...
 +
</syntaxhighlight>
  
* vda: el actual de ubuntu que añadimos al crear la máquina
+
En este caso, indica que ''vdb'' ya está en uso para un disco virtual existente, por lo que debe emplear otro identificador tal como ''vdc'', ''vdd'', etc.
* vdb: el disco que añadimos en el paso 1 de 5GB
 
* vdc: el disco que añadimos en el paso 1 de 4GB
 
  
También vemos que el disco vda tiene 3 particiones: vda1, vda14 y vda15
+
Para ver los discos virtuales de una máquina virtual:
  
= Paso 3: Creación de particiones en Linux =
+
<syntaxhighlight lang="bash">
 +
virsh domblklist mi-mv
 +
</syntaxhighlight>
  
Vamos a utilizar ahora nuestro disco añadido de 5GB, en el paso anterior
+
que muestra una salida similar a:
deberiamos de haber identificado cual es, en mi caso /dev/vdb, aseguraros cual
 
es el vuestro y comenzaremos a particionar el disco:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo fdisk /dev/vdb
+
Target  Source
 +
----------------------------------------------
 +
hda      /home/usuario/debian-cloud.img
 +
vda      /home/usuario/mi-disco.img
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Si el disco es nuevo y no ha hecho nada previamente, normalmente viene sin tabla
+
Para eliminar un discho de la máquina virtual:
de particiones, así que fdisk se encarga de crear una, seguramente veamos ese
+
 
mensaje cuando hayamos ejecutado el comando anterior.
+
<syntaxhighlight lang="bash">
La tabla de particiones es una pequeña parte del disco que se utiliza para
+
virsh detach-disk mi-mv vda --config
alamacenar la información de las particiones, el formato y si una partición es
+
</syntaxhighlight>
ejecutable o no.
 
  
Una vez hecho esto, veremos que estamos dentro de fdisk (software para
+
= Paso 2: Ver discos en Linux =
particionar un disco), y veremos que este tiene su propia linea de comando.
 
  
Ahora veremos la ayuda de fdisk y crearemos una partición de prueba de 3GB
+
Volvamos a la vista consola (Vista -> Consola) y arranquemos la máquina (Máquina virtual -> Ejecutar).
  
# Introducir la letra 'm' y pulsar Intro, así obtendremos el listado de comandos posibles de fdisk.
+
Para comprobar los discos añadidos en el paso 1 vamos a utilizar el comando '''lsblk''', el cual nos mostrará una salida similar a la siguiente:
# Introducir 'n' y pulsar Intro para crear una nueva partición. Nos preguntará varios detalles:
 
## Tipo de partición: pulsamos Intro y se asignará primaria por defecto.
 
## Número de partición: pulsamos Intro y se asignará 1 por defecto.
 
## Primer sector: pulsamos Intro para que se asigne por defecto.
 
## Último sector: vamos a crear una partición de 3GB, así que escribimos ''+3G'' y pulsamos Intro
 
# Ya está creada nuestra primera partición, aunque los cambios todavía no se han escrito en disco, para ello, necesitaremos aplicar estos cambios, y lo hacemos con el comando 'w' y pulsando Intro.
 
# Ahora si, ya tenemos nuestra partición creada. Vamos a comprobar que el cambio está hecho, usando lsblk por ejemplo, deberíamos de obtener algo similar a la siguiente:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 72: Línea 78:
 
├─vda14    252:14  0    4M  0 part
 
├─vda14    252:14  0    4M  0 part
 
└─vda15    252:15  0  106M  0 part /boot/efi
 
└─vda15    252:15  0  106M  0 part /boot/efi
vdb        252:16  0     5G  0 disk
+
vdb        252:16  0   20G 0 disk
└─vdb1      252:17  0    3G  0 part
 
vdc        252:32  0    4G 0 disk
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
Aqui vemos que tenemos 3 discos:
 +
 +
* vda: el actual de la imagen cloud que añadimos al crear la máquina
 +
* vdb: el disco que añadimos en el paso 1 de 5GB
 +
* vdc: el disco que añadimos en el paso 1 de 4GB
  
Vamos ahora a crear en el disco de 4GB (vdc en mi caso) dos particiones de 2GB cada una, y la partición de 3GB creada anteriormente, vamos a borrarla:
+
También vemos que el disco vda tiene 3 particiones: vda1, vda14 y vda15
  
# sudo fdisk /dev/vdc
+
= Paso 3: Creación de particiones en Linux =
# comando 'n' e Intro
+
 
# Todos los datos por defecto, excepto el último sector, donde pondremos '+2G'
+
Vamos a utilizar ahora nuestro disco añadido de 20GB, en el paso anterior deberiamos de haber identificado cual es, en mi caso /dev/vdb, aseguraros cual es el vuestro y comenzaremos a particionar el disco:
# Una vez creada la primera partición, antes de escribir a disco, vamos a crear la segunda partición, repetimos los pasos anteriores. Vamos a tener un problema y cuando lleguemos al último paso, nos dirá que 2GB no es posible. Si tenemos un disco de 4GB, ¿Por qué no nos permite crear dos particiones de 2GB? Exacto, por la tabla de particiones. Lo que haremos en el último paso será dejar el valor por defecto, que será todo el disco sobrante.
 
# Vamos a comprobar antes de escribir los cambios, que todo está bien, comando 'p' e Intro debería de mostrarnos una salida similar a:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Device    Boot  Start    End Sectors Size Id Type
+
fdisk /dev/vdb
/dev/vdc1        2048 4196351 4194304  2G 83 Linux
 
/dev/vdc2      4196352 4196351 4194304  2G 83 Linux
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
# Si todo está correcto, pulsamos 'w' e Intro y aplicamos los cambios
+
Desde fdisk, se pueden realizar las siguientes acciones:
# Ahora entraremos con el disco /dev/vdb para eliminar la partición: sudo fdisk /dev/vdb
+
 
# Ahora vamos a eliminar la particion, pulsamos 'd' e Intro. Como solo tenemos una partición, nos la borra directamente, en caso de tener más de una, nos preguntaría cual queremos borrar.
+
* '''p''': Imprimir la tabla de particiones actual. Para un disco nuevo, la tabla de particiones está vacía y el tipo de particionado es DOS.
# Aplicamos los cambios: 'w' e Intro
+
* '''t''': Establecer tipo de partición.
# Comprobamos que todo ha quedado a nuestro gusto con el comando lsblk
+
* '''g''': Cambia el tipo de particionado al esquema GPT.
 +
* '''n''': Crear nueva partición, que solicita: El número de partición (si pulsamos intro, asigna una automáticamente), el comienzo de la partición (pulsando intro, la añade al final de lo que hay) y finalmente el tamaño de la particion (si pulsamos intro, se usa todo el espacio disponible en el disco para la partición).
 +
* '''d''': Borrar partición.
 +
* '''w''': Escribe la tabla de particiones a disco.
 +
 
 +
Tras crear una partición, con '''lsblk''' podemos comprobar que se ha realizado la operación correctamente.
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 105: Línea 115:
 
├─vda14    252:14  0    4M  0 part
 
├─vda14    252:14  0    4M  0 part
 
└─vda15    252:15  0  106M  0 part /boot/efi
 
└─vda15    252:15  0  106M  0 part /boot/efi
vdb        252:16  0    5G 0 disk
+
vdb        252:16  0    20G 0 disk
vdc        252:32  0    4G  0 disk
+
└─vdb1     252:17   0    20G 0 part
├─vdc1      252:33  0    2G  0 part
 
└─vdc2     252:34   0    2G 0 part
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
= Paso 4: Formatear partición: crear un sistema de archivos =
+
= Paso 4: Crear un sistema de archivos =
  
Hasta ahora solo hemos definido en la tabla de particiones donde comienza y
+
Tras la creación de la partición, vamos a crear un sistema de ficheros '''ext4'''.
acaba cada partición, pero no podremos utilizarla hasta que no creemos un
 
sistema de archivos en la partición. Para crear un sistema de archivos
 
utilizaremos el comando 'mkfs', y tendremos varias opciones a la hora de crear
 
uno: ext2, ext3, ext4, btrfs, fat, ntfs, etc...
 
 
 
Nosotros creamos un sistema ext4 para /dev/vdc1 y uno fat para /dev/vdc2:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo mkfs -t ext4 /dev/vdc1
+
mkfs -t ext4 /dev/vda1
sudo mkfs -t fat /dev/vdc2
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 129: Línea 130:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo file -s /dev/vdc1
+
file -s /dev/vda1
sudo file -s /dev/vdc2
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
En la salida deberíamos de obtener que tenemos un sistema de ficheros ext4 y
+
Hay otros sistemas de ficheros, como ''fat''.
otro FAT.
 
  
= Paso 5: Montar y desmontar particiones en Linux =
+
= Paso 5: Montar y desmontar sistema de ficheros =
  
Tras haber creado en los pasos anteriores unas particiones y formatearlas, vamos
+
Tras haber creado en los pasos anteriores unas particiones y formatearlas, vamos a pasar ahora a montarlas para poderles dar uso.
a pasar ahora a montarlas para poderles dar uso. En linux montar una partición
 
significará que asignaremos una carpeta del sistema a una partición, y en ella
 
estará todo el contenido del disco.
 
  
 +
<syntaxhighlight lang="bash">
 +
mount /dev/vda1 /mnt
 +
</syntaxhighlight>
  
== Mount y umount ==
+
tras esto, podemos comprobar que ha sido montada, mediante:
 
 
Empezaremos utilizando los comandos mount y umount para montar y desmontar
 
particiones. Vamos a montar las particiones /dev/vdc1 y /dev/vdc2, la primera la
 
montaremos en /home/ubuntu/part1 y la segunda en /home/ubuntu/part2:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir /home/ubuntu/part1  # Creamos la carpeta donde vamos a montar la partición
+
mount | grep vda1
sudo mount /dev/vdc1 /home/ubuntu/part1  # montamos la partición
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Lo mismo con /dev/vdc2
+
Podemos probar a crear un fichero en el nuevo sistema de ficheros que hemos montado:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir /home/ubuntu/part2
+
touch /mnt/fichero.txt
sudo mount /dev/vdc2 /home/ubuntu/part2
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Vamos a ver el contenido de las particiones montadas:
+
y comprobar que existe.
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
ls /home/ubuntu/part1
+
ls -la /mnt
ls /home/ubuntu/part2
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Veremos que tenemos una carpeta lost+found en el sistema ext4, la cual se
+
Para desmontar el sistema de fichero, tenemos que hacer:
utiliza para los errores en el sistema de archivos, cuando hay un error y
 
encontramos un fichero sin referencia, este se añadiría dentro de esta carpeta,
 
y existiría la posibilidad de recuperarlo.
 
 
 
Ahora vamos a crear un nuevo fichero dentro de nuestra partición /dev/vdc1, la
 
vamos a desmontar, y vamos a montarla en otro directorio diferente:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo touch /home/ubuntu/part1/nuevoFichero  # tenemos que crearlo con sudo porque no tenemos permisos, luego veremos esto
+
umount /mnt
sudo umount /dev/vdc1
 
ls /home/ubuntu/part3  # el fichero ya no está, la partición fue desmontada
 
mkdir /home/ubuntu/part3
 
sudo mount /dev/vdc1 /home/ubuntu/part3
 
ls /home/ubuntu/part3
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Comprobaremos que el fichero creado en /home/ubuntu/part1 lo tenemos ahora en
+
== Paso 5.1: Montar persistente modificando /etc/fstab ==
/home/ubuntu/part3, ya que realmente, cuando lo guardamos, estaba en la
 
partición que montamos.
 
 
 
También podemos ver que utilizando el comando lsblk, podremos observar donde
 
está montada la partición.
 
 
 
 
 
== Montaje automático al iniciar el sistema ==
 
  
Ahora veremos como automatizar el proceso de montaje cada vez que se inicia el
+
Hay un fichero de configuración del sistema /etc/fstab (fstab viene de '''f'''ile '''s'''ystem '''tab'''le) que indica la configuración de montaje en tiempo de arranque de la máquina virtual.
sistema, ya que sería tedioso tener que montar todos las particiones cada vez
 
que apagamos y encendemos nuestra máquina.
 
  
El proceso de automatizado suele hacerse dentro del fichero /etc/fstab, veamos
+
Podemos consultar su contenido con:
su contenido:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Línea 209: Línea 179:
 
Cada fila contiene un montaje de una partición, la cual contiene:
 
Cada fila contiene un montaje de una partición, la cual contiene:
  
* Identificación de la partición: en este caso se está utilizando una etiqueta de
+
* Identificación de la partición: PARTUUID de la partición.
  la partición, pero podemos utilizar cualquier cosa que identifique al
 
  dispositivo, como el uuid o la localización (/dev/vdc1)
 
 
* Punto de montaje: donde se montará el dispositivo
 
* Punto de montaje: donde se montará el dispositivo
* Sistema de archivos: ext4, fat32, reiserfs
+
* Sistema de archivos: ext4, fat.
* Opciones: aquí pondremos las diferentes opciones de montaje, como por ejemplo
+
* Opciones: aquí pondremos las diferentes opciones de montaje, como por ejemplo montar para solo lectura, dar permisos a un usuario para utilizar la partición, etc. Hay que tener en cuenta que cada sistema tiene sus opciones.
  montar para solo lectura, dar permisos a un usuario para utilizar la
 
  partición, etc. Hay que tener en cuenta que cada sistema tiene sus opciones.
 
 
* backup: si está a cero, no haremos backup
 
* backup: si está a cero, no haremos backup
* chequeo: si está a cero no se hace chequeo al iniciar
+
* chequeo: si está a cero no se hace chequeo al arrancar el sistema operativo.
 
 
Vamos a añadir unas líneas para montar automáticamente las particiones al
 
iniciar:
 
  
Utilizando el editor que prefieras, añadir lo siguiente en el fichero
+
Para obtener el PARTUUID de la partición, hay que ejecutar:
/etc/fstab. Importante hacerlo con sudo para que nos permita escribir en el
 
fichero:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
/dev/vdc1 /home/ubuntu/part1 ext4 rw,user,exec 0 0
+
blkid /dev/vda1
/dev/vdc2 /home/ubuntu/part2 vfat umask=000 0 0
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Una vez guardado los cambios, vamos a aplicarlos sin reiniciar, para comprobar
+
que va a mostrar la etique PARTUUID.
que funciona correctamente:
+
 
 +
Ahora abrimos /etc/fstab y añadimos esta línea:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mount -a  # aplica los cambios de fstab sin necesidad de reiniciar
+
PARTUUID=de50c6a1-b332-40b7-98b5-878cbd30d94e /mnt ext4 rw,user,exec 0 0
lsblk  # comprobar que está bien montado
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Ahora vamos a comprobar si nuestro usuario tiene permisos para escribir:
+
Para montar todos los sistemas de ficheros en /etc/fstab, podemos hacer:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
touch /home/ubuntu/part1
+
mount -a
touch /home/ubuntu/part2
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
En el primero no nos dejará y en el segundo no tendremos problemas. Esto
+
Podemos comprobar que está montado.
funciona así porque los sistemas ext4, para poder tener permisos de escritura,
 
tenemos que darlo sobre el sistema de ficheros, mientras que el sistema fat,
 
tiene la opción umask que ya hace el trabajo. Para tener permisos de escritura
 
con nuestro usuario en la partición, tendremos que darle permiso a la partición
 
para poder escribir en ella, por ejemplo, utilizando el comando chown:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo chown ubuntu /home/ubuntu/part1
+
lsblk
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Si probamos ahora, podremos escribir en la partición de ext4, y al haber dado
+
= Paso 6: Gestión volúmenes (Logic Volume Manager, LVM) =
permisos, ya nos funcionará siempre:
 
  
<syntaxhighlight lang="bash">
+
Logic Volume Manager (LVM) es una capa de software que permite crear volúmenes lógicos y mapearlos de manera sencilla sobre dispositivos físicos.
touch /home/ubuntu/part1
+
 
</syntaxhighlight>
+
La instalación de LVM es sencilla mediante la orden:
 +
 
 +
apt-get install lvm2
 +
 
 +
La gestión de LVM se basa en tres conceptos básicos:
 +
 
 +
* Volúmenes físicos (PV):  Representa una unidad de almacenamiento que aprovisiona espacio de almacenamiento para el volumen lógico que vamos a crear.
 +
* Grupo volumen (VG): Representa un almacén de espacio para LVM. Un VG estará compuesto por varios PV, pudiendo tener tantos VG como sean necesarios.
 +
* Volumen lógico (LV): Representan unidades lógicas creadas a partir de VG creado previamente. Se podrán crear tantos LV como sean necesarios para un VG. La creación de un LVM genera un archivo especial en /dev, con la forma /dev/nombre_del_grupo/nombre_volumne_logico. El mapeo de espacio desde un LV hasta un PV es configurable pudiendo ser: Lineal, RAID, Cache, ...
 +
 
 +
== Paso 6.1: Creación de volumen físico LVM (PV) ==
 +
 
 +
Para listar las unidades de almacenamiento disponibles en el sistema, empleamos la siguiente orden:
 +
 
 +
lsblk
 +
 
 +
Para crear un volumen físico en la unidad /dev/vdb, empleamos la orden:
 +
 
 +
pvcreate /dev/vdb
 +
 
 +
Recuerde que la unidad /dev/vdb tiene que estar en desuso.
 +
 
 +
Para ver los volúmenes físicos existentes, empleamos la orden:
 +
 
 +
pvscan
 +
 
 +
Para obtener más información:
 +
 
 +
pvdisplay
  
Ahora, vamos a desmontar todo y a reiniciar la máquina para comprobar que está todo funciona.
+
Para eliminar un PV, por ejemplo /dev/vdb:
  
<syntaxhighlight lang="bash">
+
pvremove /dev/vdb
sudo umount /dev/vdc1
 
sudo umount /home/ubuntu/part2  # Es otra forma de desmontar, dando el punto de montaje
 
lsblk  # comprobamos que no estén montadas
 
</syntaxhighlight>
 
  
Reiniciamos la máquina (Máquina virtual -> Apagar -> Reiniciar) y comprobamos:
+
Si reporta error indicando que está en uso, mueve el contenido del volumen que quieres borrar a otro de los volúmenes físicos que forman parte del grupo:
  
<syntaxhighlight lang="bash">
+
pvmove /dev/vdb /dev/vdc
lsblk
 
</syntaxhighlight>
 
  
 +
y prueba a borrarlo de nuevo.
  
= Paso 6: Creación de sistemas de ficheros de red NFS =
+
O simplemente:
  
En este paso, vamos a crear un sistema de ficheros de red compartido a través de NFS.
+
pvmove /dev/vdb
Para ello vamos a necesitar crear un servidor donde iniciemos este sistema al que se conectarán los clientes.
 
  
== Paso 6.1: Instalación y configuración del servidor de NFS ==
+
si quieres que LVM2 vuelva el contenido a donde estime oportuno.
  
Para configurar el servidor, necesitaremos abrir una de las máquinas virtuales
+
Recuerde que la orden ''lsblk'' ofrece información acerca del uso de los volúmenes físicos.
creadas anteriormente e instalar la herramienta necesaria:
 
  
<syntaxhighlight lang="bash">
+
== Paso 6.2: Creación de grupo de volumenes LVM (VG) ==
sudo apt nfs-kernel-server
 
</syntaxhighlight>
 
  
Una vez hecho esto, vamos a crear un directorio el cual será el que
+
Para crear un grupo, empleamos el comando vgcreate:
compartiremos, por ejemplo:
 
  
<syntaxhighlight lang="bash">
+
vgcreate vg_prueba /dev/vdb /dev/vdc
sudo mkdir /home/shared
 
</syntaxhighlight>
 
  
Ahora vamos a editar el servidor nfs, para ello, tendremos que editar el fichero
+
Esto añade al grupo 'vg_prueba' los volúmenes vdb y vdc, haciendo que la capacidad del grupo sea la capacidad agregada de los PV añadidos.
/etc/exports, pero antes, veremos cual es nuestra IP, que nos hará falta:
 
  
<syntaxhighlight lang="bash">
+
Para eliminar un grupo vgremove:
ip address
 
</syntaxhighlight>
 
  
La salida de este comando será similar a la siguiente:
+
vgremove vg_prueba
  
<syntaxhighlight lang="bash">
+
Para extender un grupo creado (por ejemplo, vg_prueba) con más PV (por ejemplo /dev/vde) usamos el comando vgextend:
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 
        inet 192.168.0.167  netmask 255.255.255.0  broadcast 192.168.0.255
 
        inet6 fe80::ea6a:64ff:fe66:66a0  prefixlen 64  scopeid 0x20<link>
 
        ether e8:6a:64:66:66:a0  txqueuelen 1000  (Ethernet)
 
        RX packets 3821  bytes 2152349 (2.0 MiB)
 
        RX errors 0  dropped 268  overruns 0  frame 0
 
        TX packets 3386  bytes 266855 (260.6 KiB)
 
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
        device interrupt 16  memory 0xa4300000-a4320000
 
  
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
+
  vgextend vg_prueba /dev/vde
        inet 127.0.0.1  netmask 255.0.0.0
 
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
 
        loop  txqueuelen 1000  (Local Loopback)
 
        RX packets 220506  bytes 16017419 (15.2 MiB)
 
        RX errors 0  dropped 0  overruns 0  frame 0
 
        TX packets 220506  bytes 16017419 (15.2 MiB)
 
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
</syntaxhighlight>
 
  
Nos fijamos donde pone inet, y miramos la red que NO sea 'lo', en este caso,
+
Para reducir la capacidad de un grupo creado (por ejemplo, vg_prueba) basta con usar el comando vgreduce indicando la unidad (PV) a quitar, por ejemplo /dev/vde:
la IP buscada sería 192.168.0.167. Ahora si, vamos a editar el /etc/exports:
 
  
<syntaxhighlight lang="bash">
+
vgreduce vg_prueba /dev/vde
/home/shared  192.168.0.*(rw,sync,subtree_check)
 
</syntaxhighlight>
 
  
Explicamos los parámetros:
+
Para mostrar todos los grupos de volumenes existentes
  
# Carpeta a compartir
+
vgscan
# Le damos la IP con un * al final para poder permitir a todas las redes poder
 
  acceder, desde la 192.168.0.0 a la 192.168.0.255
 
# Aquí tenemos muchas opciones disponibles:
 
## ro: solo lectura
 
## rw: lectura y escritura
 
## subtree_check: comprueba subdirectorios para compartirlos también
 
## sync: forzar a hacer las operaciones de forma síncrona (los datos se escriben inmediatamente en el disco del servidor NFS).
 
  
Una vez modificado el fichero, vamos a reiniciar el servicio NFS:
+
== Paso 6.3: Creación de volumen lógico (LV) ==
  
<syntaxhighlight lang="bash">
+
Para crear un volúmen lógico, empleamos la orden:
sudo service nfs-kernel-server restart
 
</syntaxhighlight>
 
  
Una vez hecho esto, nuestro servidor NFS ya está configurado.
+
lvcreate --name volumen1 --size 100MB vg_prueba
  
== Paso 6.2: Instalación y configuración del cliente de NFS ==
+
Opcionalmente, es posible crear también un volumen restringiendo los volúmenes físicos empleados disponible en el grupo, por ejemplo, indicando que solo se puede usar el volumen físico /dev/vdb y /dev/vdc:
  
Para acceder al sistema de ficheros NFS creado en el paso anterior, tendremos
+
lvcreate --name volumen1 --size 100MB /dev/vdb /dev/vdc
que configurar el cliente para montar el sistema de ficheros compartido. El
 
cliente lo montaremos en otra máquina virtual diferente.
 
  
Creamos y abrimos esta nueva máquina e instalamos una herramienta para poder
+
A partir de este momento hay una unidad que se presenta como ''/dev/mapper/vg_prueba-volumen1''.
montar el NFS en nuestra máquina:
 
  
<syntaxhighlight lang="bash">
+
Podemos ahora formatear el volumen lógico:
sudo apt install nfs-common
 
</syntaxhighlight>
 
  
Con esto ya podremos montar en nuestro cliente el NFS. Recordemos la IP que
+
mkfs.ext4 /dev/vg_prueba/volumen1
obtuvimos en el paso anterior cuando montamos el servidor, y hacemos lo
 
siguiente:
 
  
<syntaxhighlight lang="bash">
+
y montarlo para almacenar información:
sudo mount 192.168.0.167:/home/shared /mnt
 
</syntaxhighlight>
 
  
Ya tenemos nuestro sistema de ficheros compartidos por red montado, vamos a
+
mount /dev/vg_prueba/volumen1 /mnt
probar que todo funciona.
 
  
1. En la máquina donde instalamos el servidor de NFS, vamos a crear una carpeta
+
Puedes extender un volumen lógico en 1 Gbyte de más:
  y un fichero dentro de la carpeta compartida, para ellos necesitaremos darle
 
  permisos a nuestro usuario previamente:
 
  
<syntaxhighlight lang="bash">
+
lvextend --size +1GB /dev/vg_prueba/volumen1
sudo chown -R ubuntu /home/shared
 
mkdir /home/shared/carpeta
 
touch /home/shared/carpeta/fichero
 
</syntaxhighlight>
 
  
2. Vamos a comprobar en el cliente, que estos ficheros se están mostrando:
+
Para ext4, justo después tienes que redimensionar el sistema de ficheros:
  
<syntaxhighlight lang="bash">
+
resize2fs /dev/vg_prueba/volumen1
ls /mnt
 
ls /mnt/carpeta
 
</syntaxhighlight>
 
  
3. Ahora lo hacemos al contrario, escribiremos desde el cliente, y vamos a verlo en el servidor:
+
Aunque también puedes extender el tamaño del volumen y el sistema de ficheros mediante:
  
<syntaxhighlight lang="bash">
+
lvextend --size +1GB /dev/vg_prueba/volumen1 --resizefs
mkdir /mnt/carpeta2
 
touch /mnt/carpeta2/fichero
 
</syntaxhighlight>
 
  
4. Entramos en el servidor y comprobamos:
+
Puedes comprobar con:
  
<syntaxhighlight lang="bash">
+
df -h
ls /home/shared
 
ls /home/shared/carpeta2
 
</syntaxhighlight>
 
  
= Paso 7: Creación de un RAID =
+
que el sistema de ficheros en ''volumen1'' ocupa ahora todo el volumen lógico.
  
En este apartado vamos a configurar un RAID 1 (espejo) que nos permite aumentar la fiabilidad. La idea es que si uno de los discos del RAID deja de funcionar, los datos en el sistema de fichero siguen estando disponibles con lo que disponemos de algo de tiempo para reemplazar el disco defectuoso.
+
Reducir el tamaño de un volumen lógico es un poco más complicado, ¡podrían perder datos si no se realiza correctamente!
  
== Paso 7.1: Añadir discos a la máquina virtual ==
+
Primero, desmontamos el volumen:
  
Como explicamos en el Paso 1, vamos a añadir a una máquina virtual 2 discos duros de 5GB cada uno.
+
umount /mnt/volumen1
  
== Paso 7.2: Instalación de la herramienta de mdadm ==
+
reducir el tamaño del sistema de ficheros, comprobamos la integridad del sistema de ficheros:
  
Por defecto, esta herramienta viene instalada en el ubuntu cloud server, pero en
+
e2fsck -f /dev/vg_prueba/volumen1
el caso de utilizar otra distribución diferente, necesitaremos instalarla:
 
  
<syntaxhighlight lang="bash">
+
Y lo redimensionamos (reducimos de tamaño):
sudo apt install mdadm
 
</syntaxhighlight>
 
  
== Paso 7.3: Utilización de la herramienta de mdadm ==
+
resize2fs /dev/vg_prueba/volumen1 500M
  
Empezamos escribiendo el comando, y luego pasamos a explicar los detalles:
+
Ahora ya, por último lugar, puedes reducir el tamaño del volumen:
  
<syntaxhighlight lang="bash">
+
lvreduce --size 500M /dev/vg_prueba/volumen1
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/vdb1 /dev/vdc1
 
</syntaxhighlight>
 
  
Explicamos los parámetros:
+
Para comprobar que hay ido todo bien, vuelve a redimensionar el sistema de ficheros para que ocupe todo el espacio disponible.
  
# --create: para crear el raid
+
resize2fs /dev/vg_prueba/volumen1
# --verbose: nos muestra más información del proceso
 
# /dev/md0: El nombre del nuevo raid, normalmente se utiliza md0
 
# --level=1: crea un raid 1 que es el que queremos
 
# --raid-devices=2: cantidad de dispositivos que vamos a utilizar, 2 en nuestro caso
 
# /dev/vdb1: Nombre de la partición 1
 
# /dev/vdc1: Nombre de la partición 2
 
  
Una vez ejecutado el comando, creará el RAID 1, pasemos ahora a ver los
+
Y puedes volver a montar el sistema de ficheros:
detalles:
 
  
<syntaxhighlight lang="bash">
+
mount /dev/vg_prueba/volumen1 /mnt/volumen1
sudo mdadm --detail /dev/md0
 
</syntaxhighlight>
 
  
Esto nos mostrará la información del RAID, lo que a nosotros nos interesa son
+
con
las últimas líneas:
 
  
<syntaxhighlight lang="bash">
+
  df -h
          Name : ubuntu:0 (local to host ubuntu)
 
          UUID : e40ba520:5ed1bd37:5c818550:03a18368
 
        Events : 17
 
  
Number  Major  Minor  RaidDevice State
+
para comprar el nuevo tamaño disponible de sólo 500 MBytes.
  0      252    17        0      active sync  /dev/vdb1
 
  1      252    33        1      active sync  /dev/vdc1
 
</syntaxhighlight>
 
  
Aqui vemos el UUID de nuestro RAID, y también veremos en las dos última líneas,
+
Es posible borrar un volumen lógico:
las dos particiones, las cuales están marcadas con active sync, esto quiere
 
decir que están activos y sincronizados. Puede que si hacemos muy rápido este
 
comando, muestre algo diferente porque tarda un poco en sincronizar la primera
 
vez, pero pronto estará.
 
  
== Paso 7.5: Guardar la configuración del RAID ==
+
lvremove /dev/vg_prueba/volumen1
  
Vamos a modificar la configuración, tendremos que editar el
+
asegúrate que no está montando, de lo contrario esta órden reportará que el volumen está en uso.
fichero /etc/mdadm/mdadm.conf y debajo de la línea que pone '# definitions of
 
existing MD arrays', añadir lo siguiente:
 
  
<syntaxhighlight lang="bash">
+
== Paso 6.4: Montaje persistente del volúmen lógico con /etc/fstab ==
ARRAY /dev/md0 UUID=e40ba520:5ed1bd37:5c818550:03a18368
 
</syntaxhighlight>
 
  
Recuerda que el UUID lo puedes consultar con la orden:
+
Recuerde usar el '''UUID'' para referirse al volumen lógico desde /etc/fstab:
  
<syntaxhighlight lang="bash">
+
blkid /dev/vg_prueba/volumen1
mdadm --detail /dev/md0
 
</syntaxhighlight>
 
  
Busca el campo UUID.
+
que en /etc/fstab resulta en:
  
Tras actualizar /etc/mdadm/mdadm.conf, tienes que invocar la siguiente orden:
+
UUID=bb50c6a1-b332-40b7-98b5-878cbd30d94e /mnt ext4 rw,user,exec 0 0
  
<syntaxhighlight lang="bash">
+
= Paso 7: Creación de volumen lógico con RAID =
update-initramfs -u
 
</syntaxhighlight>
 
  
Esto asegura que en el próximo arranque el RAID usa la unidad /dev/md0.
+
Para crear un RAID 0 de 20 GBytes.
  
== Paso 7.6: Particionar y formatear el RAID ==
+
lvcreate --type raid0 --stripes 2 --size 20G --name mi_raid0 vg_prueba
  
Como explicamos en los Pasos 2, 3 y 4, vamos a particionar el disco RAID:
+
Para comprobar el estado del raid (mira el % que indica el nivel de sincronía):
  
<syntaxhighlight lang="bash">
+
  lvs -a
lsblk # comprobamos los dicos, en mi caso sería md0
 
sudo fdisk /dev/md0
 
</syntaxhighlight>
 
  
Ahora vamos a formatear la partición:
+
Para comprobar los volúmenes que forman parte del RAID:
  
<syntaxhighlight lang="bash">
+
lsblk
sudo mkfs -t ext4 /dev/md0p1
 
</syntaxhighlight>
 
  
== Paso 7.7: Montar el RAID ==
+
* -o indica el formato de salida del estado, al poner +devices añade información sobre los volúmenes físicos empleados en el RAID.
  
Como previamente hemos hecho, crearemos una carpeta donde montar el RAID y lo
+
* --stripes indica cuantos discos (del grupo de volúmenes) se usan activamente en la distribución de los datos.
montaremos usando el comando mount:
 
  
<syntaxhighlight lang="bash">
+
En un RAID 0 con stripe 2 (el mínimo para poder hacerlo), sería:
mkdir /home/ubuntu/datos
 
sudo mount /dev/md0p1 /home/ubuntu/datos
 
sudo chown -R ubuntu /home/ubuntu/datos
 
</syntaxhighlight>
 
  
Así ya tenemos nuestro RAID montado y podemos utilizarlo, vamos a probar a
+
Disco 1    Disco 2
escribir en él.
+
A1 B1 C1    A2 B2 C2
  
<syntaxhighlight lang="bash">
+
Recuerde que RAID 1 hace ''mirroring'', por lo que no se hace striping, pero requiere como mínimo dos discos:
touch /home/ubuntu/datos/fichero
 
</syntaxhighlight>
 
  
Esto está funcionando, pero como comentamos en uno de los pasos previos, el
+
Disco 1    Disco 2
comando mount solo montará el raid temporalmente, para automatizar este montado
+
A B C      A B C
al arrancar, tendremos que añadir la siguiente línea a /etc/fstab:
 
  
<syntaxhighlight lang="bash">
+
Para crear un RAID 1+0, se necesitan 4 volúmenes físicos como mínimo previamente para crear un RAID 1+0, pues combina ambos RAID.
/dev/md0p1 /home/ubuntu/datos ext4 defaults
 
</syntaxhighlight>
 
  
== Paso 7.8: Comprobar tolerancia a fallos ==
+
lvcreate --type raid10 --mirrors 1 --stripes 2 --size 20G --name raid0 vg_prueba
  
Vamos a probar que sin un disco duro, todo sigue funcionando bien, ya que al
+
Para RAID 1+0, la cuenta de discos necesario es:
tener un RAID 1 y tener los datos en espejo, no debería de haber problemas.
 
  
La siguiente orden marca el disco /dev/sdb1 como dañado:
+
stripes * (mirrors + 1) = 2 * (1 + 1) = 4 discos.
  
<syntaxhighlight lang="bash">
+
Para reemplazar un volumen físico del RAID por otro, puede hacer:
mdadm --fail /dev/md0 /dev/sdb1
 
</syntaxhighlight>
 
  
Podemos ver con la siguiente orden que el disco aparece como ''faulty'':
+
lvconvert --replace /dev/vda vg_prueba/raid0 /dev/vdb
  
<syntaxhighlight lang="bash">
+
o, de manera síncrona:
mdadm --detail /dev/md0
 
</syntaxhighlight>
 
  
Sin embargo, podemos ver que el sistema de ficheros sigue montado y el contenido sigue estando disponible.
+
pvmove /dev/vda /dev/vdb
  
<syntaxhighlight lang="bash">
+
Hay un artículo [https://en.wikipedia.org/wiki/Standard_RAID_levels Wikipedia] que describe los niveles de RAID de manera muy detallada.
ls /home/ubuntu/datos/
 
</syntaxhighlight>
 
  
Podéis retirar definitivamente el disco defectuoso con la orden:
+
'''NOTA''': Es mejor gestionar [[RAID con mdadm]] y luego combinarlo con lvm para la gestión de volúmenes, pero el material oficial de la asignatura prefiere usar lvm.
  
<syntaxhighlight lang="bash">
+
= Paso 8: GlusterFS =
mdadm --remove /dev/md0 /dev/sdb1
 
</syntaxhighlight>
 
  
Para volver a incluirlo en el RAID:
+
GlusterFS es un sistema de archivos cliente-servidor de almacenamiento en red escalable. También puede consultar [https://docs.gluster.org/en/latest/Administrator-Guide/ official documentation] para más detalles.
  
<syntaxhighlight lang="bash">
+
Algunos conceptos:
mdadm --add /dev/md0 /dev/sdb1
 
</syntaxhighlight>
 
  
Podéis consultar que está sincronizando con la orden:
+
* Nodo: máquina que proporciona espacio de almacenamiento.
 +
* Pool: Un conjunto de nodos.
 +
* Cliente: máquina en la que se monta un volumen
  
<syntaxhighlight lang="bash">
+
y con respecto al almacenamiento:
mdadm --detail /dev/md0
 
</syntaxhighlight>
 
  
Que mostrará el disco /dev/sdb1 en estado ''spare rebuilding'' y mostrará el porcentaje de sincronización.
+
* Brick: Unidad mínima de almacenamiento (dada por un sistema de archivos exportado por un nodo). En cada nodo se define un brick.
 +
* Volumen: unidad lógica compuesta por bricks de uno o varios nodos.
  
= Paso 8: Gestión volúmenes (Logic Volume Manager, LVM) =
+
== Paso 8.1: Instalar el servidor GlusterFS ==
  
Logic Volume Manager (LVM) es una capa de software que permite crear volúmenes lógicos y mapearlos de manera sencilla sobre dispositivos físicos.
+
Para instalar Glusterfs:
  
La instalación de LVM es sencilla mediante la orden:
+
<syntaxhighlight lang="bash">
 +
apt install glusterfs-server
 +
systemctl enable --now glusterd
 +
systemctl start glusterd
 +
systemctl status glusterd
 +
</syntaxhighlight>
  
sudo apt-get install lvm2
+
Puedes consultar los logs en: /var/log/glusterfs/glusterd.log
  
La gestión de LVM se basa en tres conceptos básicos:
+
Puedes comprobar que el servicio está activo verificado que el puerto TCP/24007 está activo:
  
* Volúmenes físicos (PV):  Representa una unidad de almacenamiento que aprovisiona espacio de almacenamiento para el volumen lógico que vamos a crear.
+
<syntaxhighlight lang="bash">
* Grupo volumen (VG): Representa un almacén de espacio para LVM. Un VG estará compuesto por varios PV, pudiendo tener tantos VG como sean necesarios.
+
ss -ltn
* Volumen lógico (LV): Representan unidades lógicas creadas a partir de VG creado previamente. Se podrán crear tantos LV como sean necesarios para un VG. La creación de un LVM genera un archivo especial en /dev, con la forma /dev/nombre_del_grupo/nombre_volumne_logico. El mapeo de espacio desde un LV hasta un PV es configurable pudiendo ser: Lineal, RAID, Cache, ...
+
</syntaxhighlight>
  
== Paso 8.1: Creación de volumen físico LVM (PV) ==
+
La orden ''ss'' muestra con esta opción los servicios TCP (-t) que están escuchando (-l, de ''listen'') y usando la notación numérica (-n).
  
Para listar las unidades de almacenamiento disponibles en el sistema, empleamos la siguiente orden:
+
Si vamos a construir un pool con dos nodos, tenemos que editar /etc/hostname y /etc/hosts de lo contrario tendremos problemas al crear un pool.
  
lsblk
+
'''Si clonas una máquina virtual tras la instalación de los paquetes''', tienes que volver a crear el identificador único del nodo tal [https://wenhan.blog/post/glusterfs-failed-to-probe-a-cloned-peer/ aquí].
  
En virtualbox podemos crear nuevas unidades almacenamiento y añadirlas a la máquina virtual.
+
=== Paso 8.1.1. Editar /etc/hostname ===
  
Para crear un volumen físico en la unidad /dev/sdb, empleamos la orden:
+
Gluster requiere nombres únicos para identificar a las máquinas que forman parte del pool:
  
pvcreate /dev/sdb
+
<syntaxhighlight lang="bash">
 +
nano /etc/hostname
 +
</syntaxhighlight>
  
Recuerde que la unidad /dev/sdb tiene que estar en desuso.
+
Y pones ''server1''.  
  
Para ver los volúmenes físicos existentes, empleamos la orden:
+
Tras esto, hay que reiniciar el sistema para que el cambio de nombre surta efecto.
  
pvscan
+
Para la segunda máquina, pones ''server2''. Y así sucesivamente.
  
Para obtener más información:
+
'''Es fundamental que todas las máquinas del pool tengan nombres únicos, de lo contrario gluster no va a funcionar'''.
  
pvdisplay
+
=== Paso 8.1.2. Editar el /etc/hosts ===
  
Para eliminar un PV, por ejemplo /dev/sdb:
+
Suponiendo que el nodo 2 tiene la dirección IP 192.168.122.75 y el nodo 1 tiene la IP 192.168.122.175, hay que editar /etc/hosts con:
  
pvremove /dev/sdb
+
<syntaxhighlight lang="bash">
 +
127.0.0.1 localhost
 +
192.168.122.175 server1
 +
192.168.122.75 server2
 +
</syntaxhighlight>
  
== Paso 8.2: Creación de grupo de volumenes LVM (VG) ==
+
'''en todas las máquinas que formen parte del pool'''.
  
Para crear un grupo, empleamos el comando vgcreate:
+
== Paso 8.2: Gestionar el pool de servidores ==
  
vgcreate vg_prueba /dev/sdb /dev/sdc
+
Para añadir el nodo 1 y al 2 al mismo pool, desde el nodo 2 hay que invocar:
  
Esto añade al grupo 'vg_prueba' los volúmenes sdb y sdc, haciendo que la capacidad del grupo sea la capacidad agregada de los PV añadidos.
+
<syntaxhighlight lang="bash">
 +
gluster peer probe server1
 +
</syntaxhighlight>
  
Para eliminar un grupo vgremove:
+
Ahora tienes que comprobar la lista de nodos del clúster en el ''pool'':
  
vgremove vg_prueba
+
<syntaxhighlight lang="bash">
 +
gluster pool list
 +
</syntaxhighlight>
  
Para extender un grupo creado (por ejemplo, vg_prueba) con más PV (por ejemplo /dev/sde) usamos el comando vgextend:
+
que muestra desde el nodo 1 lo siguiente:
  
vgextend vg_prueba /dev/sde
+
<syntaxhighlight lang="bash">
 +
UUID                                  Hostname    State
 +
ca4b43a2-aa4b43a2-bb3422cc-a4540010    server2    Connected
 +
ba4bbba2-bb4bbba2-cc3422cc-aaabff67    localhost    Connected
 +
</syntaxhighlight>
  
Para reducir la capacidad de un grupo creado (por ejemplo, vg_prueba) basta con usar el comando vgreduce indicando la unidad (PV) a quitar, por ejemplo /dev/sde:
+
Comprobar el estado de los nodos:
  
vgreduce vg_prueba /dev/sde
+
<syntaxhighlight lang="bash">
 +
gluster peer status
 +
</syntaxhighlight>
  
Para mostrar todos los grupos de volumenes existentes
+
que muestra:
  
vgscan
+
<syntaxhighlight lang="bash">
 +
Number of peers: 1
  
== Paso 8.3: Creación de volumen lógico (LV) ==
+
Hostname: server2
 +
Uuid: ca4b43a2-aa4b43a2-bb3422cc-a45400S10
 +
State: Peer in Cluster (Connected)
 +
</syntaxhighlight>
  
Para crear un volúmen lógico, empleamos la orden:
+
Es posible borrar un nodo mediante la siguiente orden:
  
lvcreate --name volumen1 --size 100MB vg_prueba
+
<syntaxhighlight lang="bash">
 +
gluster peer detach server2
 +
</syntaxhighlight>
  
A partir de este momento hay una unidad que se presenta como ''/dev/mapper/vg_prueba-volumen1''.
+
== Paso 8.3: Gestionar el almacenamiento ==
  
Podemos ahora formatear el volumen lógico:
+
En ambos nodos cree una carpeta:
  
mkfs.ext4 /dev/vg_prueba/volumen1
+
<syntaxhighlight lang="bash">
 +
mkdir -p /data/myvol1/brick1
 +
</syntaxhighlight>
  
y montarlo para almacenar información:
+
En '''uno''' de los nodos, puede crear el volumen:
  
mount /dev/vg_prueba/volumen1 /mnt
+
<syntaxhighlight lang="bash">
 +
gluster volume create myvol1 replica 2 server1:/data/myvol1/brick1 server2:/data/myvol1/brick1
 +
</syntaxhighlight>
  
Puedes extender un volumen lógico en 1 Gbyte de más:
+
'''Nota''': Si la carpeta está en el raíz, entonces hay que añadir ''force'' al final de la orden anterior.
  
lvextend --size +1GB /dev/vg_prueba/volumen1
+
Y para iniciar el volumen:
  
Justo después tienes que redimensionar el sistema de ficheros:
+
<syntaxhighlight lang="bash">
 +
gluster volume start myvol1
 +
</syntaxhighlight>
  
resize2fs /dev/vg_prueba/volumen1
+
Para listar los volúmenes existentes:
  
Puedes comprobar con:
+
<syntaxhighlight lang="bash">
 +
gluster volume list
 +
</syntaxhighlight>
  
df -h
+
Puede comprobar la información y el estado del volumen:
  
que el sistema de ficheros en ''volumen1'' ocupa ahora todo el volumen lógico.
+
<syntaxhighlight lang="bash">
 +
gluster volume info
 +
gluster volume status
 +
</syntaxhighlight>
  
Reducir el tamaño de un volumen lógico es un poco más complicado, ¡podrían perder datos si no se realiza correctamente!
+
Además, cada nuevo volumen de glusterfs abre un puerto TCP que se puede observar con:
  
Primero, desmontamos el volumen:
+
<syntaxhighlight lang="bash">
 +
ss -ltnp
 +
</syntaxhighlight>
  
umount /mnt/volumen1
+
La opción ''-p'' muestra el proceso asociado a dicho puerto, se puede observar que es un proceso de ''glusterfsd''. Esta información sobre los puertos TCP asociados al volumen también aparece en la información de''status'':
  
reducir el tamaño del sistema de ficheros, comprobamos la integridad del sistema de ficheros:
+
<syntaxhighlight lang="bash">
 +
gluster volume status
 +
</syntaxhighlight>
  
e2fsck -f /dev/vg_prueba/volumen1
+
Puede extender también un volumen existente con:
  
Y lo redimensionamos (reducimos de tamaño):
+
<syntaxhighlight lang="bash">
 +
mkdir -p /data/myvol1/brick2
 +
gluster volume add-brick myvol1 server1:/data/myvol1/brick2
 +
</syntaxhighlight>
  
resize2fs /dev/vg_prueba/volumen1 500M
+
En caso de necesitar borrar un volumen de red, puedes invocar:
  
Ahora ya, por último lugar, puedes reducir el tamaño del volumen:
+
<syntaxhighlight lang="bash">
 +
gluster volume stop myvol1
 +
gluster volume delete myvol1
 +
</syntaxhighlight>
  
lvreduce --size 500M /dev/vg_prueba/volumen1
+
parando el volumen en primer lugar para luego borrarlo.
  
Para comprobar que hay ido todo bien, vuelve a redimensionar el sistema de ficheros para que ocupe todo el espacio disponible.
+
== Paso 8.4: Cliente GlusterFS ==
  
resize2fs /dev/vg_prueba/volumen1
+
Primero instala el paquete de cliente de GlusterFS.
  
Y puedes volver a montar el sistema de ficheros:
+
<syntaxhighlight lang="bash">
 +
apt install glusterfs-client
 +
</syntaxhighlight>
  
mount /dev/vg_prueba/volumen1 /mnt/volumen1
+
Desde el cliente, puede montar el volumen con:
  
con
+
<syntaxhighlight lang="bash">
 +
mount -t glusterfs server1:/myvol1 /mnt
 +
</syntaxhighlight>
  
df -h
+
= Anexo =
  
para comprar el nuevo tamaño disponible de sólo 500 MBytes.
+
* [[RAID con mdadm]]

Revisión actual del 13:32 15 dic 2025

Paso 1: Añadir un disco a la máquina virtual

Vamos a usar cualquier máquina virtual de debian cloud que hayamos usado previamente y vamos a añadir dos discos virtuales para hacer pruebas.

  1. Abrimos la ventana de la máquina virtual a usar
  2. Nos movemos a Vista -> Detalles, y le damos al botón de 'Agregar hardware'
  3. Seleccionamos Almacenamiento, le damos un tamaño de 5GB y en el tipo de dispositivo seleccionamos 'dispositivo de disco'. Con estas opciones, pulsamos Finalizar., y ya tendremos nuestro disco creado.
  4. Repetir el paso anterior y crear otro disco de 4GB

Para crear un nuevo disco virtual desde el intérprete de órdenes:

qemu-img create -f qcow2 mi-disco.img 20G

Para adjuntar este disco a una máquina virtual existente:

virsh attach-disk mi-mv /home/usuario/mi-disco.img vdb --cache none --subdriver qcow2 --config

Esto va a adjuntar el disco virtual creando anteriormente a la máquina virtual cuyo nombre es mi-mv haciendo uso del driver paravirtualizado VirtIO.

Ojo: virsh attach-disk requiere una ruta absoluta al disco virtual.

Posible errores:

  • La máquina virtual a la que se quiere adjuntar el nuevo disco no existe
error: failed to get domain 'mi-mv'

Consulte el listado de máquinas virtuales existentes con virsh.

  • El identificador del disco virtual ya existe:
error: Failed to attach disk
error: XML error: target 'vdb' duplicated for disk sources ...

En este caso, indica que vdb ya está en uso para un disco virtual existente, por lo que debe emplear otro identificador tal como vdc, vdd, etc.

Para ver los discos virtuales de una máquina virtual:

virsh domblklist mi-mv

que muestra una salida similar a:

 Target   Source
----------------------------------------------
 hda      /home/usuario/debian-cloud.img
 vda      /home/usuario/mi-disco.img

Para eliminar un discho de la máquina virtual:

virsh detach-disk mi-mv vda --config

Paso 2: Ver discos en Linux

Volvamos a la vista consola (Vista -> Consola) y arranquemos la máquina (Máquina virtual -> Ejecutar).

Para comprobar los discos añadidos en el paso 1 vamos a utilizar el comando lsblk, el cual nos mostrará una salida similar a la siguiente:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  1024M  0 rom
vda         252:0    0   2.2G  0 disk
├─vda1      252:1    0   2.1G  0 part /
├─vda14     252:14   0     4M  0 part
└─vda15     252:15   0   106M  0 part /boot/efi
vdb         252:16   0    20G  0 disk

Aqui vemos que tenemos 3 discos:

  • vda: el actual de la imagen cloud que añadimos al crear la máquina
  • vdb: el disco que añadimos en el paso 1 de 5GB
  • vdc: el disco que añadimos en el paso 1 de 4GB

También vemos que el disco vda tiene 3 particiones: vda1, vda14 y vda15

Paso 3: Creación de particiones en Linux

Vamos a utilizar ahora nuestro disco añadido de 20GB, en el paso anterior deberiamos de haber identificado cual es, en mi caso /dev/vdb, aseguraros cual es el vuestro y comenzaremos a particionar el disco:

fdisk /dev/vdb

Desde fdisk, se pueden realizar las siguientes acciones:

  • p: Imprimir la tabla de particiones actual. Para un disco nuevo, la tabla de particiones está vacía y el tipo de particionado es DOS.
  • t: Establecer tipo de partición.
  • g: Cambia el tipo de particionado al esquema GPT.
  • n: Crear nueva partición, que solicita: El número de partición (si pulsamos intro, asigna una automáticamente), el comienzo de la partición (pulsando intro, la añade al final de lo que hay) y finalmente el tamaño de la particion (si pulsamos intro, se usa todo el espacio disponible en el disco para la partición).
  • d: Borrar partición.
  • w: Escribe la tabla de particiones a disco.

Tras crear una partición, con lsblk podemos comprobar que se ha realizado la operación correctamente.

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  1024M  0 rom
vda         252:0    0   2.2G  0 disk
├─vda1      252:1    0   2.1G  0 part /
├─vda14     252:14   0     4M  0 part
└─vda15     252:15   0   106M  0 part /boot/efi
vdb         252:16   0     20G  0 disk
└─vdb1      252:17   0     20G  0 part

Paso 4: Crear un sistema de archivos

Tras la creación de la partición, vamos a crear un sistema de ficheros ext4.

mkfs -t ext4 /dev/vda1

Una vez hecho esto, vamos a comprobar que se han aplicado bien los cambios:

file -s /dev/vda1

Hay otros sistemas de ficheros, como fat.

Paso 5: Montar y desmontar sistema de ficheros

Tras haber creado en los pasos anteriores unas particiones y formatearlas, vamos a pasar ahora a montarlas para poderles dar uso.

mount /dev/vda1 /mnt

tras esto, podemos comprobar que ha sido montada, mediante:

mount | grep vda1

Podemos probar a crear un fichero en el nuevo sistema de ficheros que hemos montado:

touch /mnt/fichero.txt

y comprobar que existe.

ls -la /mnt

Para desmontar el sistema de fichero, tenemos que hacer:

umount /mnt

Paso 5.1: Montar persistente modificando /etc/fstab

Hay un fichero de configuración del sistema /etc/fstab (fstab viene de file system table) que indica la configuración de montaje en tiempo de arranque de la máquina virtual.

Podemos consultar su contenido con:

cat /etc/fstab

Cada fila contiene un montaje de una partición, la cual contiene:

  • Identificación de la partición: PARTUUID de la partición.
  • Punto de montaje: donde se montará el dispositivo
  • Sistema de archivos: ext4, fat.
  • Opciones: aquí pondremos las diferentes opciones de montaje, como por ejemplo montar para solo lectura, dar permisos a un usuario para utilizar la partición, etc. Hay que tener en cuenta que cada sistema tiene sus opciones.
  • backup: si está a cero, no haremos backup
  • chequeo: si está a cero no se hace chequeo al arrancar el sistema operativo.

Para obtener el PARTUUID de la partición, hay que ejecutar:

blkid /dev/vda1

que va a mostrar la etique PARTUUID.

Ahora abrimos /etc/fstab y añadimos esta línea:

PARTUUID=de50c6a1-b332-40b7-98b5-878cbd30d94e /mnt ext4 rw,user,exec 0 0

Para montar todos los sistemas de ficheros en /etc/fstab, podemos hacer:

mount -a

Podemos comprobar que está montado.

lsblk

Paso 6: Gestión volúmenes (Logic Volume Manager, LVM)

Logic Volume Manager (LVM) es una capa de software que permite crear volúmenes lógicos y mapearlos de manera sencilla sobre dispositivos físicos.

La instalación de LVM es sencilla mediante la orden:

apt-get install lvm2

La gestión de LVM se basa en tres conceptos básicos:

  • Volúmenes físicos (PV): Representa una unidad de almacenamiento que aprovisiona espacio de almacenamiento para el volumen lógico que vamos a crear.
  • Grupo volumen (VG): Representa un almacén de espacio para LVM. Un VG estará compuesto por varios PV, pudiendo tener tantos VG como sean necesarios.
  • Volumen lógico (LV): Representan unidades lógicas creadas a partir de VG creado previamente. Se podrán crear tantos LV como sean necesarios para un VG. La creación de un LVM genera un archivo especial en /dev, con la forma /dev/nombre_del_grupo/nombre_volumne_logico. El mapeo de espacio desde un LV hasta un PV es configurable pudiendo ser: Lineal, RAID, Cache, ...

Paso 6.1: Creación de volumen físico LVM (PV)

Para listar las unidades de almacenamiento disponibles en el sistema, empleamos la siguiente orden:

lsblk

Para crear un volumen físico en la unidad /dev/vdb, empleamos la orden:

pvcreate /dev/vdb

Recuerde que la unidad /dev/vdb tiene que estar en desuso.

Para ver los volúmenes físicos existentes, empleamos la orden:

pvscan

Para obtener más información:

pvdisplay

Para eliminar un PV, por ejemplo /dev/vdb:

pvremove /dev/vdb

Si reporta error indicando que está en uso, mueve el contenido del volumen que quieres borrar a otro de los volúmenes físicos que forman parte del grupo:

pvmove /dev/vdb /dev/vdc

y prueba a borrarlo de nuevo.

O simplemente:

pvmove /dev/vdb

si quieres que LVM2 vuelva el contenido a donde estime oportuno.

Recuerde que la orden lsblk ofrece información acerca del uso de los volúmenes físicos.

Paso 6.2: Creación de grupo de volumenes LVM (VG)

Para crear un grupo, empleamos el comando vgcreate:

vgcreate vg_prueba /dev/vdb /dev/vdc

Esto añade al grupo 'vg_prueba' los volúmenes vdb y vdc, haciendo que la capacidad del grupo sea la capacidad agregada de los PV añadidos.

Para eliminar un grupo vgremove:

vgremove vg_prueba

Para extender un grupo creado (por ejemplo, vg_prueba) con más PV (por ejemplo /dev/vde) usamos el comando vgextend:

vgextend vg_prueba /dev/vde

Para reducir la capacidad de un grupo creado (por ejemplo, vg_prueba) basta con usar el comando vgreduce indicando la unidad (PV) a quitar, por ejemplo /dev/vde:

vgreduce vg_prueba /dev/vde

Para mostrar todos los grupos de volumenes existentes

vgscan

Paso 6.3: Creación de volumen lógico (LV)

Para crear un volúmen lógico, empleamos la orden:

lvcreate --name volumen1 --size 100MB vg_prueba

Opcionalmente, es posible crear también un volumen restringiendo los volúmenes físicos empleados disponible en el grupo, por ejemplo, indicando que solo se puede usar el volumen físico /dev/vdb y /dev/vdc:

lvcreate --name volumen1 --size 100MB /dev/vdb /dev/vdc

A partir de este momento hay una unidad que se presenta como /dev/mapper/vg_prueba-volumen1.

Podemos ahora formatear el volumen lógico:

mkfs.ext4 /dev/vg_prueba/volumen1

y montarlo para almacenar información:

mount /dev/vg_prueba/volumen1 /mnt

Puedes extender un volumen lógico en 1 Gbyte de más:

lvextend --size +1GB /dev/vg_prueba/volumen1

Para ext4, justo después tienes que redimensionar el sistema de ficheros:

resize2fs /dev/vg_prueba/volumen1

Aunque también puedes extender el tamaño del volumen y el sistema de ficheros mediante:

lvextend --size +1GB /dev/vg_prueba/volumen1 --resizefs

Puedes comprobar con:

df -h

que el sistema de ficheros en volumen1 ocupa ahora todo el volumen lógico.

Reducir el tamaño de un volumen lógico es un poco más complicado, ¡podrían perder datos si no se realiza correctamente!

Primero, desmontamos el volumen:

umount /mnt/volumen1

reducir el tamaño del sistema de ficheros, comprobamos la integridad del sistema de ficheros:

e2fsck -f /dev/vg_prueba/volumen1

Y lo redimensionamos (reducimos de tamaño):

resize2fs /dev/vg_prueba/volumen1 500M

Ahora ya, por último lugar, puedes reducir el tamaño del volumen:

lvreduce --size 500M /dev/vg_prueba/volumen1

Para comprobar que hay ido todo bien, vuelve a redimensionar el sistema de ficheros para que ocupe todo el espacio disponible.

resize2fs /dev/vg_prueba/volumen1

Y puedes volver a montar el sistema de ficheros:

mount /dev/vg_prueba/volumen1 /mnt/volumen1

con

df -h

para comprar el nuevo tamaño disponible de sólo 500 MBytes.

Es posible borrar un volumen lógico:

lvremove /dev/vg_prueba/volumen1

asegúrate que no está montando, de lo contrario esta órden reportará que el volumen está en uso.

Paso 6.4: Montaje persistente del volúmen lógico con /etc/fstab

Recuerde usar el 'UUID para referirse al volumen lógico desde /etc/fstab:

blkid /dev/vg_prueba/volumen1

que en /etc/fstab resulta en:

UUID=bb50c6a1-b332-40b7-98b5-878cbd30d94e /mnt ext4 rw,user,exec 0 0

Paso 7: Creación de volumen lógico con RAID

Para crear un RAID 0 de 20 GBytes.

lvcreate --type raid0 --stripes 2 --size 20G --name mi_raid0 vg_prueba

Para comprobar el estado del raid (mira el % que indica el nivel de sincronía):

lvs -a

Para comprobar los volúmenes que forman parte del RAID:

lsblk
  • -o indica el formato de salida del estado, al poner +devices añade información sobre los volúmenes físicos empleados en el RAID.
  • --stripes indica cuantos discos (del grupo de volúmenes) se usan activamente en la distribución de los datos.

En un RAID 0 con stripe 2 (el mínimo para poder hacerlo), sería:

Disco 1     Disco 2
A1 B1 C1    A2 B2 C2

Recuerde que RAID 1 hace mirroring, por lo que no se hace striping, pero requiere como mínimo dos discos:

Disco 1     Disco 2
A B C       A B C

Para crear un RAID 1+0, se necesitan 4 volúmenes físicos como mínimo previamente para crear un RAID 1+0, pues combina ambos RAID.

lvcreate --type raid10 --mirrors 1 --stripes 2 --size 20G --name raid0 vg_prueba

Para RAID 1+0, la cuenta de discos necesario es:

stripes * (mirrors + 1) = 2 * (1 + 1) = 4 discos.

Para reemplazar un volumen físico del RAID por otro, puede hacer:

lvconvert --replace /dev/vda vg_prueba/raid0 /dev/vdb

o, de manera síncrona:

pvmove /dev/vda /dev/vdb

Hay un artículo Wikipedia que describe los niveles de RAID de manera muy detallada.

NOTA: Es mejor gestionar RAID con mdadm y luego combinarlo con lvm para la gestión de volúmenes, pero el material oficial de la asignatura prefiere usar lvm.

Paso 8: GlusterFS

GlusterFS es un sistema de archivos cliente-servidor de almacenamiento en red escalable. También puede consultar official documentation para más detalles.

Algunos conceptos:

  • Nodo: máquina que proporciona espacio de almacenamiento.
  • Pool: Un conjunto de nodos.
  • Cliente: máquina en la que se monta un volumen

y con respecto al almacenamiento:

  • Brick: Unidad mínima de almacenamiento (dada por un sistema de archivos exportado por un nodo). En cada nodo se define un brick.
  • Volumen: unidad lógica compuesta por bricks de uno o varios nodos.

Paso 8.1: Instalar el servidor GlusterFS

Para instalar Glusterfs:

apt install glusterfs-server
systemctl enable --now glusterd
systemctl start glusterd
systemctl status glusterd

Puedes consultar los logs en: /var/log/glusterfs/glusterd.log

Puedes comprobar que el servicio está activo verificado que el puerto TCP/24007 está activo:

ss -ltn

La orden ss muestra con esta opción los servicios TCP (-t) que están escuchando (-l, de listen) y usando la notación numérica (-n).

Si vamos a construir un pool con dos nodos, tenemos que editar /etc/hostname y /etc/hosts de lo contrario tendremos problemas al crear un pool.

Si clonas una máquina virtual tras la instalación de los paquetes, tienes que volver a crear el identificador único del nodo tal aquí.

Paso 8.1.1. Editar /etc/hostname

Gluster requiere nombres únicos para identificar a las máquinas que forman parte del pool:

nano /etc/hostname

Y pones server1.

Tras esto, hay que reiniciar el sistema para que el cambio de nombre surta efecto.

Para la segunda máquina, pones server2. Y así sucesivamente.

Es fundamental que todas las máquinas del pool tengan nombres únicos, de lo contrario gluster no va a funcionar.

Paso 8.1.2. Editar el /etc/hosts

Suponiendo que el nodo 2 tiene la dirección IP 192.168.122.75 y el nodo 1 tiene la IP 192.168.122.175, hay que editar /etc/hosts con:

127.0.0.1 localhost
192.168.122.175 server1
192.168.122.75 server2

en todas las máquinas que formen parte del pool.

Paso 8.2: Gestionar el pool de servidores

Para añadir el nodo 1 y al 2 al mismo pool, desde el nodo 2 hay que invocar:

gluster peer probe server1

Ahora tienes que comprobar la lista de nodos del clúster en el pool:

gluster pool list

que muestra desde el nodo 1 lo siguiente:

UUID                                   Hostname     State
ca4b43a2-aa4b43a2-bb3422cc-a4540010    server2     Connected
ba4bbba2-bb4bbba2-cc3422cc-aaabff67    localhost    Connected

Comprobar el estado de los nodos:

gluster peer status

que muestra:

Number of peers: 1

Hostname: server2
Uuid: ca4b43a2-aa4b43a2-bb3422cc-a45400S10
State: Peer in Cluster (Connected)

Es posible borrar un nodo mediante la siguiente orden:

gluster peer detach server2

Paso 8.3: Gestionar el almacenamiento

En ambos nodos cree una carpeta:

mkdir -p /data/myvol1/brick1

En uno de los nodos, puede crear el volumen:

gluster volume create myvol1 replica 2 server1:/data/myvol1/brick1 server2:/data/myvol1/brick1

Nota: Si la carpeta está en el raíz, entonces hay que añadir force al final de la orden anterior.

Y para iniciar el volumen:

gluster volume start myvol1

Para listar los volúmenes existentes:

gluster volume list

Puede comprobar la información y el estado del volumen:

gluster volume info
gluster volume status

Además, cada nuevo volumen de glusterfs abre un puerto TCP que se puede observar con:

ss -ltnp

La opción -p muestra el proceso asociado a dicho puerto, se puede observar que es un proceso de glusterfsd. Esta información sobre los puertos TCP asociados al volumen también aparece en la información destatus:

gluster volume status

Puede extender también un volumen existente con:

mkdir -p /data/myvol1/brick2
gluster volume add-brick myvol1 server1:/data/myvol1/brick2

En caso de necesitar borrar un volumen de red, puedes invocar:

gluster volume stop myvol1
gluster volume delete myvol1

parando el volumen en primer lugar para luego borrarlo.

Paso 8.4: Cliente GlusterFS

Primero instala el paquete de cliente de GlusterFS.

apt install glusterfs-client

Desde el cliente, puede montar el volumen con:

mount -t glusterfs server1:/myvol1 /mnt

Anexo