SDB:Fundamentos del sistema de ficheros

Saltar a: navegación, buscar


Artículos recomendados Artículos relacionados
Icon-manual.png Icon-ayuda.png

Introducción

Todo Sistema Operativo que se precie de tal ha de permitir, entre otras muchas cosas, utilizar algún sistema de almacenamiento permanente de la información. En esto puede haber cierta confusión a medida que los teléfonos móviles (ahora denominados smartphone, con una ingenua interpretación del significado de la inteligencia, o que puede que nos diga algo sobre los expertos en marketing) se acercan cada vez más al rol de los microcomputadores.

Entre otras cosas, un Sistema Operativo ha de pretender ofrecer una interfaz común independiente del dispositivo usado. Un archivo de texto estará alojado dentro de una carpeta (por ejemplo) sin que el usuario se preocupe de que el dispositivo de turno es un CD, un disco duro, un lápiz de memoria (pendrive) o lo que quiera que se invente o ponga de moda en los próximos años.

Pero esta introducción sería un poco falsa si no mencionase la excepción de los dispositivos ópticos (CD/DVD, etc.). Es cierto que la operación necesaria para grabarlos (comúnmente conocida como quemado) hace que su uso sea un poco diferente al resto de dispositivos. Bien, es cierto que en eso es una excepción. Sin embargo, fíjate en que la información se organiza y se usa igual que si estuviese en tu disco duro.

Organización del sistema de ficheros

La organización de un sistema de ficheros dado, como puede ser el de Linux, incumbe a varios aspectos.

  • En primer lugar, se refiere a la organización de los ficheros de los usuarios en el sistema y en los propios dispositivos. Un sistema de ficheros dado puede ser jerárquico y otro puede no serlo. En Linux todos los ficheros de todo el sistema están dentro de una carpeta, salvo la raíz; en Windows, por ejemplo, los ficheros de cada dispositivo están dentro de una carpeta, salvo la raíz de cada dispositivo.
  • En segundo lugar, se refiere a la forma en la que se clasifiquen los ficheros. Lo usual es que existan ficheros y carpetas, aunque las carpetas no sean más que ficheros especiales del sistema para contener (y así clasificar) los ficheros del usuario.
  • En tercer lugar podemos referirnos a la ubicación de los dispositivos de almacenamiento respecto al sistema, distinguiendo dispositivos locales de dispositivos no-locales (servidores de ficheros, por ejemplo), y como el sistema trabaja con dichos dispositivos.
  • Finalmente, también podemos referirnos a la eventualidad de que un sistema sea usado por un solo usuario o con un fin específico, o bien que sea un sistema diseñado para ser compartido con distintos usuarios que pueden tener distintas políticas respecto a determinados aspectos de la información del sistema.

En lo que sigue, el artículo trata de las particularidades del almacenamiento y acceso de la información en sistemas Linux, y por tanto, en openSUSE. Los manuales y guías de GNU/Linux o FreeBSD pueden proporcionar una mejor referencia para comparar la organización de la información en un sistema Linux respecto a otros Sistemas Operativos.

Dialogo informacion 64x64.png

El Sistema de ficheros virtual (VFS)

Cualquier dispositivo (disco, volumen lógico o partición) para ser utilizado ha de tener un formato adecuado. Esta operación suele conocerse como formateo por la herramienta utilizada en los sistemas MS-DOS y Windows Format. Sin embargo, en Linux se habla de crear un sistema de ficheros mientras que la herramienta utilizada se denomina mkfs (make filesystem).

Esta herramienta permite crear un sistema de ficheros de virtualmente cualquier tipo en un dispositivo: reiserfs, ext2, ext3, ext4, xfs, btrfs, ntfs... Linux permite utilizar un montón de tipos de sistemas de ficheros en los distintos dispositivos de almacenamiento de los que disponga el sistema.

