Cómo crear un disco virtual en Linux?
Al administrar servidores, a menudo se necesita espacio en disco flexible: almacenamiento ultrarrápido temporal para la caché, un contenedor aislado para probar sistemas de archivos, un volumen cifrado para datos confidenciales o la capacidad de ampliar un disco sobre la marcha sin interrumpir un servicio. En todos estos casos, la solución es crear un disco virtual: un dispositivo de bloques que no está directamente vinculado a un soporte físico.
En este artículo, mostraremos cómo crear discos virtuales de cuatro tipos principales en Linux: dispositivos de bucle (basado en archivos), tmpfs (en RAM), volúmenes LVM (gestión flexible) y Cifrado LUKSPara cada tipo, proporcionamos instrucciones paso a paso con comandos y ejemplos de resultados reales. El material está dirigido a administradores de sistemas, ingenieros de DevOps, desarrolladores y cualquier persona que trabaje con servidores, incluidos los entornos en la nube.
Terminología
- Disco virtual – un dispositivo de bloques (/dev/algo) que no corresponde a un disco físico. Puede ser un archivo, parte de RAM, un volumen lógico o una capa cifrada.
- Dispositivo de bucle (/dev/loop*) – un mecanismo que permite presentar un archivo ordinario como un dispositivo de bloques. Se utiliza para montar imágenes ISO y crear discos virtuales a partir de archivos.
- tmpfs – un sistema de archivos temporal que almacena datos en RAM (Cuando la memoria es escasa, utiliza la memoria de intercambio). Es muy rápido, pero se pierden datos al reiniciar.
- LVM (Administrador de volúmenes lógicos) – Un subsistema que añade una capa de abstracción entre los discos y los sistemas de archivos. Permite combinar discos, redimensionar volúmenes y crear instantáneas.
- Instantánea – una copia “congelada” instantánea de un volumen que ocupa poco espacio y permite revertir los cambios.
- Aprovisionamiento ligero – una tecnología en la que se asigna un tamaño máximo a un volumen virtual, pero el espacio físico se destina únicamente a los datos que se escriben realmente.
- LUKS (Linux Configuración de clave unificada) – un estándar de cifrado de disco que funciona sobre el mapeador de dispositivos.
Cómo funcionan los discos virtuales
El Linux El kernel trabaja con dispositivos de bloques a través de una interfaz unificada. Cuando un programa o sistema de archivos accede a /dev/loop0 or /dev/mapper/secret, el kernel redirige las solicitudes al controlador apropiado: un dispositivo de bucle lee/escribe en un archivo ordinario, tmpfs a RAM, LVM a volúmenes físicos según una tabla de asignación, y dm-crypt primero descifra los datos (en lectura) o los cifra (en escritura).
Esto permite crear “discos” donde no existe ningún disco físico y lograr las propiedades deseadas: velocidad, aislamiento, cifrado transparente o tamaño redimensionable.
Casos de uso prácticos (Escenarios principales)
| Escenario | Tipo de disco virtual | Por que elegirlo |
|---|---|---|
| Caché rápido, archivos de compilación temporales | tmpfs | Velocidad máxima, limpieza automática |
| Montar una imagen ISO sin escribir en un medio físico | loops | Sencillez, no se necesita accionamiento físico. |
| Expansión de disco flexible en un servidor en funcionamiento | LVM | Cambiar el tamaño sin recrear el sistema de archivos. |
| Copia de seguridad instantánea antes de una actualización | Instantánea de LVM | Tarda segundos y ocupa poco espacio. |
| Almacenamiento de secretos (bases de datos, certificados) | LUKS (dm-crypt) | Sin la contraseña, no se pueden leer los datos. |
| Ahorro de espacio en virtualización o contenedores | aprovisionamiento ligero de LVM | Se asignaron 100 GB, se utilizaron 10 GB. |
Guía práctica: Cómo crear un disco virtual en Linux
Todos los comandos se ejecutan con sudo (Si no eres el usuario root). Se proporcionan ejemplos de salida para su verificación.
1. Creación de un disco virtual mediante un dispositivo de bucle (a partir de un archivo)
Meta: crear un archivo disco_virtual.img, conviértelo en el dispositivo de bloques /dev/loop0Formatéalo y móntalo.
Crea un archivo vacío de 1 GB:
sudo dd if=/dev/zero of=virtual_disk.img bs=1M count=1024
Rendimiento esperado:
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.123456 s, 8.7 GB/s
Asocie el archivo con un dispositivo de bucle libre:
sudo losetup --find --show virtual_disk.img
Salida esperada (el número del dispositivo de bucle puede variar):
/dev/loop0
Compruebe que el dispositivo haya aparecido (utilice el número de dispositivo de bucle que se muestra a partir de este paso):
lsblk /dev/loop0
Rendimiento esperado:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 1G 0 loop
Cree un sistema de archivos (ext4):
sudo mkfs.ext4 /dev/loop0
Resultado esperado (abreviado):
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
...
Writing superblocks and filesystem accounting information: done
Móntalo:
sudo mkdir -p /mnt/vdisk
sudo mount /dev/loop0 /mnt/vdisk
df -h /mnt/vdisk
Rendimiento esperado:
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 974M 24K 907M 1% /mnt/vdisk
Una vez finalizado, desmonte y suelte el dispositivo de bucle:
sudo umount /mnt/vdisk
sudo losetup -d /dev/loop0
2. Creación de un disco tmpfs en RAM
Meta: se le pedirá crear /mnt/ramdisk partición de 2 GB que funciona en RAM.
Cree el punto de montaje y monte tmpfs con un límite de 2 GB:
sudo mkdir -p /mnt/ramdisk
sudo mount -t tmpfs -o size=2G tmpfs /mnt/ramdisk
Rendimiento esperado: <font dir="auto" style="vertical-align: inherit;">las </font> montar El comando no imprime nada si tiene éxito.
Verificar:
df -h /mnt/ramdisk
Rendimiento esperado:
Filesystem Size Used Avail Use% Mounted on
tmpfs 2.0G 0 2.0G 0% /mnt/ramdisk
(Opcional) Compruebe la velocidad de escritura:
dd if=/dev/zero of=/mnt/ramdisk/test bs=1M count=500
Rendimiento esperado: velocidad muy alta (gigabytes por segundo).
Elimine el archivo de prueba y desmonte el equipo (se perderán los datos):
sudo rm /mnt/ramdisk/test
sudo umount /mnt/ramdisk
Montaje automático al arrancar: agregar una línea a / etc / fstab:
tmpfs /mnt/ramdisk tmpfs defaults,size=2G 0 0
3. Creación de un volumen LVM (disco virtual lógico)
Meta: desde el disco / dev / vdb Cree un volumen físico (PV), un grupo de volúmenes (VG) y un volumen lógico (LV) de 10 GB, y luego amplíelo a 15 GB sin desmontarlo.
Nota: : trabajar con particiones requiere la lvm2 paquete (Administrador de volumen lógico).
Supongamos que tiene un disco adicional. / dev / vdb (o / dev / sdb) sin particiones en él (para borrar particiones (se perderán los datos, No utilice un disco que contenga datos importantes.) utilizar sudo wipefs -a /dev/sdb).
Crear un volumen físico:
sudo pvcreate /dev/vdb
Rendimiento esperado:
Physical volume "/dev/vdb" successfully created.
Crear un grupo de volúmenes:
sudo vgcreate vg_data /dev/vdb
Rendimiento esperado:
Volume group "vg_data" successfully created
Cree un volumen lógico de 10 GB:
sudo lvcreate -L 10G -n lv_storage vg_data
Rendimiento esperado:
Logical volume "lv_storage" created.
Formatear y montar:
sudo mkfs.ext4 /dev/vg_data/lv_storage
sudo mkdir -p /mnt/storage
sudo mount /dev/vg_data/lv_storage /mnt/storage
Salida esperada de mkfs.ext4: un mensaje sobre la creación del sistema de archivos.
Comprueba el tamaño:
df -h /mnt/storage
Rendimiento esperado:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_storage 9.8G 24K 9.3G 1% /mnt/storage
Amplíe el volumen a 15 GB (sobre la marcha):
sudo lvextend -L 15G /dev/vg_data/lv_storage
Rendimiento esperado:
Size of logical volume vg_data/lv_storage changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume vg_data/lv_storage successfully resized.
Expanda el sistema de archivos (para ext4):
sudo resize2fs /dev/vg_data/lv_storage
Rendimiento esperado:
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg_data/lv_storage is mounted on /mnt/storage; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vg_data/lv_storage is now 3932160 (4k) blocks long.
Comprueba la nueva talla:
df -h /mnt/storage
Rendimiento esperado:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_storage 15G 24K 14G 1% /mnt/storage
Creación de una instantánea (copia instantánea) para realizar copias de seguridad:
Crea una instantánea de 1 GB:
sudo lvcreate -L 1G -s -n lv_snapshot /dev/vg_data/lv_storage
Rendimiento esperado:
Logical volume "lv_snapshot" created.
Montar la instantánea y copiar los datos:
sudo mkdir -p /mnt/snapshot
sudo mount /dev/vg_data/lv_snapshot /mnt/snapshot
ls /mnt/snapshot
Después de la copia de seguridad, elimine la instantánea:
sudo umount /mnt/snapshot
sudo lvremove /dev/vg_data/lv_snapshot
Resultado esperado tras la eliminación:
Do you really want to remove active logical volume vg_data/lv_snapshot? [y/n]: y
Logical volume "lv_snapshot" successfully removed.
4. Creación de un disco virtual cifrado (LUKS)
Meta: cifrar disco /dev/vdc (o cualquier otro) usando LUKS, ábralo como /dev/mapper/secrety montarlo.
Nota: Esta operación destruirá los datos en /dev/vdc.
Nota: : trabajar con particiones requiere la cripta paquete (una utilidad de código abierto; se utiliza para configurar el cifrado de disco basado en el módulo del kernel dm-crypt).
Inicialice LUKS (establezca una frase de contraseña):
sudo cryptsetup luksFormat /dev/vdc
Rendimiento esperado:
WARNING!
========
This will overwrite data on /dev/vdc irrevocably.
Are you sure? Type uppercase yes: YES
Enter passphrase for /dev/vdc: ********
Verify passphrase: ********
Abra el dispositivo (/dev/mapper/secret se crea):
sudo cryptsetup open /dev/vdc secret
Rendimiento esperado: (después de introducir la contraseña) nada, o en modo detallado: Introduzca la contraseña para /dev/vdc:
Compruebe que el dispositivo apareció:
lsblk /dev/mapper/secret
Rendimiento esperado:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
secret 253:0 0 1G 0 crypt
Cree un sistema de archivos y móntelo:
sudo mkfs.ext4 /dev/mapper/secret
sudo mkdir -p /mnt/encrypted
sudo mount /dev/mapper/secret /mnt/encrypted
df -h /mnt/encrypted
Rendimiento esperado:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/secret 974M 24K 907M 1% /mnt/encrypted
Trabaje con el disco cifrado. Después de reiniciar, debe ejecutar cryptsetup abierto de nuevo.
Cómo cerrar y reabrir:
sudo umount /mnt/encrypted
sudo cryptsetup close secret
5. Creación de un volumen LVM delgado con ahorro de espacio
Meta: crear un pool delgado de 50 GB y un volumen para el que establecemos un "techo" de 200 GB, pero físicamente solo ocupará los datos que realmente se escriban.
Nota: : trabajar con particiones requiere la lvm2 paquete (Administrador de volumen lógico).
Cree una piscina delgada (suponga que el grupo de volumen vg_data ya existe):
sudo lvcreate -L 50G -T vg_data/thin_pool
Rendimiento esperado:
Logical volume "thin_pool" created.
Cree un volumen delgado con un tamaño virtual de 200 GB:
sudo lvcreate -V 200G -T vg_data/thin_pool -n thin_volume
Rendimiento esperado:
Logical volume "thin_volume" created.
Formatear y montar:
sudo mkfs.ext4 /dev/vg_data/thin_volume
sudo mkdir -p /mnt/thin
sudo mount /dev/vg_data/thin_volume /mnt/thin
Compruebe el uso real (Datos% — porcentaje de espacio utilizado en la piscina):
sudo lvs -a -o +pool_lv,data_percent,metadata_percent
Resultado esperado (ejemplo):
LV VG Attr LSize Pool Data% Meta%
thin_pool vg_data twi-a-tz-- 50.00g 0.01 0.02
thin_volume vg_data Vwi-a-tz-- 200.00g thin_pool 0.01
Aquí Datos% = 0.01 significa que de los 50 GB del pool solo se utilizan unos 5 MB, mientras que el volumen aparece como de 200 GB.
Conclusión
Este artículo ha mostrado cómo crear un disco virtual en Linux de cuatro maneras diferentes: un dispositivo de bucle basado en un archivo (conveniente para experimentos e imágenes), tmpfs en RAM (máxima velocidad), un volumen LVM (gestión de tamaño flexible y instantáneas) y cifrado LUKS (seguridad para datos confidenciales). Cada uno de estos métodos resuelve tareas específicas en el trabajo diario de un administrador, desarrollador o ingeniero de DevOps.
Ahora usted puede:
- Montar cualquier imagen ISO o crear un disco de prueba dentro de un archivo;
- Configurar una caché ultrarrápida o un almacenamiento temporal en la memoria;
- Administrar el espacio en disco del servidor sin interrumpir los servicios (expansión de LVM, instantáneas);
- Proteger los datos mediante cifrado;
- Ahorre espacio físico utilizando el aprovisionamiento ligero de LVM.
Utilice estas instrucciones como una guía rápida al configurar servidores, tanto propios como en infraestructura en la nube. Todos los comandos han sido probados y funcionan en la versión actual. Linux distribuciones (Ubuntu 22.04 + Debian 12 + CentOS/RHEL 9+).
700
300
700
300
700
300