Montar un disco en Linux: lsblk, particiones, mkfs, mount y fstab
Montar un disco en Linux significa conectar el sistema de archivos de una partición a un directorio del árbol, por ejemplo /data. El disco nuevo se localiza con lsblk, se particiona con fdisk o parted, se formatea con mkfs.ext4, se monta con mount /dev/sdb1 /data y, para que se monte tras reiniciar, se añade una línea con su UUID en /etc/fstab, comprobada con mount -a.
En Linux no existen letras de unidad: todos los dispositivos de almacenamiento se integran en un único árbol de directorios que empieza en /. Montar un disco en Linux es la operación que «cuelga» el sistema de archivos de una partición de un directorio vacío, llamado punto de montaje. El camino para un disco nuevo es siempre el mismo: localizar el dispositivo (lsblk), particionarlo (fdisk o parted), crear el sistema de archivos (mkfs), montarlo (mount) y fijarlo en /etc/fstab. Veremos cada paso y, además, cómo averiguar a dónde ha ido el espacio con df y du.
Cómo están organizados los discos y las particiones en Linux
El núcleo representa cada disco como un archivo de dispositivo en /dev. Los nombres dependen del tipo de conexión:
| Nombre | Qué es | Particiones |
|---|---|---|
/dev/sda, /dev/sdb | discos SATA/SAS/USB y muchos discos virtuales | /dev/sda1, /dev/sda2 |
/dev/vda | discos virtio en máquinas virtuales KVM | /dev/vda1 |
/dev/nvme0n1 | SSD NVMe | /dev/nvme0n1p1 |
/dev/mapper/... | volúmenes lógicos LVM, volúmenes cifrados | — |
El disco se divide en particiones, en cada partición se crea un sistema de archivos (ext4, xfs, btrfs) y es ese sistema el que se monta en un directorio. Mientras una partición no esté montada, sus archivos no son accesibles, aunque el disco esté conectado físicamente.
Cómo ver los discos: lsblk y blkid
El primer comando al trabajar con discos es lsblk. Muestra el árbol de dispositivos, sus tamaños y los puntos de montaje:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part /
sdb 8:16 0 100G 0 disk
Aquí se ve que sdb es un disco nuevo de 100 GB, sin particiones y sin punto de montaje. Otras opciones útiles:
lsblk -f— tipo de sistema de archivos, etiqueta y UUID de cada partición.lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL— solo las columnas necesarias.sudo blkid— UUID y tipo de sistema de archivos de todas las particiones.sudo fdisk -l— tablas de particiones de todos los discos con sus sectores.
Si el disco se añadió a una máquina virtual en caliente y lsblk no lo ve, pida al núcleo que vuelva a escanear el bus: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.
Particionar el disco: fdisk y parted
Antes de particionar, compruebe otra vez que ha elegido el dispositivo correcto: escribir la tabla de particiones en el disco del sistema destruirá los datos. Guíese por el tamaño y por la ausencia de puntos de montaje en la salida de lsblk.
GPT o MBR
Para discos nuevos use GPT: admite discos de más de 2 TB y hasta 128 particiones. MBR (dos) solo es necesario en sistemas antiguos que arrancan con BIOS y cuyo cargador lo exige.
Particionar con fdisk
El fdisk actual sabe trabajar con GPT y con MBR. Se trabaja en modo interactivo:
$ sudo fdisk /dev/sdb
Command (m for help): g # crear una tabla GPT vacía
Command (m for help): n # nueva partición
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter # todo el disco
Command (m for help): w # escribir los cambios y salir
Mientras no pulse w, no se escribe nada en el disco; con q sale sin cambios.
Particionar con parted en una sola línea
En scripts es más cómodo parted, que funciona sin diálogo:
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
Los límites en porcentaje dan una alineación correcta de la partición. Si la nueva partición no aparece, ejecute sudo partprobe /dev/sdb para que el núcleo vuelva a leer la tabla.
Crear el sistema de archivos: mkfs
Una partición es solo un rango de bloques. Para guardar archivos hay que crear sobre ella un sistema de archivos:
$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done
La clave -L asigna una etiqueta con la que luego es fácil reconocer la partición. Cómo elegir:
| Sistema de archivos | Comando | Cuándo conviene |
|---|---|---|
| ext4 | mkfs.ext4 | opción universal por defecto; permite reducirse |
| XFS | mkfs.xfs | archivos y volúmenes grandes; es el estándar en RHEL; solo puede crecer |
| Btrfs | mkfs.btrfs | instantáneas, compresión, subvolúmenes |
| vfat/exFAT | mkfs.vfat, mkfs.exfat | memorias USB para intercambiar datos con Windows y macOS |
mkfs borra todo lo que hubiera en la partición. El comando no pide confirmación en una partición vacía, así que compruebe de nuevo el nombre del dispositivo.
Cómo montar un disco en Linux con mount
Cree un directorio, el punto de montaje, y conecte a él la partición:
$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 98G 24K 93G 1% /data
El tipo de sistema de archivos lo detecta mount por sí mismo, pero puede indicarse de forma explícita: mount -t xfs. Si en /data ya había archivos, no se eliminan al montar: quedan ocultos bajo el nuevo sistema de archivos y reaparecen al desmontarlo.
Opciones de montaje
Las opciones se pasan con -o, separadas por comas:
ro/rw— solo lectura o lectura y escritura.noatime— no actualizar la hora de acceso en cada lectura, con menos escrituras innecesarias.noexec— impedir la ejecución de programas desde esta partición (útil para/tmpy directorios de descargas).nosuid,nodev— ignorar los bits SUID y los archivos de dispositivo.remount— cambiar las opciones sin desmontar:sudo mount -o remount,ro /data.
Para ver qué está montado y con qué opciones, es cómodo findmnt: findmnt /data o findmnt -t ext4.
Permisos en el disco montado
La raíz de un ext4 nuevo pertenece a root, así que un usuario normal no podrá escribir en ella. Asigne el directorio al usuario necesario después de montar: sudo chown alice:alice /data. En vfat y exFAT no hay permisos Unix: el propietario se fija con las opciones uid=, gid= y umask= al montar.
Cómo desmontar un disco: umount y el error target is busy
Para desconectar se usa umount (sin la n) con el dispositivo o el directorio:
$ sudo umount /data
umount: /data: target is busy.
El error indica que algún proceso tiene archivos abiertos en ese sistema de archivos o usa un directorio de él como directorio actual; a menudo es su propia terminal tras un cd /data. Para identificar al culpable sirven:
$ sudo lsof +f -- /data
$ sudo fuser -vm /data
Detenga el proceso o salga del directorio y vuelva a intentarlo. Como último recurso está umount -l (lazy): el sistema de archivos se desconecta del árbol de inmediato y se libera cuando los procesos cierran sus archivos.
Montaje automático al arrancar: /etc/fstab
El comando mount tiene efecto hasta el próximo reinicio. Para que el disco se conecte solo, añada una línea a /etc/fstab. Indique la partición por UUID y no por el nombre /dev/sdb1: los nombres pueden intercambiarse al añadir discos, mientras que el UUID es permanente.
$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."
El formato de la línea tiene seis campos:
# <dispositivo> <punto> <tipo> <opciones> <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77 /data ext4 defaults,noatime 0 2
| Campo | Significado |
|---|---|
| dispositivo | UUID=..., LABEL=... o una ruta |
| punto | directorio donde se monta (debe existir) |
| tipo | ext4, xfs, swap, nfs, etc. |
| opciones | defaults más las necesarias, por ejemplo noatime, nofail |
| dump | casi siempre 0 |
| fsck | orden de comprobación: 1 para la raíz, 2 para el resto, 0 para no comprobar |
Compruebe fstab antes de reiniciar
Un error en /etc/fstab puede dejar el servidor en modo de emergencia al arrancar, y en una máquina en la nube sin consola eso resulta muy molesto. Justo después de editar el archivo, ejecute:
$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data
mount -a monta todo lo de fstab que aún no esté montado y muestra el error de inmediato. Para discos extraíbles o de red añada la opción nofail: si falta el dispositivo, el arranque continúa sin él. En systemd cada línea de fstab se convierte en una unidad .mount, por ejemplo data.mount, cuyo estado se ve con systemctl status data.mount.
Cómo ver el espacio libre: df
df muestra la ocupación de los sistemas de archivos montados:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 39G 37G 1.1G 98% /
/dev/sda1 974M 180M 727M 20% /boot
/dev/sdb1 98G 24K 93G 1% /data
-h— tamaños en unidades legibles.-T— añade la columna con el tipo de sistema de archivos.-i— muestra los inodos: un disco puede quedarse sin sitio con gigabytes libres si se han creado demasiados archivos pequeños.-x tmpfs -x devtmpfs— oculta los sistemas de archivos virtuales.
¿Por qué Size no es igual a Used + Avail? ext4 reserva cerca de un 5 % del espacio para root, de modo que el sistema pueda funcionar incluso con el disco lleno. En una partición de datos esa reserva se puede reducir: sudo tune2fs -m 1 /dev/sdb1.
¿Adónde se ha ido el espacio? du
df dice que el disco está lleno, pero no dice qué lo ocupa. Para eso está du, que suma el tamaño de los archivos en los directorios:
$ sudo du -sh /var/log
4.2G /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G /
21G /var
9.8G /home
3.1G /usr
-s— solo el total por directorio;-a— cada archivo por separado.--max-depth=1(o-d 1) — un nivel de profundidad; baje más en el directorio más grande.-x— no cambiar a otros sistemas de archivos; si no, en el total entrarían/data,/procy los discos de red.sort -rh— ordena por tamaños legibles, lo más grande arriba.
Para localizar archivos grandes concretos es más cómodo find: sudo find / -xdev -type f -size +1G -exec ls -lh {} +.
df muestra el disco lleno, pero du no
Situación clásica: se borra un log enorme y el espacio no se libera. El archivo desaparece del directorio, pero un proceso (por ejemplo, el servidor web) sigue teniéndolo abierto, y los bloques no se liberan. Para encontrar estos archivos:
$ sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
nginx 812 www 5w REG 8,2 8589934592 0 13054 /var/log/nginx/access.log (deleted)
Reinicie el proceso o pídale que vuelva a abrir sus logs, y el espacio regresará. Para el futuro, vacíe un log activo sin borrarlo: sudo truncate -s 0 /var/log/nginx/access.log. La otra causa de la diferencia son los archivos ocultos bajo un punto de montaje: ocupan espacio en la partición raíz, pero du no los ve mientras encima hay montado otro sistema de archivos.
Errores habituales y cómo corregirlos
| Mensaje | Causa | Qué hacer |
|---|---|---|
mount point /data does not exist | no existe el directorio | sudo mkdir -p /data |
wrong fs type, bad option, bad superblock | en la partición no hay sistema de archivos, el tipo es otro o falta el controlador | revisar lsblk -f; para exFAT/NTFS instalar exfatprogs o ntfs-3g |
only root can do that | montaje sin sudo | ejecutar con sudo o añadir la opción user en fstab |
target is busy | el directorio está ocupado por un proceso | lsof/fuser, salir del directorio |
| arranque en modo de emergencia | error en fstab o falta el disco | entrar como root, corregir fstab y añadir nofail |
Paso a paso: disco nuevo para datos
lsblk— localizar el disco nuevo, por ejemplo/dev/sdb.sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%— particionar.sudo mkfs.ext4 -L data /dev/sdb1— crear el sistema de archivos.sudo mkdir -p /data— crear el punto de montaje.sudo blkid /dev/sdb1— obtener el UUID y añadir la línea a/etc/fstab.sudo mount -a && df -h /data— montar y comprobar.sudo chown usuario: /data— asignar los permisos.
Si más adelante hará falta ampliar el espacio sin detener el servicio, o combinar varios discos, en lugar de una partición normal se usa LVM: el disco se convierte en un volumen físico, del que se reparten volúmenes lógicos que crecen con lvextend -r.
Resumen
Montar un disco en Linux se reduce a la cadena lsblk → particionado → mkfs → mount → /etc/fstab. Indique las particiones por UUID, compruebe fstab con mount -a antes de reiniciar y use nofail en los discos no imprescindibles. Cuando se acaba el espacio, df -h muestra qué partición está llena, y du -xh --max-depth=1 | sort -rh junto con lsof +L1 indican qué la ocupa. Los discos, las particiones, la memoria de intercambio, LVM y RAID se practican en la lección del curso de Linux.
Preguntas frecuentes
¿Cómo montar una memoria USB en Linux?
Localícela con lsblk (normalmente /dev/sdb1), cree un directorio y ejecute sudo mount /dev/sdb1 /mnt/usb. En los entornos gráficos las memorias USB se montan solas en /media/nombre_de_usuario o en /run/media.
¿Cómo montar una imagen ISO?
Con sudo mount -o loop,ro imagen.iso /mnt/iso: la opción loop conecta el archivo como si fuera un dispositivo de bloques. Para desmontarla se usa umount de forma habitual.
¿Cómo conectar una carpeta de red en fstab?
Para NFS la línea es servidor:/exportacion /mnt/nfs nfs defaults,_netdev,nofail 0 0; para SMB, //servidor/recurso /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. La opción _netdev espera a que la red esté activa.
¿En qué se diferencia UUID de PARTUUID?
El UUID pertenece al sistema de archivos y cambia al volver a ejecutar mkfs; el PARTUUID pertenece a la partición en la tabla GPT y se conserva al reformatear. En fstab normalmente se usa el UUID.
¿Cómo comprobar errores en un sistema de archivos?
Desmonte la partición y ejecute sudo fsck -f /dev/sdb1 para ext4, o sudo xfs_repair /dev/sdb1 para XFS. No se debe comprobar un sistema de archivos montado con escritura, porque podría dañar los datos.
Este tema se explica a fondo y con práctica en el curso «Linux: с нуля до уверенного администрирования».
Ir al curso