La Ruta del SysAdmin. Estructura de Directorios

La ruta del SysAdmin 1 de jun. de 2024

FHS. El Estándar de Jerarquía de Directorios.

FHS son las siglas de Filesystem Hierarchy Standard, es el estándar de jerarquía para los sistemas de archivos de los sistemas Linux y otros derivados de UNIX.

Antes de comenzar a avanzar en el conocimiento de GNU/Linux, es importante que comprendas varias cosas de Linux, sobre todo si vienes de otros sistemas operativos.

  • En GNU/Linux todo son archivos.
  • El sistema de archivos parte de lo que se denomina directorio "raíz" y a partir de él cada directorio y subdirectorio, sigue una estructura de árbol.
  • Cada directorio tiene una función específica, si sabes para que sirve cada uno de ellos, trabajar con GNU/Linux te será más fácil, sobre todo a la hora de localizar los ficheros que necesites.

Te recomiendo que leas el artículo que ya publicamos sobre ello:

Debian-Newbie 06. Estructura de Directorios
¿Donde están los discos? Lo primero que le “chirría” a un nuevo usuario en Linux, es que no encuentra los discos duros de su ordenador... Hay que explicar que en la estructura de Sistema de Ficheros (File System) de Linux todo son ficheros: los directorios son ficheros, los archivos son
Estructura de directorios.

Importancia del FHS

Conocer que puede contener cada uno de los directorios de GNU/Linux, te va a permitir entender el porqué en los servidores se utilizan distintas particiones en el uso del sistema operativo.

Imagina que tus discos duros son como estanterías, en las que vas a almacenar libros, adornos y cualquier cosa que necesites.
Puedes tener un único disco duro o varios para almacenar el contenido.

Seguramente quieras tener todo organizado a tu manera, un repisa en la que poner tus libros de consulta, otra para libros técnicos, otra para los adornos o tu biblioteca de música, juegos o películas.

Para usar el disco duro tienes que prepararlo, creando particiones en él (serían las baldas de la estantería de tu mueble) y además darle un tamaño y formato, para poder organizar el contenido del mismo. El símil sería colocar cada balda a la altura necesaria para que quepa todo lo que vayas a colocar ahí.

Puedes preparar tu disco duro para tener una única partición (sería como tener una única balda) y tener en ella todos los datos a guardar, cada directorio podríamos decir que sería lo equivalente a tener un cajón en esa balda en la que almacenar separadas nuestras cosas.

Simil de disco duro con una única partición para uso "personal"

El uso de un disco con una única partición se suele usar generalmente para equipos de escritorio y despreocuparnos de tener que calcular los tamaños que vamos a reservar a cada partición.

Sin embargo, piensa en una empresa en la que se dedica a vender múltiples artículos, van a tener que tener muy bien organizado todo para poder ampliar y gestionar su stock y acceder a él rápidamente, necesitarán muchas baldas y en cada una de ellas diferentes tipo de artículos y gran número de cajones...

Símil disco duro con múltiples particiones para uso "profesional"

Cuando se particiona un disco duro, dependiendo si usas o no EFI, el propio sistema te generará la partición especial ESP (EFI System Partition), sin embargo con BIOS y un particionado MBR no necesitarás una partición especial.

Con el comando tree podemos mostrar en formato árbol  la estructura de tu sistema de ficheros. Para acortar la salida le indicaremos que nos muestre sólo el primer nivel con el parámetro -L 1 , escribimos tree -L 1 /:

/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── initrd.img -> boot/initrd.img-X.Y.Z-amd64
├── initrd.img.old -> boot/initrd.img-X.Y.Z-amd64
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
├── var
├── vmlinuz -> boot/vmlinuz-X.Y.Z-amd64
└── vmlinuz.old -> boot/vmlinuz-X.Y.Z-amd64

Vamos a fijarnos en varios directorios especiales y explicar algún detalle sobre ellos.

No te preocupes por algunos detalles más técnicos que puedas encontrar, ya que más adelante los veremos en detalle.

