# Sistema de archivos

Un sistema de archivos o sistema de ficheros, (file system: fs), en informática, es un elemento que controla cómo se almacenan y recuperan los datos. Sin un sistema de archivos, los datos colocados en un medio de almacenamiento serían un gran cuerpo de datos sin manera de saber dónde termina un dato y comienza el siguiente. Es el encargado de administrar y facilitar el uso de las memorias periféricas o internas, ya sean secundarias o terciarias.
Sus principales funciones son la asignación de espacio a los archivos, la administración del espacio libre y del acceso a los datos resguardados. Estructuran la información guardada en un dispositivo de almacenamiento de datos o unidad de almacenamiento (normalmente un disco duro de una computadora), que luego será representada ya sea textual o gráficamente utilizando un gestor de archivos.
La mayoría de los sistemas operativos manejan su propio sistema de archivos.
Lo habitual es utilizar dispositivos de almacenamiento de datos que permiten el acceso a los datos como una cadena de bloques de un mismo tamaño, a veces llamados sectores, usualmente de 512 bytes de longitud (también denominados clústers). El software del sistema de archivos es responsable de la organización de estos sectores en archivos y directorios y mantiene un registro de qué sectores pertenecen a qué archivos y cuáles no han sido utilizados. En la práctica, un sistema de archivos también puede ser utilizado para acceder a datos generados dinámicamente, como los recibidos a través de una conexión de red de computadoras (sin la intervención de un dispositivo de almacenamiento).
Los sistemas de archivos proveen métodos para crear, mover, renombrar y eliminar tanto archivos como directorios, pero carecen de métodos para crear, por ejemplo, enlaces adicionales a un directorio o archivo (enlace duro en Unix) o renombrar enlaces padres (".." en Unix).
El acceso seguro a sistemas de archivos básicos puede estar basado en los esquemas de lista de control de acceso (access control list, ACL) o capacidades. Las ACL hace décadas que demostraron ser inseguras, por lo que los sistemas operativos experimentales utilizan el acceso por capacidades. Los sistemas operativos comerciales todavía funcionan con listas de control de acceso.

## Rutas y nombre de archivos

La estructura de directorios suele ser jerárquica, ramificada o "en árbol", aunque en algún caso podría ser plana. En algunos sistemas de archivos los nombres de archivos son estructurados, con sintaxis especiales para extensiones de archivos y números de versión. En otros, los nombres de archivos son simplemente cadenas de texto y los metadatos de cada archivo son alojados separadamente.
En los sistemas de archivos jerárquicos, usualmente, se declara la ubicación precisa de un archivo con una cadena de texto llamada ruta (path, en inglés). La nomenclatura para rutas varía ligeramente de sistema en sistema, pero mantienen por lo general una misma estructura. Una ruta viene dada por una sucesión de nombres de directorios y subdirectorios, ordenados jerárquicamente de izquierda a derecha y separados por algún carácter especial que suele ser una barra diagonal / o barra diagonal invertida \ (según el sistema operativo) y puede terminar en el nombre de un archivo presente en la última rama de directorios especificada.

### Ejemplo de 'ruta' en un sistema Unix

En un sistema tipo Unix como GNU/Linux, la ruta para la canción llamada "La canción.ogg" del usuario "Alvaro" sería algo como:
/home/Alvaro/Mi música/La canción.ogg
donde:
   * / representa el directorio raíz donde está montado todo el sistema de archivos.
   ** home/Alvaro/Mi música/ es la ruta del archivo.
   *** La canción.ogg es el nombre del archivo que se establece como único.
   *** .ogg es la extensión del archivo.

### Ejemplo de 'ruta' en un sistema Windows

Un ejemplo análogo, en un sistema de archivos de Windows se vería como:
C:\Users\Alvaro\Music\canción.mp3
donde:
* C: es la unidad de almacenamiento en la que se encuentra el archivo.
   * \Users\Alvaro\Music\ es la ruta del archivo.
   * canción es el nombre del archivo.
      * .mp3 es la extensión del archivo, este elemento (parte del nombre) es especialmente relevante en los sistemas Microsoft Windows, porque sirve para identificar qué tipo de archivo es y la aplicación que está asociada con el archivo en cuestión, es decir, con qué programa se puede abrir y leer, editar o reproducir el archivo. Para la mayoría de los sistemas operativos modernos la extensión del archivo es un complemento burocrático solo útil para la observación del usuario, ya que los entornos de administración de archivos y aplicaciones varias, analizan la información contenida en el principio del interior del archivo (MIME headers) para determinar su función o asociación, la cual normalmente está catalogada en la tabla MIME Content-Type en el sistema. El sistema Windows permite ocultar la extensión de los archivos si el usuario lo desea, de no hacerlo la extensión aparece en los nombres de todos los archivos. En el sistema operativo Windows XP, si el usuario cambia la extensión de un archivo, el archivo puede quedar inutilizable si la nueva extensión lo asocia a un programa que no tenga la capacidad de editar o reproducir ese tipo de archivo. Algunos usuarios igual habilitan la visualización de las extensiones en los sistemas Windows como medida de precaución para evitar virus que utilicen íconos o nombres parecidos a los archivos personales del usuario, ya que la extensión permite identificar a los ficheros .EXE (ejecutables en Windows).

## Resumen de características de los sistemas de archivos