Para permitir esta heterogeneidad, Linux utiliza lo que se conoce como una capa de abstracción llamada Sistema de ficheros virtual (VFS, sus siglas en inglés). Dicha capa de abstracción no es más que un sistema que hace de interfaz entre Linux y los distintos tipos de sistemas de ficheros. La única condición para usar un tipo determinado de sistemas de ficheros es disponer del controlador (driver) correspondiente en el núcleo Linux.

En realidad, Linux ni siquiera necesita un dispositivo completo para su uso: podría bastar un fichero propio de MS-DOS para que el núcleo Linux fuese capaz de montar un sistema de ficheros dentro de él.

No se debe confundir VFS con los tipos especiales de sistemas de ficheros tales como procfs, devtmpfs, sysfs, tmpfs, etc. Es tentador considerar a estos sistemas de ficheros como sistemas de ficheros virtuales, en la medida en que no existen físicamente en ningún lugar, sino que el sistema los crea dinámicamente para su propio uso. La confusión aumenta ya que entre sus funciones también se encuentran la de servir de interfaz entre dos aspectos del sistema. La diferencia fundamental es que VFS también se encarga de gestionar estos tipos de sistemas de ficheros.

Tipo del sistema de ficheros

En cada dispositivo los ficheros se almacenan siguiendo alguna estructura predeterminada. Un disco FAT, por ejemplo, emplea una tabla donde se guarda el nombre de cada fichero y su ubicación física en dicho dispositivo; un disco ext4 emplea un sistema más complejo, incluyendo un registro de diario de cambios, un sistema de enlaces para reubicar el ficheros de forma más eficiente, etc.

Un dispositivo dado puede usar uno de multitud de tipos diferentes, y en un disco puede haber particiones que usen tipos distintos. Aunque en general, pueden hacerse agrupaciones:

  • Los CD/DVD usan iso9660, y por lo tanto también las imágenes .iso utilizan tal formato.
  • La raíz (/) de un sistema GNU/Linux puede usar btrfs, ext2, ext3, ext4, reiserfs, y xfs.
  • El sistema Windows puede emplear VFAT o NTFS.
  • Un pendrive suele usar VFAT por compatibilidad, aunque podría usar cualquier otro tipo. De forma similar, las particiones que no sean la raíz pueden emplear cualquier tipo sistema de ficheros, si bien es posible que el cargador no sea capaz de arrancar /boot si no maneja su tipo de sistema de ficheros (en caso de que no sea la misma que la raíz).

Generalmente el núcleo vendrá con todos los drivers precisos para manejar los distintos tipos de sistemas de ficheros. Sin embargo, para que el cargador de arranque pueda iniciar el sistema es el propio cargador el que debe de disponer de los drivers adecuados para el sistema de ficheros /boot.

Jerarquía de sistemas de ficheros (FHS)

Los ficheros de Linux se organizan en forma de árbol: hay una carpeta que actúa de raíz (denominada root y representada con la barra /), de la que cuelgan todos los ficheros y carpetas que componen el sistema. Cada carpeta a su vez puede contener otras carpetas y ficheros. El separador entre carpetas es la misma barra. Un sistema de ficheros es una rama o conjunto de carpetas que cumplen una función determinada. En Linux, casi cualquier sistema de ficheros puede estar almacenado en cualquier dispositivo local, y muchos de ellos pueden ser accesibles a través de la red.

El FHS (Filesystem Hierarchy Standard, Estándar de la Jerarquía de Ficheros) define dónde se ubica cada sistema de ficheros principal dentro del árbol de ficheros del sistema. Por ejemplo, /boot es el sistema de ficheros que contiene el arranque, /home el que contiene las carpetas de usuario, etc.

La necesidad de establecer un FHS surgió en primer lugar por la heterogeneidad de las distribuciones existentes. Si bien todas las distribuciones aceptan el FHS, aun es posible encontrarse diferentes interpretaciones de algunos aspectos.

Jerarquía de primer nivel