Nota: Cada directorio, si se desea, puede ser incluso un punto de montaje de una partición de un disco, aunque esto no es necesario.

/ Directorio "raíz" del que cuelgan el resto de directorios o particiones montadas en el sistema operativo.

/boot Es el directorio o la partición de arranque del sistema. Tras el proceso inicial de carga del firmware de la BIOS o de EFI/UEFI, es el primer sitio que el sistema va a usar para cargar el Sistema Operativo, mediante el gestor de arranque.
En un sistema en producción conviene tenerlo separado, para evitar que cualquier fallo pueda provocar que no inicie el Sistema Operativo. Una partición de aproximadamente unos 300 Mb será suficiente para ella.

/home Es el directorio o partición en la que se guardan los datos de los usuarios del equipo.
Es una buena práctica tenerlo en una partición separada, ya que si quieres instalar otra distribución, tan solo tendrás que formatear las otras particiones y te ahorrarás tiempo en realizar un backup y luego un restore tras una nueva instalación. No olvides que es aconsejable realizar siempre un backup antes de cualquier tarea que afecte a los discos y particiones para evitar pérdidas de datos.
Si se crea una partición para /home, el tamaño dependerá de las tareas que realicen los usuarios, no usarán el mismo espacio de almacenamiento unos usuarios que se dediquen a tareas ofimáticas, que otros usuarios que trabajen con ficheros multimedia.

/root Es el directorio del usuario administrador del sistema (usuario root), no comparte directorio con el resto de usuarios, tiene su propio directorio.

/tmp Es el directorio o partición en el que se generan ficheros temporales.
Se recomienda separarlo en una partición, si algún programa por algún tipo de error genera "basura" puede llenar este directorio, de esa forma no afectaría a todo el sistema. Dependiendo de las tareas y procesos del equipo, un tamaño de entre 1 y 5 Gb sería suficiente para esta partición.

/var Es el directorio o partición en el que por defecto GNU/Linux almacena ficheros "variables" que pueden crecer, por ejemplo para almacenar bases de datos, tareas del cron, mensajes/emails, backups o los ficheros de Log del Sistema Operativo.
Es muy recomendable separar en una partición aparte el contenido de /var.

Otra opción más profesional, es que cada subdirectorio que está dentro del directorio /var, dependiendo del contenido final que vaya a tener, tenga su propia partición.

/var/log Es el directorio o partición en el que se almacenan los registros de todos los eventos (LOGs) que suceden en el sistema operativo.
Se recomienda que tenga su propia partición, dependiendo del tipo de logs que vaya a almacenar y según las aplicaciones que tenga el SO, necesitará más o menos tamaño.

/var/lib Este directorio o partición puede contener desde simples ficheros de configuración en uso, hasta ser el lugar en que el que se almacenan los datos de las bases de datos, como por ejemplo de MariaDB ó MySQL, que por defecto se guardan en el directorio /var/lib/mysql, si una base de datos va a ser muy grande, se recomienda crear una partición para ella y asignarle suficiente espacio de almacenamiento (teniendo en cuenta el crecimiento futuro).

/etc Directorio especial en que se guardan las configuraciones personalizada para el correcto funcionamiento de cada aplicación.

/opt Directorio o partición en el que se instalan programas y aplicaciones "opcionales" como pueden ser herramientas de backup, herramientas propias que desarrolla la empresa, se usa para no mezclarlas con las aplicaciones del sistema.

/dev Directorio en el que están los archivos que "apuntan" a todos los dispositivos del hardware de la máquina.

La explicación del resto de directorios la tienes, como te indiqué, en el artículo:  Debian-Newbie 06. Estructura de Directorios

Particiones y Montaje de particiones

Si has entendido el símil de los "baldas y cajones" de un mueble librería, te será sencillo entender como funciona el montaje de las particiones sobre los directorios en GNU/Linux.

Recuerda que para poder usar un disco duro, en cualquier sistema operativo es obligatorio particionarlo. Veremos esto en detalle más adelante.