* Seguridad o permisos
** Listas de control de acceso (ACL)
** UGO ("Usuario, Grupo, Otros", o por sus siglas en inglés: "User, Group, Others")
** Capacidades granuladas
** Atributos extendidos (ej.: sólo añadir al archivo pero no modificar, no modificar nunca, etcétera)
* Mecanismo para evitar la fragmentación
* Capacidad de enlaces simbólicos o duros
* Integridad del sistema de archivos (Journaling)
* Soporte para archivos dispersos
* Soporte para cuotas de discos
* Soporte de crecimiento del sistema de archivos nativo

## Tipo de sistemas de archivos
### Sistemas de archivos de disco

Un sistema de archivo de disco está diseñado para el almacenamiento de archivos en una unidad de disco, que puede estar conectada directa o indirectamente a la computadora.

### Sistemas de archivos de red

Un sistema de archivos de red es el que accede a sus archivos a través de una red de computadoras.
Dentro de esta clasificación encontramos dos tipos de sistemas de archivos:
* los sistemas de archivos distribuidos (no proporcionan E/S en paralelo);
* los sistemas de archivos paralelos (proporcionan una E/S de datos en paralelo).

### Sistemas de archivos de propósito especial

Los sistemas de archivos de propósito especial (special purpose file system) son aquellos tipos de sistemas de archivos que no son ni sistemas de archivos de disco, ni sistemas de archivos de red.
Ejemplos: acme (Plan 9), archfs, cdfs, cfs, devfs, udev, ftpfs, lnfs, nntpfs, plumber (Plan 9), procfs, ROMFS, swap, sysfs, TMPFS, wikifs, LUFS, etcétera.

### Sistemas de archivos por Sistema Operativo

En cada sistema operativo existen distintas formas de utilización de los tipos de acceso para la organización óptima de sus archivos y su información. Cada sistema operativo cuenta con uno o varios sistemas diferentes de organización, los cuales trabajan acorde a las necesidades del usuario y su uso de la información.

#### Sistemas de archivos en Windows

Los sistemas de organización de archivos que emplea Microsoft Windows utilizan el acceso secuencial indexado (acceso secuencial y acceso indexado adjuntos en un mismo método), el acceso directo en algunos casos en la utilización de los sistemas de organización por tablas.
* Tabla de asignación de archivos: comúnmente conocido como FAT (del inglés File Allocation Table), es un sistema de archivos. Es un formato popular para disquetes admitido prácticamente por todos los sistemas operativos existentes para computadora personal. Se utiliza como mecanismo de intercambio de datos entre sistemas operativos distintos que coexisten en la misma computadora, lo que se conoce como entorno multiarranque.
* HPFS (High Performance File System).
* NTFS (New Technology File System).

#### Sistema de archivos en Linux

GNU/Linux es el segundo sistema operativo que soporta más sistemas de organización que lo convierte en uno de los más versátiles. Además Linux, implementado en su kernel, admite la administración de manera transparente al usuario de más de 15 tipos diferentes de sistemas de archivos, incluyendo NTFS (Microsoft Windows), iso9660, msdos y vfat. La estructura de archivos es una estructura jerárquica en forma de árbol invertido, donde el directorio principal (raíz) es el directorio "/", del que cuelga toda la estructura del sistema. Este sistema de archivos permite al usuario crear, borrar y acceder a los archivos sin necesidad de saber el lugar exacto en el que se encuentran. No existen unidades físicas, sino archivos que hacen referencia a ellas. Consta de tres partes importantes, superbloque, tabla de i-nodos y bloques de datos.
* EXT: el "sistema de archivos extendido" (extended file system, ext), fue el primer sistema de archivos de Linux. Tiene metadatos estructura inspirada en el tradicional Unix File System o sistema de archivos UNIX (UFS). Fue diseñado por Rémy Card para vencer las limitaciones del sistema de archivos MINIX.

#### Sistema de archivos de MacOS

Los sistemas de archivos que utiliza MacOS tienen su forma peculiar de trabajar, la cual es totalmente distinta a la de Microsoft Windows y GNU/Linux, trabajan por medio de jerarquías.
* HFS: el "sistema de archivos jerárquico" (Hierarchical File System, HFS) divide un volumen en bloques lógicos de 512 bytes. Estos bloques lógicos están agrupados juntos en bloques de asignación (allocation blocks) que pueden contener uno o más bloques lógicos dependiendo del tamaño total del volumen.
* APFS: el "sistema de archivos de Apple" que utilizan todos los dispositivos desde MacOS High Sierra, iOS 10.3, tvOS 10.2 y watchOS 3.2 (Apple File System, APFS). Su objetivo es solucionar problemas de núcleo de HFS+. está optimizado para unidades flash y estado sólido, con un enfoque principal en encriptación. Utiliza números de inodo de 64-bits, y permite un almacenamiento más seguro. Tiene varias características como Clones, Snapshots, Encriptación, Número máximo aumentado de archivos, Protección contra accidentes y Espacio Compartido.

### Sistemas de archivos distribuidos

Los sistemas de archivos distribuidos forman la base de muchas aplicaciones distribuidas, por lo cual son un aspecto fundamental de un sistema distribuido. Un sistema de archivos distribuido es aquel que permite que programas almacenen y accedan a archivos remotos exactamente como lo hacen a archivos locales, lo que posibilita acceder a estos desde cualquier computadora en una red. Estos permiten que múltiples procesos compartan datos durante largos períodos de tiempo de forma segura y confiable. Los sistemas de archivos distribuidos se utilizan como capa básica para aplicaciones y sistemas distribuidos.