Tabla de Contenidos
203.1 Operating the Linux filesystem
Pertenece a LPI Topic 203: Filesystem and Devices
- Weight: 4
- Description: Candidates should be able to properly configure and navigate the standard Linux filesystem. This objective includes configuring and mounting various filesystem types.
- Key Knowledge Areas:
- The concept of the fstab configuration
- Tools and utilities for handling swap partitions and files
- Use of UUIDs for identifying and mounting file systems
- Understanding of systemd mount units
- Terms and Utilities:
/etc/fstab/etc/mtab/proc/mountsmountandumountblkidsyncswaponswapoff
Sistema de ficheros
El sistema de archivos (filesystem) sirve para organizar un espacio de almacenamiento bruto.
Para poder utilizar (leer y escribir) ese almacenamiento por parte del sistema operativo, debe estar organizado de cierta manera que el sistema pueda entender.
Aunque normalmente se dice que se va a dar formato a un espacio de almacenamiento, en los entornos Linux se dice que se va a crear un sistema de archivos.
Existen muchos tipos de sistemas de archivos, de los cuales los más comunes en entornos Linux son ext y xfs.
Tipos
- EXT2: sin journal. Buena opción para particiones pequeñas, pero hoy en día no se utiliza.
- EXT3: igual que su predecesor pero con journal añadido.
- EXT4: Posibilidad de trabajar con sistemas de ficheros grandes (1EB) y tamaño máximo de archivo (16TB)
- ReiserFS: con journal (de los primeros en implementarlo) y útil para trabajar con sistemas de ficheros grandes y muchos archivos. No se usa demasiado hoy en día. Sería equivalente al EXTended.
- JFS: Desarrolado por IBM
- XFS: Robusto, rápido y flexible (tamaño máximo de archivo 8 EB). Muy utilizado y permite la creación dinámica de inodos.
- Btrfs: Experimental. Similar a ext4 (posiblemente lo sustituirá).
- FAT: propios de DOS y Windows.
- NTFS: propio de Windows modernos. Lectura y sobrescritura desde Linux posible.
- HFS/HFS+: Mac. Limitaciones de escritura.
- ISO-9660: Standard para CD-ROMS/DVD.
El journal es una memoria caché donde las operaciones de escritura se van almacenando antes de realizarse. Si hay un corte de luz, estas operaciones no se perderían.
| Sistema | Tamaño máx. volumen | Tamaño máx. fichero | Journaling | Fecha límite archivo |
|---|---|---|---|---|
| ext2 | 32 TB | 2 TB | No | 2038 |
| ext3 | Sí | 2038 | ||
| ext4 | 1 EB | 16 TB | Sí | 2514 |
Sistemas de ficheros virtuales de Linux
Son sistemas de ficheros que se generan en tiempo de ejecución (solo cuando está corriendo el sistema operativo) y permiten acceder a determinadas partes del sistema. Sobre todo trabajan con el kernel y el hardware.
Al acceder a ellos, aunque estén representados como ficheros y directorios, realmente son instrucciones del kernel y del hardware.
- proc: muestra los elementos del sistema relacionados con la gestión de procesos y hardware del sistema. Ejemplo
/proc/cpuinfo) - sysfs: permite visualizar elementos del sistema relacionados con los periféricos. Ejemplo
cat /sys/block/sda/removable. Es una evolución de proc.
proc
El sistema de archivos virtual proc (o procfs), generalmente montado en el directorio /proc, permite la visualización de los elementos del sistema relacionados con la gestión de procesos por parte del núcleo. Además, proc muestra algunos datos sobre el
hardware del sistema.
Mostrar información sobre la CPU:
cat /proc/cpuinfo
Salida:
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU L5420 @ 2.50GHz stepping : 6 microcode : 0x60f cpu MHz : 2003.000 cache size : 6144 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 4 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm pti tpr_shadow vnmi flexpriority vpid dtherm vmx flags : vnmi flexpriority tsc_offset vtpr vapic bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 5018.00 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: (...)
sys
El sistema de archivos virtual sys (o sysfs), generalmente montado en el directorio /sys, permite visualizar elementos de sistema relacionados con los periféricos.
Visualización de capacidades hotplug de un disco duro (1) o no (0):
cat /sys/block/sda/removable
Salida:
0
Montar sistema de archivos
Para poder utilizar un sistema de ficheros es preciso montarlo primero. Montar significa conectar físicamente la partición con cierto sistema de ficheros con una ruta del sistema.
Para visualizar los sistemas de archivos ya montados tenemos varias posibilidades:
- Comando
mount(sin argumentos) - Fichero
/etc/mtab. - Fichero
/proc/mounts
# cat /etc/mtab sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,nosuid,relatime,size=489392k,nr_inodes=122348,mode=755 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=101088k,mode=755 0 0 /dev/mapper/debian--10--vg-root / ext4 rw,relatime,errors=remount-ro 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0 tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0 cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0 cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9651 0 0 mqueue /dev/mqueue mqueue rw,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0 sunrpc /run/rpc_pipefs rpc_pipefs rw,relatime 0 0 /vagrant /vagrant vboxsf rw,nodev,relatime,iocharset=utf8,uid=1000,gid=1000 0 0 /dev/sda1 /boot ext2 rw,relatime 0 0 vagrant /vagrant vboxsf rw,nodev,relatime,iocharset=utf8,uid=1000,gid=1000 0 0 tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=101084k,mode=700,uid=1000,gid=1000 0 0
Para montar un sistemas de archivos también usamos el comando mount:
mount [-t fstype ] [-o options ] [ device ] [mountpoint ]
Ejemplo:
mount –t ext4 –o rw,sync /dev/sdb1 /mnt
Opciones (-o) principales del comando mount:
defaults: Opciones por defecto del sistema de ficheros (normalmenterwyasync).loop: Monta un archivo como partición.auto/noauto: Monta o desmonta al arranque. Solo tiene sentido en el/etc/fstab.user/nouser: Permite o deshabilita que un usuario pueda montar esa partición.sync: Realiza escritura síncrona sin pasar por caché (no utilizaría el journal).remount: Vuelve a montar un sistema de ficheros con otras opciones.ro: Montaje solo lectura.rw: Montaje lectura y escritura (opción por defecto).
El montaje con mount no es persistente, es decir, se pierde cuando se reinicia el equipo. Si queremos algo permanente, tendríamos que echar mano del fichero /etc/fstab.
Desmontar sistema de archivos
Para desmontar un sistema de archivos usamos el comando umount:
umount [options] <device> | <mountpoint>
Ejemplo usando el dispositivo:
umount /dev/sdb1
Ejemplo usando el punto de montaje/directorio:
umount /mnt
Opciones del comando umount:
-f(force): fuerza el desmontaje (podríamos perder datos si se está utilizando el dispositivo).-l(lazy): realiza el desmontaje cuando los recursos han sido liberados (ya no está en uso).
/etc/fstab
El archivo /etc/fstab nos permite definir los sistemas de archivos o espacios de swap que se montarán automáticamente en el arranque.
mount -a se invoca en el arranque y realiza el montaje de todos los dispositivos /etc/fstab (excepción noauto)
Formato fichero /etc/fstab:
<file system> <mount point> <type> <options> <dump> <pass>
- file system: sistema de ficheros origen (se puede usar también un UUID)
- mount point: dónde se va a montar el dispositivo.
- type: tipo de sistema de ficheros
- options: opciones para el montaje (defaults, rw…)
- dump: si está instalado el servicio de dump, en el arranque, antes de montarse el sistema de ficheros, se hará una copia de seguridad de ese sistema de ficheros en una ruta definida. Posibilidades: 0 (activado), 1 (desactivado).
- pass: indica si se realizará un chequeo del sistema de ficheros antes de montar. Posibilidades: 0 (desactivado), 1 (activado con máxima prioridad), 2 (activado con menos prioridad)
El chequeo de la integridad de un sistema de ficheros solo se puede hacer con la unidad desmontada. Por eso, podemos hacer esta comprobación en el arranque, antes de que se monten los sistemas de ficheros.
Ejemplo /etc/fstab:
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=3d157584-1e35-40e6-bfdf-2f3359b09809 /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 sysfs /sys defaults 0 0 proc /proc proc defaults 0 0
Partición de intercambio (swap)
Crea un espacio que ayudará a la memoria RAM a descargar tareas cuando esté muy cargada de transacciones.
Las particiones de paginación o swap utilizan otros sistemas para montar y desmontar sus particiones:
swapon: Activa un espacio de swapswapoff: Desactiva un espacio de swapswapon –s: Visualiza configuración swap
Ejemplo de swapon (sin argumentos):
NAME TYPE SIZE USED PRIO /dev/dm-1 partition 980M 0B -2
Creación
Para inicializar una partición swap (o fichero swap) utilizamos la utilidad mkswap:
mkswap [device|file]
Ejemplo usando un fichero:
swapon /swapfile
Ejemplo utilizando una partición:
swapon /dev/sda8
sync
Fuerza la sincronización de los datos almacenados en memoria al dispositivo.
Es llamado automáticamente cuando se realiza un reboot o halt de la maquina.
Este comando también liberaría la memoria swap
UUID
UUID (Universal Unique Identifier) permite asociar un dispositivo de almacenamiento a un identificador.
Se crea de forma aleatoria con un tamaño de 128 bits. Con esta longitud es difícil que se repita.
Este identificador estár asociado a una partición hasta que la modifiquemos, es decir, si realizamos algún cambio en la partición (cambiar tamaño), ya no le corresponderá el mismo UUID.
Para conocer el UUID de una partición podemos utilizar el comando blkid:
blkid /dev/sda1
Ejemplo ejecutando blkid sin argumentos:
/dev/sda1: UUID="b5a9d411-1845-4561-aff3-8394f36d60f6" TYPE="ext2" PARTUUID="f770ff77-01" /dev/sda5: UUID="AlN5EK-4anU-JcYE-P2nM-0TB9-FJOe-l61d2Q" TYPE="LVM2_member" PARTUUID="f770ff77-05" /dev/mapper/debian--10--vg-root: UUID="f992327e-e4b9-4034-aa4f-7030e9971903" TYPE="ext4" /dev/mapper/debian--10--vg-swap_1: UUID="8f4bcdd2-4087-43aa-878c-72f1e596e926" TYPE="swap"
Systemd mount units
Con la incorporación de systemd como sistema de incialización de servicios, ha surgido una nueva manera de montar sistemas de ficheros: las unidades .mount
Estas unidades son archivos de configuración que definen sistemas de ficheros que se montan de manera persistente.
Buscamos las unidades de este tipo que tenemos disponibles en el sistema:
systemctl list-unit-files --type=mount
UNIT FILE STATE -.mount generated boot.mount generated dev-hugepages.mount static dev-mqueue.mount static media-cdrom0.mount generated proc-fs-nfsd.mount static proc-sys-fs-binfmt_misc.mount static run-rpc_pipefs.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static
Ejemplo: mifs.mount:
[Unit] Description=Data for User [Mount] What=/dev/sda2 Where=/home/user/data Type=ext4 Options=defaults [Install] WantedBy=multi-user.target
Test
Imaginemos que tenemos bastante swap consumida por un proceso en concreto. El cliente nos da permiso para parar el proceso y poder ganar swap. ¿Cómo liberamos la swap?
sync
¿Cuál de las siguientes respuestas describe mejor el formato del fichero /etc/fstab?
- device name; mount point; filesystem type; mount options; dump filesystem; fsck order
¿Qué ficheros de sistema se actualizan cuando los dispositivos son montados o desmontados para mostrar información de los dispositivos montados y de las opciones utilizadas?
/etc/mtab/proc/mounts