Directorio Descripción Simple
/ La raíz o root, y directorio raíz o contenedor de todo el sistema de jerarquía.
/bin/ Aplicaciones binarias de comando que son esenciales para que estén disponibles para una sesión de usuario único, o bien, para todos los usuarios (multiusuario). Incluyen, por ejemplo, cat, ls, cp, rm, mkdir, etc.
/boot/ Archivos cargadores de arranque (por ejemplo, los núcleos y el initrd). A menudo en una partición o disco aparte.
/dev/ Contiene los portales a dispositivos esenciales (por ejemplo, /dev/null), incluso a los que no se les ha asignado (montado) un directorio. Contiene incluso los portales a dispositivos que son virtuales y también a los que no proporcionan almacenamiento (p.e. micrófonos, impresoras, etc). Se trata de la parte más cruda o de más bajo nivel del sistema operativo hacia el hardware, aunque es extremadamente útil para tener un acceso directo a los dispositivos.
/etc/ Contiene ficheros de configuración del sistema específicos del Host de todo el sistema. Ha habido controversia sobre el significado del nombre, en las primeras versiones del Documento de Implementación de UNIX de los laboratorios Bell, /etc se conoce como el directorio /etcetra, todo lo que históricamente este directorio consideró que no pertenecía en otra parte (sin embargo, restringe la ESF / etc a los ficheros de configuración estáticos y no puede contener ficheros binarios). Desde la publicación de la documentación temprana, el nombre de la guía ha sido re-designados de varias maneras. Interpretaciones más recientes incluyen Backronyms como "Configuración de texto editable".
/home/ Contiene los directorios de trabajo de todos los usuarios, excepto el del superusuario (administrador, root). Contiene ficheros guardados, ajustes personales, etc. A menudo es instalada en un disco o partición separada. Cada usuario tiene su propio directorio dentro de esta carpeta.
/lib/ Contiene todas las bibliotecas (mal traducidas habitualmente como librerías) esenciales compartidas de los programas alojados, es decir, para los binarios en /bin/ y /sbin/. Contiene también las bibliotecas para el núcleo.
/media/ Contiene los puntos de montaje de los medios extraíbles de almacenamiento, tales como lectores de CD-ROM (aparecido en la versión 2.3 de FHS), memorias USB (pendrives), e incluso sirve para montar otras particiones del mismo disco duro, como por ejemplo, alguna partición que sea utilizada por otro sistema operativo.
/mnt/ Sistema de ficheros montados temporalmente. Es una directorio semejante a /media, pero es usado mayoritariamente por los usuarios. Sirve para montar dispositivos de forma temporal en el sistema; no necesita contraseña, a diferencia del directorio /media.
/opt/ Contiene paquetes de programas opcionales de aplicaciones estáticas, es decir, que pueden ser compartidas entre los usuarios. Dichas aplicaciones no guardan sus configuraciones en este directorio; de esta manera, cada usuario puede tener una configuración diferente de una misma aplicación, de manera que se comparte la aplicación pero no las configuraciones de los usuarios, las cuales se guardan en su respectivo directorio en /home.
/proc/ Contiene principalmente ficheros de texto, sistema de ficheros virtuales que documentan al núcleo y el estado de los procesos en ficheros de texto (por ejemplo, uptime, network).
/root/ Directorio raíz del usuario root. Funciona como las carpetas en /home, pero en este caso, es solo para el superusuario (administrador del sistema).
/sbin/ Sistema de binarios esencial, comandos y programas exclusivos del superusuario (root), por ejemplo, init, route, ifup). Un usuario puede ejecutar alguno de estas aplicaciones de comandos, si tiene los permisos suficientes, o bien, si tiene la contraseña del superusuario.
/srv/ Lugar específico de datos que son servidos por el sistema.
/tmp/ Archivos temporales (véase también /var/tmp). Aquí generalmente se guardan los ficheros temporales guardados -por ejemplo- por el navegador de Internet.
/usr/ Contiene la mayoría de las utilidades y aplicaciones multiusuario, es decir, accesibles para todos los usuarios. En otras palabras, contiene los ficheros compartidos, pero que no obstante son de sólo lectura. Este directorio puede incluso ser compartido con otras computadoras de red local.
/var/ Archivos variables, tales como registros de sucesos (logs), ficheros de colas (spool), bases de datos, ficheros de correo electrónico (e-mail) temporales, y algunos ficheros temporales en general. Generalmente actúa como un registro del sistema. Ayuda a encontrar los orígenes de un problema.

