Saltar al contenido
sudoquest@root
Linux

Discos y almacenamiento

Cuánto sitio queda y qué lo ocupa (df y du), qué discos hay (lsblk), formatearlos y montarlos, fstab por UUID y montar solo lectura.

25 min de lectura

En Linux no hay “unidad C:” ni “unidad D:”: hay un solo árbol de carpetas que empieza en /, y cada disco se monta en una carpeta de ese árbol. Lo que guardes en /srv/proyectos va al disco que esté montado ahí; lo demás, al disco del sistema.

En este tema aprendes a ver cuánto sitio queda y qué lo ocupa, qué discos hay, a formatear y montar uno nuevo, a hacer que se monte solo al arrancar y a leer una tarjeta sin tocarla. Los ejemplos son de nas-estudio, el servidor de ficheros de una productora de vídeo, donde se mueven terabytes.

Cuánto sitio queda: df

df (disk free) enseña cada sistema de archivos montado: su tamaño, lo usado, lo disponible, el porcentaje de uso y dónde está montado. Con -h, en unidades que se leen:

tecnico@nas-estudio:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           393M  1.1M  392M   1% /run
/dev/sda2        62G  6.6G   52G  12% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda1       1.1G  6.0M  1.1G   1% /boot/efi
/dev/sdb        3.6T  1.2T  2.3T  35% /srv/proyectos
tmpfs           393M  4.0K  393M   1% /run/user/1000

Las líneas tmpfs están en la memoria, no en un disco (se vacían al apagar). Los discos de verdad son /dev/sda2, el del sistema, montado en /; /dev/sda1, el arranque, y /dev/sdb, el de los proyectos. Con una ruta, df -h /srv/proyectos dice solo en qué disco está esa carpeta y cómo va.

Un disco también se puede llenar de archivos aunque quede espacio: cada archivo gasta un inodo, y hay un número fijo. df -i los enseña.

Ejercicio

Cuánto sitio queda: df

En la productora se mueven gigas cada día. Mira cuánto sitio queda en nas-estudio antes de que llegue el material de la próxima boda.

Preparando la máquina…

Qué ocupa el sitio: du

df dice cuánto queda; du (disk usage), qué lo ocupa. Suma lo que ocupa cada carpeta con todo lo que tiene dentro. -s da solo el total; -h, legible; -d 1, un nivel de profundidad:

tecnico@nas-estudio:~$ sudo du -h -d 1 /srv/proyectos | sort -h
16K	/srv/proyectos/lost+found
555G	/srv/proyectos/anuncio-cafe
657G	/srv/proyectos/boda-garcia
1.2T	/srv/proyectos

sort -h ordena entendiendo las letras (K, M, G, T): lo grande, al final. Con sudo porque lost+found (la carpeta donde ext4 deja lo que recupera tras un fallo) solo la lee root; sin él, du avisa y cuenta lo demás.

Ejercicio

Qué ocupa el sitio: du

El disco de proyectos está más lleno de lo que parece. Averigua qué se lo come.

Preparando la máquina…

Qué discos hay: lsblk y blkid

lsblk lista los dispositivos de bloque (los discos y sus particiones), estén o no formateados o montados. Es lo primero que se mira al conectar uno:

tecnico@nas-estudio:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0    64G  0 disk
├─sda1   8:1    0     1G  0 part /boot/efi
└─sda2   8:2    0  62.9G  0 part /
sdb      8:16   0   3.6T  0 disk /srv/proyectos
sdc      8:32   0   1.8T  0 disk
sdd      8:48   0 931.3G  0 disk
sde      8:64   1  29.7G  0 disk
└─sde1   8:65   1  29.7G  0 part

Los discos se llaman sda, sdb, sdc… por orden, y sus particiones (trozos de un disco) llevan un número: sda1, sda2. RM a 1 es extraíble (aquí, sde: la tarjeta de la cámara). sdc no está montado en ningún sitio: es el disco nuevo. lsblk -f añade el sistema de archivos, la etiqueta y el UUID; sudo blkid dice lo mismo, disco a disco:

tecnico@nas-estudio:~$ sudo blkid /dev/sdd
/dev/sdd: LABEL="copias" UUID="dd1a90d1-dc1a-4f3e-bb1a-8dabda1a8c18" BLOCK_SIZE="4096" TYPE="ext4"

findmnt /srv/proyectos (o mount | grep proyectos) dice qué disco está montado en una carpeta y con qué opciones.

Ejercicio

Qué discos hay: lsblk y blkid

