Sistemas de archivos

De Wiki de Sistemas Operativos
Revisión del 10:22 20 nov 2025 de Pneira (discusión | contribuciones) (Paso 5: Montar y desmontar sistema de ficheros)
Saltar a: navegación, buscar

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

Vamos a usar cualquier máquina virtual de ubuntu 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/ubuntu-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 ubuntu 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.
  • 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

Hay un fichero de configuración del sistema /etc/fstab (fstab viene de file system table) que permite indicar que se monte un sistema de ficheros 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: Creación de un RAID

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.

Paso 6.1: Añadir discos a la máquina virtual

Como explicamos en el Paso 1, vamos a añadir a una máquina virtual 2 discos duros de 5GB cada uno.

Paso 6.2: Instalación de la herramienta de mdadm

Por defecto, esta herramienta viene instalada en el ubuntu cloud server, pero en el caso de utilizar otra distribución diferente, necesitaremos instalarla:

sudo apt install mdadm

Paso 6.3: Utilización de la herramienta de mdadm

Empezamos escribiendo el comando, y luego pasamos a explicar los detalles:

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/vdb /dev/vdc

Explicamos los parámetros:

  1. --create: para crear el raid
  2. --verbose: nos muestra más información del proceso
  3. /dev/md0: El nombre del nuevo raid, normalmente se utiliza md0
  4. --level=1: crea un raid 1 que es el que queremos
  5. --raid-devices=2: cantidad de dispositivos que vamos a utilizar, 2 en nuestro caso
  6. /dev/vdb1: Nombre de la partición 1
  7. /dev/vdc1: Nombre de la partición 2

Una vez ejecutado el comando, creará el RAID 1, pasemos ahora a ver los detalles:

sudo mdadm --detail /dev/md0

Esto nos mostrará la información del RAID, lo que a nosotros nos interesa son las últimas líneas:

           Name : ubuntu:0  (local to host ubuntu)
           UUID : e40ba520:5ed1bd37:5c818550:03a18368
         Events : 17

Number   Major   Minor   RaidDevice State
   0       252     17        0      active sync   /dev/vdb1
   1       252     33        1      active sync   /dev/vdc1

Aqui vemos el UUID de nuestro RAID, y también veremos en las dos última líneas, 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 6.4: Guardar la configuración del RAID

Vamos a modificar la configuración, tendremos que editar el fichero /etc/mdadm/mdadm.conf y debajo de la línea que pone '# definitions of existing MD arrays', añadir lo siguiente:

ARRAY /dev/md0 UUID=e40ba520:5ed1bd37:5c818550:03a18368

Recuerda que el UUID lo puedes consultar con la orden:

mdadm --detail /dev/md0

Busca el campo UUID.

Tras actualizar /etc/mdadm/mdadm.conf, tienes que invocar la siguiente orden:

update-initramfs -u

Esto asegura que en el próximo arranque el RAID usa la unidad /dev/md0.

Paso 6.5: Particionar y formatear el RAID

Como explicamos en los Pasos 2, 3 y 4, vamos a particionar el disco RAID:

lsblk  # comprobamos los dicos, en mi caso sería md0
sudo fdisk /dev/md0

Ahora vamos a formatear la partición:

sudo mkfs -t ext4 /dev/md0p1

Paso 6.6: Montar el RAID

Como previamente hemos hecho, crearemos una carpeta donde montar el RAID y lo montaremos usando el comando mount:

mkdir /home/ubuntu/datos
sudo mount /dev/md0p1 /home/ubuntu/datos
sudo chown -R ubuntu /home/ubuntu/datos

Así ya tenemos nuestro RAID montado y podemos utilizarlo, vamos a probar a escribir en él.

touch /home/ubuntu/datos/fichero

Esto está funcionando, pero como comentamos en uno de los pasos previos, el comando mount solo montará el raid temporalmente, para automatizar este montado al arrancar, tendremos que añadir la siguiente línea a /etc/fstab:

/dev/md0p1 /home/ubuntu/datos ext4 defaults

Paso 6.7: Comprobar tolerancia a fallos

Vamos a probar que sin un disco duro, todo sigue funcionando bien, ya que al tener un RAID 1 y tener los datos en espejo, no debería de haber problemas.

La siguiente orden marca el disco /dev/sdb como dañado:

mdadm --fail /dev/md0 /dev/sdb

Podemos ver con la siguiente orden que el disco aparece como faulty:

mdadm --detail /dev/md0

Sin embargo, podemos ver que el sistema de ficheros sigue montado y el contenido sigue estando disponible.

ls /home/ubuntu/datos/

Podéis retirar definitivamente el disco defectuoso con la orden:

mdadm --remove /dev/md0 /dev/sdb

Para volver a incluirlo en el RAID:

mdadm --add /dev/md0 /dev/sdb

Podéis consultar que está sincronizando con la orden:

mdadm --detail /dev/md0

Que mostrará el disco /dev/sdb en estado spare rebuilding y mostrará el porcentaje de sincronización.

Finalmente, para destruir el RAID, basta hacer:

mdadm --stop /dev/md0

Paso 7: 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:

sudo 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 7.1: Creación de volumen físico LVM (PV)

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

lsblk

En virtualbox podemos crear nuevas unidades almacenamiento y añadirlas a la máquina virtual.

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

pvcreate /dev/sdb

Recuerde que la unidad /dev/sdb 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/sdb:

pvremove /dev/sdb

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/sdb /dev/sdc

y prueba a borrarlo de nuevo. La orden lsblk ofrece información acerca del uso de los volúmenes físicos.

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

Para crear un grupo, empleamos el comando vgcreate:

vgcreate vg_prueba /dev/sdb /dev/sdc

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.

Para eliminar un grupo vgremove:

vgremove vg_prueba

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

vgextend vg_prueba /dev/sde

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:

vgreduce vg_prueba /dev/sde

Para mostrar todos los grupos de volumenes existentes

vgscan

Paso 7.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

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

Justo después tienes que redimensionar el sistema de ficheros:

resize2fs /dev/vg_prueba/volumen1

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 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 glusterd
systemctl start 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 ubuntu1.

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

Para la segunda máquina, pones ubuntu2. 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 ubuntu1
192.168.122.75 ubuntu2

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 ubuntu1

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    ubuntu2     Connected
ba4bbba2-bb4bbba2-cc3422cc-aaabff67    localhost    Connected

Comprobar el estado de los nodos:

gluster peer status

que muestra:

Number of peers: 1

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

Es posible borrar un nodo mediante la siguiente orden:

gluster peer detach ubuntu2

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 ubuntu1:/data/myvol1/brick1 ubuntu2:/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

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 ubuntu1:/myvol1 /mnt

Paso 9: Redimensionar tamaño del disco virtual de imagen Ubuntu cloud ya importada en libvirt

Con la máquina virtual apagada, desde el anfritrión:

qemu-img resize ubuntu-18.04-server-cloudimg-arm64.img +8G

Para darle 8 GBytes más de espacio.

Ahora, desde la máquina virtual, aumentamos el tamaño de la partición:

sudo growpart /dev/sda 1

Y, a continuación, redimensionamos el sistema de ficheros:

sudo resize2fs /dev/sda1 +8G