Jerarquía de segundo nivel

/usr/bin/
Comandos binarios no-administrativos para todos los usuarios. Son de solo lectura, pero pueden tener su propia configuración para cada usuario en /home.
/usr/include/
Archivos de cabecera (Header files o Include files), es decir, ficheros de inclusión estándar.
/usr/lib/
Bibliotecas]] compartidas de los binarios en /usr/bin/. Algunos ejecutables comparten las mismas librerías que comparten las demás aplicaciones, de manera que generalmente no hay dos librerías idénticas en un mismo sistema, lo cual ahorra memoria y proporciona más orden.
/usr/sbin/
Sistema de binarios no esenciales; por ejemplo, demonios para varios servicios de red. Es decir, contiene programas que no proporcionan una interfaz de usuario y generalmente se ejecutan al inicio del sistema o en ciertas circunstancias. No son directamente manejados por el usuario mientras se ejecutan, aunque sí pueden ser configurados antes de que sean ejecutados.
/usr/share/
Arquitectura independiente y compartida de datos. En otras palabras, contiene los datos compartidos que no dependen de la arquitectura del sistema. Esto puede incluir imágenes, sonidos, etc., para la disponibilidad en el sistema y sus aplicaciones. Pueden ser plantillas, por ejemplo, aunque generalmente son ficheros que el sistema utiliza directamente.
/usr/src/
Códigos fuente de algunas aplicaciones. Al igual que /mnt, esta carpeta la manejan los usuarios directamente para que éstos puedan guardan en él el código fuente de programas y bibliotecas y así puedan acceder a él fácilmente, sin problemas con permisos. Permite que el código fuente tenga un espacio propio, accesible pero apartado de todos los usuarios.
/usr/local/
Datos locales, específicos a este host. Usualmente tiene subdirectorios, por ejemplo bin/, lib/, share/, de datos compartidos de sólo lectura específicos del ordenador o servidor que los comparte.
/var/cache/
Memoria caché de las aplicaciones, aunque también se utiliza el directorio /tmp<code> para lo mismo.
/var/crash/
Se depositan datos e información, referentes a las caídas o errores del sistema operativo. Es más específico que <code>/var en general.
/var/games/
Datos variables de los juegos del sistema. Este directorio no es imprescindible y muchas veces es omitido por las propias aplicaciones de juegos, pues utilizan la carpeta de usuario en /home para guardar datos variables como configuraciones, por poner un ejemplo. De todas maneras, los juegos de GNOME utilizan este directorio.
/var/lock/
Archivos Lock. Archivos que hacen el seguimiento de los recursos que se utilizan actualmente.
var/log/
Archivos de registro, Log. Varios registros, logs.
/var/mail/
Buzón correos o mensajes de los usuarios. Si no utiliza cifrado, generalmente se utiliza entonces la carpeta personal para la misma labor por parte de programas que manejen correos electrónicos.
/var/opt/
Posee los datos variables de /opt.
/var/run/
Información reciente. Trata acerca del funcionamiento del sistema desde el último arranque. Por ejemplo, los usuarios actualmente registrados o logueados, que han ingresado; y los demonios que están en ejecución.
/var/spool/
Bobinas o carretes (Spool), de tareas a la espera de ser procesados (por ejemplo, colas de impresión y correo no leído).
/var/tmp/
Ficheros temporales que, a diferencia de /tmp, no se borran entre sesiones o reinicios del sistema, pero que de todas maneras siguen siendo prescindibles.