Esta mañana han conectado discos nuevos a nas-estudio. Mira cuáles hay y qué tiene cada uno.

Preparando la máquina…

Un disco nuevo: mkfs y mount

Un disco recién sacado de la caja no tiene sistema de archivos: la estructura que organiza carpetas y archivos. Se la da mkfs; en Ubuntu, ext4:

tecnico@nas-estudio:~$ sudo mkfs.ext4 /dev/sdc
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 488281250 4k blocks and 122077184 inodes
Filesystem UUID: f49c8dad-f39c-4c1a-b29c-8a87f19c88f4
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

Formateado, se monta en una carpeta vacía (el punto de montaje), que hay que crear:

tecnico@nas-estudio:~$ sudo mkdir /srv/archivo
tecnico@nas-estudio:~$ sudo mount /dev/sdc /srv/archivo
tecnico@nas-estudio:~$ df -h /srv/archivo
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        1.8T   24K  1.7T   1% /srv/archivo

Desde ahora, lo que se guarde en /srv/archivo va a sdc. sudo umount /srv/archivo (sin “n”: umount) lo desmonta; si alguien lo está usando (una terminal dentro de la carpeta), dice “target is busy”. Desmontado, el disco no pierde nada, pero su carpeta vuelve a ser la de antes, vacía y en el disco del sistema: si una carpeta que debería tener datos sale vacía, df -h de esa carpeta dice / en vez del disco.

Ejercicio

Un disco nuevo: mkfs y mount

El disco de 2 TB que acaba de llegar (sdc) será el archivo de proyectos entregados. Está sin formato: déjalo listo en /srv/archivo.

Preparando la máquina…

Que se monte al arrancar: /etc/fstab

Lo montado con mount se desmonta al apagar. Para que un disco se monte cada vez que arranca el servidor, va en /etc/fstab: una línea por montaje, con seis campos: qué (el disco), dónde, el tipo, las opciones, y dos números (copia con dump, casi siempre 0; y el orden de la comprobación al arrancar: 1 la raíz, 2 los demás).

tecnico@nas-estudio:~$ tail -1 /etc/fstab
UUID=c4c404e5-c3c4-4352-b2c4-01bfc1c4002c /srv/proyectos ext4 defaults 0 2

Una línea nueva se añade al final con tee -a (la -a es append; sin ella se borra el fstab entero) y se prueba sin reiniciar con sudo mount -a, que monta todo lo de fstab que no esté montado:

tecnico@nas-estudio:~$ echo "LABEL=copias /srv/copias ext4 defaults 0 2" | sudo tee -a /etc/fstab
LABEL=copias /srv/copias ext4 defaults 0 2
tecnico@nas-estudio:~$ sudo mount -a

Si no dice nada, está bien; findmnt --verify también revisa fstab entero. Si una línea está mal, mount -a lo dice (“parse error at line 12”, “can’t find UUID=…”): mejor saberlo ahora que en el próximo arranque, cuando el servidor podría no levantar.

Las líneas que empiezan por # son comentarios: no cuentan. Comentar una línea quita ese montaje sin borrarla; para devolverlo, se le quita el # y sudo mount -a.

Ejercicio

Que se monte al arrancar: /etc/fstab

El disco de las copias (sdd) ya tiene su sistema de archivos, pero no se monta al encender el servidor. Que lo haga, en /srv/copias.

Preparando la máquina…

Solo lectura: la tarjeta de la cámara

Hay discos que no se deben tocar: la tarjeta de un rodaje es el único original. Se monta con -o ro (read-only): se lee y se copia, pero nada puede escribir en ella, ni por error:

tecnico@nas-estudio:~$ sudo mount -o ro /dev/sde1 /mnt/tarjeta
tecnico@nas-estudio:~$ touch /mnt/tarjeta/prueba
touch: cannot touch '/mnt/tarjeta/prueba': Read-only file system

Sin -o ro, mount la monta con escritura: solo si hay que devolverle algo que le falte, y después se vuelve a montar solo lectura.

Fíjate en que se monta la partición (sde1), no el disco entero (sde): el sistema de archivos está en la partición. Copiado el material, se desmonta antes de sacarla (desde fuera de la carpeta):

tecnico@nas-estudio:/mnt/tarjeta$ sudo umount /mnt/tarjeta
umount: /mnt/tarjeta: target is busy.

Ejercicio

La tarjeta de la cámara: montar solo lectura

En el lector está la tarjeta del rodaje de ayer (sde). Copia sus vídeos a /srv/proyectos/ingesta sin arriesgarte a tocar el original.

Preparando la máquina…