Para que una partición sea "accesible" por el Sistema Operativo, tiene que estar "montada" (al igual que una balda de una librería).
Lo mínimo que tienes que tener montado para que funcione tu SO es el directorio raiz (/) (al menos una balda).

Si dispones de más particiones, y las quieres usar, tienes que indicar al sistema operativo donde las puede encontrar, es lo que se denomina punto de montaje.
Un punto de montaje de montaje en GNU/Linux es simplemente una ruta de directorio. Siguiendo el símil, sería como tener una etiqueta pegada a la balda en la vamos a colocar en ella un cajón con el contenido que queremos.

Nota: El particionado mostrado es totalmente incorrecto (no figuran particiones extendidas, se usa para simplificar la explicación). En los siguientes capítulos se explicará correctamente la forma de particionar.

Vamos a suponer tienes un disco duro dev/sda en el que has creado las siguientes particiones (ficticias):

sda1   20 Gb
sda2   20 Gb
sda3    1 Gb
sda4  200 Gb
sda5  900 Gb

Podrías montar tu sistema operativo de la siguiente forma:

Partición     Punto Montaje 
------------- ---------------------
sda5 (900 Gb) Montar sobre / (raíz)

Simplemente con esto puedes comenzar a trabajar, ya que GNU/Linux tiene la estructura y jerarquía de directorios implícita en cuando se monta el directorio raíz.

Sin embargo, como somo organizados, hemos creado otras particiones (baldas/cajones) que vamos a montar, para tener los datos de nuestro equipo más controlados.

Partición     Punto Montaje 
------------- ---------------------
sda5 (900 Gb) Montar sobre / (raíz)
sda3 (  1 Gb) Montar sobre /tmp

Ahora en nuestro equipo tenemos montados 2 particiones, la partición sda5 que es nuestro directorio raíz y la partición sda3 que la hemos montado sobre el directorio /tmp

Antes nuestro sistema, tenía unicamente 900 Gb y los datos temporales se escribían en el directorio /tmp , todo en la misma partición.
Ahora nuestro sistema dispone de 900 Gb + 1 Gb y los datos temporales se siguen escribiendo en el directorio /tmp, pero se están guardando en otra partición diferente.

Nota importante: Si tenemos un directorio y "montamos" una partición sobre ese directorio, los datos de ese directorio no se pierden, unicamente dejan de estar accesibles en ese momento, ya que lo que veremos dentro de ese directorio será el almacenamiento de la partición montada.
Sin embargo al desmontarlo veremos que los datos siguen allí.

Vamos a aprovechar las otras particiones para separar datos....

Partición     Punto Montaje 
------------- ---------------------
sda5 (900 Gb) Montar sobre / (raíz)
sda3 (  1 Gb) Montar sobre /tmp
sda4 (200 Gb) Montar sobre /var/lib/mysql
sda1 ( 20 GB) Montar sobre /home/pepito
sda2 ( 20 GB) Montar sobre /home/juanito

Vemos como ha quedado ahora nuestro SO:

Tenemos 2 directorios /home/pepito y /home/juanito que van a ser una partición de hasta 20 Gb (sda1 y sda2) cada uno para el usuario pepito y juanito.

Tenemos el directorio /var/lib/mysql que tiene montado sobre él la partición sda4 con un almacenamiento disponible de 200 Gb, que usaremos por ejemplo para guardar los datos de una base de datos MariaDB.

Tenemos el directorio /tmp sobre el que montamos una pequeña partición sda3de 1 Gb para ficheros temporales

El resto de directorios de todo el sistema operativo usarán el espacio que se ha montado sobre el directorio / (raíz) que son 900 Gb.

Un detalle curioso que verías al usar esta configuración, sería que por ejemplo, al crear un nuevo usuario luisito, se crearía su directorio de trabajo en /home/luisito (de forma normal), pero su límite de espacio a usar es el que marcaría el almacenamiento de su punto de montaje (que es /), con lo que tendría disponibles casi 900 Gb, frente a los 20 Gb que tienen pepito y juanito cada uno, ya que usan otros puntos de montaje.

Nos vemos en el siguiente capítulo de la Ruta del SysAdmin

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux