[ad_1]
Todos usamos archivos o ficheros todos los días, y todos usamos también carpetas o directorios, ya sean en los sistemas de archivos del PC de sobremesa, en los portátiles, dispositivos móviles, etc. Por eso, en este artículo te explicaré todo lo que debes saber al respecto, para que puedas entender qué es y cómo se almacena la información en la memoria.
¿Qué es un sistema de archivos?
Un sistema de archivos o FS (File System), es un método y una estructura de datos que el sistema operativo utiliza para controlar cómo se almacena y recupera la información. Sin un sistema de archivos, los datos almacenados en un medio de almacenamiento serían una única entidad de datos sin forma de distinguir dónde termina un conjunto de datos y comienza el siguiente, o dónde se encuentra cualquier conjunto de datos cuando es necesario recuperarlo. Es decir, esto sería lo que se denomina RAW o datos en crudo.
Cuando formateas una unidad de almacenamiento y le das formato NTFS, FAT, ext4, btrfs, HFS+, etc., lo que estás haciendo es crear un sistema de archivos para poder gestionar los datos en dicha unidad. Es decir, eso a lo que llamamos formatos son realmente FS.
Al separar los datos en fragmentos y asignar un nombre a cada fragmento, los datos se pueden aislar y identificar fácilmente. Para que todo esto sea posible, un sistema de archivos consta de dos o tres capas. A veces, estas capas están separadas de manera explícita, y en otras ocasiones, las funciones se combinan. Las capas de las que hablamos son:
- Sistema de archivos lógico: es responsable de la interacción con la aplicación del usuario. Proporciona una API para operaciones de archivos, como Open, Close, Read, etc., y envía la operación solicitada a la capa que se encuentra debajo de ella para su procesamiento. El sistema de archivos lógico administra las entradas de la tabla de archivos abiertos y los descriptores de archivos por proceso. Esta capa proporciona acceso a archivos, operaciones de directorio, seguridad y protección.
- Sistema de archivos virtual: esta interfaz permite admitir múltiples instancias concurrentes de sistemas de archivos físicos. Esta capa es opcional, no siempre se encuentra.
- Sistema de archivos físico: se ocupa de la operación física del dispositivo de almacenamiento. Procesa los bloques físicos que se leen o escriben. Se encarga del almacenamiento en buffer, la gestión de memoria y es responsable de la ubicación física de los bloques en ubicaciones específicas en el medio de almacenamiento. El sistema de archivos físico interactúa con los controladores de dispositivos de hardware de almacenamiento o con el canal para dirigir el dispositivo de almacenamiento.
Características del FS
Todos y cada uno de los sistemas de archivos existentes tienen sus limitaciones y características que deberías conocer, como:
- Gestión o asignación de espacio: los sistemas de archivos asignan espacio de manera granular, generalmente en múltiples unidades físicas en el dispositivo. Los sistemas de archivos se encargan de organizar archivos y directorios, y de mantener un registro de qué áreas del medio pertenecen a qué archivos y cuáles no se están utilizando.
- Fragmentación: ocurre cuando un mismo archivo es almacenado en distintas partes de la unidad de almacenamiento, es decir, que las partes de los archivos individuales no son contiguas. A medida que se crean, modifican y eliminan archivos, esto puede resultar en áreas de espacio utilizado y no utilizado de varios tamaños. Y no solo eso, esto afecta a algunos FS (p.e.: FAT y NTFS de Microsoft), ralentizando la lectura de los archivos.
- Nombres de archivo: los sistemas de archivos gestionan las restricciones de longitud, la sensibilidad a mayúsculas y minúsculas, y el uso de caracteres especiales en los nombres de archivo.
- Directorios: suelen tener directorios para organizar archivos en colecciones separadas. Pueden ser planos o jerárquicos. De esto hablaré con mayor detenimiento más adelante, ya que de eso se trata…
- Metadatos: tiene asociada información de metadatos, que incluye detalles como la longitud de los datos, marcas de tiempo, permisos de acceso y atributos de archivo.
- Utilidades y acceso: se utilizan para inicializar, modificar y eliminar instancias de sistemas de archivos, así como para crear, renombrar y eliminar directorios y archivos, cifrado, cuotas, migración, conversión, backup, etc.
- Integridad y gestión de fallos: el FS debe mantener la integridad de las estructuras del sistema de archivos en el almacenamiento secundario o unidades externas, incluso en casos de fallos del sistema operativo o cortes de energía.
- Datos de usuario: debe permitir la gestión de los datos de usuario, que incluye el almacenamiento, recuperación y actualización de datos.
- Múltiples sistemas de archivos: existe la posibilidad de tener múltiples sistemas de archivos en un solo sistema.
- Limitaciones de diseño: los sistemas de archivos tienen limitaciones funcionales que definen la capacidad máxima de almacenamiento dentro de ese sistema, el tamaño máximo de los archivos, número de ellos, etc.
¿Qué es una partición?
Una partición es una sección o subdivisión lógica de una unidad de almacenamiento de datos, como puede ser un disco duro HDD, un SSD, un pendrive flash, etc. Esta división tiene varios propósitos, lo que permite una mejor organización y gestión de los datos almacenados. Por ejemplo, se podría usar cada partición para un fin, instalar varios sistemas operativos en ellas, etc.
Es importante destacar que la creación, eliminación y redimensionamiento de particiones pueden tener implicaciones en la pérdida de datos, por lo que es importante realizar estas operaciones con precaución y respaldar datos críticos antes de hacer cambios importantes en la estructura de particiones.
Por otro lado, de modo resumido, también deberías comprender que existen varios tipos de particiones fundamentales en el sistema MBR (se amplían las posibilidades en el GPT, con hasta 128 particiones posibles en una misma unidad, aunque esto es otro tema…):
- Partición Primaria: cada unidad de almacenamiento puede tener hasta cuatro particiones primarias. Estas son las particiones principales en las que se instalan los sistemas operativos y donde residen los datos. Una de las particiones primarias puede ser designada como una partición activa o de arranque, desde la cual se inicia el sistema operativo.
- Partición Extendida: una partición extendida es una partición primaria especial que se utiliza para crear particiones lógicas adicionales dentro de ella. No contiene datos directamente, pero actúa como un contenedor para particiones lógicas. Puedes tener múltiples particiones lógicas dentro de una partición extendida. Esto permite superar la limitación de cuatro particiones primarias en un disco duro.
- Partición Lógica: son las que se crean dentro de una partición extendida. No se utilizan para arrancar el sistema operativo y generalmente se usan para organizar datos o archivos. Puedes tener varias particiones lógicas dentro de una partición extendida, lo que facilita la organización de datos.
¿Qué es la tabla de particiones?
La tabla de particiones es una estructura de datos que se encuentra al principio del disco duro y contiene información sobre cómo se dividió el disco en particiones. Por lo general, se almacena en el sector de arranque maestro (MBR) en sistemas basados en BIOS o en GPT (GUID Partition Table) en sistemas más modernos basados en UEFI. La tabla de particiones incluye detalles como el tamaño de cada partición, su tipo (por ejemplo, NTFS, FAT32, ext4, etc.) y la ubicación en el medio de almacenamiento.
Por tanto, la relación entre la tabla de particiones y el sistema de archivos radica en el hecho de que la tabla de particiones indica dónde comienza y termina cada partición en el disco físico. Cada partición se formatea con un sistema de archivos específico. Cuando se accede a una partición para leer o escribir archivos, el sistema operativo utiliza la información de la tabla de particiones para ubicar y comprender cómo está estructurado el sistema de archivos en esa partición en particular.
Tipos de sistemas de archivos
Entre los diferentes sistemas de archivos hay que destacar los siguientes tipos:
- Sistemas de archivos en disco (Disk File System): estos sistemas aprovechan la capacidad de los medios de almacenamiento en disco para acceder a datos de manera aleatoria en poco tiempo. Permiten el acceso a múltiples usuarios o procesos a datos en el disco sin importar su ubicación secuencial. Ejemplos incluyen FAT, exFAT, NTFS, Reiser FS, HFS, HFS+, HPFS, APFS, UFS, ext2, ext3, ext4, XFS, btrfs, VMFS, ZFS, ReiserFS, NSS y ScoutFS. Además de estos, también se podrían considerar:
- Discos ópticos: formatos comunes como ISO 9660 y Universal Disk Format (UDF) utilizados en CD, DVD y Blu-ray.
- Sistemas de archivos para memoria flash (Flash File System): estos sistemas se diseñan específicamente para dispositivos de memoria flash y tienen en cuenta sus características y restricciones. Se recomienda usar sistemas de archivos diseñados para dispositivos flash en lugar de adaptar sistemas de disco. Algunos ejemplos son JFFS, JFFS2, YAFFS, UBIFS, LogFS, y F2FS…
- Sistemas de archivos para cintas magnéticas (Tape File System): sistemas gestionan el almacenamiento en cintas, que tienen tiempos de acceso aleatorio más largos que los discos. Se diferencia en la gestión de directorios y se destaca la necesidad de evitar movimientos lineales frecuentes en cintas. Un ejemplo podría ser LTFS de IBM.
- Sistemas de archivos de base de datos (Database File System): sistemas de archivos basados en bases de datos, donde los archivos se identifican por características como el tipo, el autor o los metadatos. Ejemplos los tienes en el IBM DB2, entre otros.
- Sistemas de archivos transaccionales (Transactional File System): estos sistemas garantizan la atomicidad y el aislamiento de operaciones en un archivo. Ejemplos los tenemos en NTFS en Microsoft Windows y otros prototipos de sistemas de archivos transaccionales para UNIX/Linux, como LFS, ext3, etc.
- Sistemas de archivos de red (Network File System): los sistemas de archivos de red que permiten el acceso a archivos en servidores remotos a través de protocolos como NFS, AFS, SMB, FTP y WebDAV. Es decir, están pensados para la computación distribuida.
- Sistemas de archivos compartidos en disco (Shared File System): estos sistemas permiten que múltiples servidores accedan a un mismo subsistema de disco de forma segura. Ejemplos incluyen GFS2, GPFS, SFS, CXFS, StorNext y ScoutFS.
- Sistemas de archivos especiales (Special File System): son algo particulares, y no tienen elementos de archivos como tales, pero se pueden acceder mediante APIs. Por ejemplo, denemos los Device File System como devfs utilizado en Linux, etc. Por otro lado tenemos otros especiales como configfs, sysfs y procfs, también conocidos en el mundo Linux.
- Sistemas de archivo mínimo / almacenamiento en casetes de audio (Minimal File System / Audio-Cassette Storage): se utilizaban casetes de audio como sistemas de almacenamiento de datos para alimentar a algunos modelos de microcomputadoras de la época, como por ejemplo el Commodore PET.
- Sistemas de archivos planos (Flat File System): estos sistemas no tienen subdirectorios y almacenan todas las entradas de directorio en un solo directorio principal. Ejemplos de estos FS son el empleado en el sistema CP/M y el Macintosh File System para los Macs clásicos de Apple.
Tecnologías de los FS
Cada sistema de archivos tiene sus particularidades, y admiten diferentes tecnologías. Algunas de las más importantes son:
- Self-Healing (Autorecuperación): se refiere a la capacidad de un sistema de archivos para detectar y corregir automáticamente errores y problemas que puedan surgir en el sistema de almacenamiento. Estos errores pueden incluir sectores dañados en un disco duro u otros tipos de corrupción de datos. Cuando se detecta un error, el sistema de archivos puede intentar recuperar los datos afectados mediante la restauración desde copias de seguridad o mediante la reparación de datos dañados. Esto ayuda a mantener la integridad de los datos almacenados en el sistema de archivos.
- Compresión: es una característica que permite reducir el tamaño de los archivos y datos almacenados en el sistema de archivos. Comprimir los datos puede ahorrar espacio en disco y acelerar la transferencia de archivos. Cuando se habilita la compresión, el sistema de archivos comprime automáticamente los archivos escritos en él y descomprime los archivos cuando se leen. Esto puede ser útil en sistemas de almacenamiento con recursos limitados, aunque ralentice los accesos.
- Cifrado: es una técnica que se utiliza para proteger la confidencialidad de los datos almacenados en el sistema de archivos. Los datos se cifran antes de escribirse en el disco y se descifran cuando se leen. El cifrado asegura que los datos sean ilegibles para cualquier persona que no tenga la clave de descifrado adecuada. Esto es esencial para proteger la privacidad y la seguridad de los datos sensibles. Al igual que la compresión, también puede ralentizar los accesos.
- Journaling (Registro de Transacciones): es una característica que mantiene un registro de todas las operaciones que se realizan en el sistema de archivos, como la creación, modificación o eliminación de archivos. Este registro se llama «journal» o «registro de transacciones.» En caso de un fallo del sistema, como un corte de energía inesperado, el sistema de archivos puede utilizar el registro de transacciones para recuperarse a un estado coherente. Esto evita la corrupción de datos y garantiza la integridad del sistema de archivos.
- Capacidad de Snapshots (Instantáneas): son copias puntuales del sistema de archivos en un momento específico en el tiempo. Estas copias son instantáneas y se almacenan junto con los datos actuales en el sistema de archivos. Los snapshots permiten restaurar el sistema de archivos a un estado anterior si se producen errores o cambios no deseados. Esto es útil para fines de copia de seguridad, recuperación de datos y prueba de cambios antes de implementarlos de manera permanente en el sistema.
¿Qué es un directorio o carpeta?
Ahora que ya sabemos cómo se almacenan los datos en las unidades de almacenamiento y las estructuras de datos necesarias, ahora es el momento de pasar a explicar qué es una carpeta o directorio (Folder o Directory).
Un directorio o carpeta es una estructura para catalogar otros archivos dentro del del sistema de archivos, dándole una jerarquía u organización más intuitiva para el usuario o para el sistema operativo. Para ello, contiene referencias a otros archivos y posiblemente a otros directorios o carpetas, en este caso llamados subdirectorios o subcarpetas.
Algunos sistemas operativos con sistemas de archivos jerárquicos, como los Unix, suelen tener una memoria caché de directorios con rutas recientes que se almacena en un pedazo de la RAM. En Unix se conoce a esta parte como DNLC (Directory Name Lookup Cache), mientras que en Linux se denomina dcache. Esta porción de memoria se va actualizando con las rutas accedidas más recientemente, mientras que en los sistemas de archivos de red es necesario un mecanismo para garantizar la coherencia, gestionando aquellas entradas que hayan sido invalidadas o creadas de nuevas por los usuarios.
En un sistema de archivos jerárquico el almacenamiento es en forma de árbol. A menudo se utilizan los términos padre e hijo para describir la relación entre un subdirectorio y el directorio en el que se cataloga, siendo este último el padre. El directorio más superior en dicho sistema de archivos, que no tiene un padre propio, se llama directorio raíz. Esto se puede apreciar muy bien en Unix o Linux, donde tienes una jerarquía particular y el directorio raíz es root o /, del que cuelgan todos los demás, incluso si no están en la misma partición…
Un directorio virtual (Virtual Directory) es un tipo de organización de archivos que no depende de la ubicación en un árbol jerárquico de directorios. En vez de eso, reúne resultados de una fuente de datos, que puede ser una base de datos o un índice personalizado, y los presenta visualmente en el formato en el que se presentan las vistas de carpetas.
Estas carpetas o directorios se pueden gestionar utilizando herramientas, tanto GUI como CLI. Por ejemplo, podemos usar comandos o el propio gestor de archivos para crear, eliminar, renombrar, mover, copiar, etc. Aunque algunos sistemas operativos pueden tener ciertas restricciones sobre los permisos y las acciones que puedes tener sobre ciertas carpetas…
Detalles sobre una carpeta o directorio en los diferentes sistemas operativos
En cada sistema de archivos y sistema operativo, los archivos y carpetas se tratan de forma diferente:
- Raíz o root: es el punto del que cuelgan o en el que están el resto de la jerarquía de carpetas del sistema. En Windows generalmente suele ser C:\, mientras que en Unix/Linux es la partición root o /.
- Path o ruta: se trata de la ruta en la que se localiza una carpeta o archivo dentro de un FS. Por ejemplo, en Windows podemos tener C:\Program Files\Office\Word.exe. Mientras que en Unix/Linux sería algo así como /home/usuario/ejemplo.c. Como vemos, en Windows se usa la barra inversa o backslash, mientras que en el mundo *nix se emplea el slash tradicional.
- Filename o nombre de archivo: se denomina así al nombre que tiene cada archivo dentro de un FS específico. Cada sistema de archivos tendrá sus limitaciones en cuanto a caracteres máximos para un filename. Además, hay que diferenciar entre el nombre base y la extensión. En algunos sistemas primitivos también existían limitaciones para la longitud de las extensiones, siendo generalmente 3. Por eso verás a veces .htm en vez de .html, para que sea compatible con los sistemas DOS. Un ejemplo de nombre de archivo puede ser ejemplo.txt, donde «ejemplo» es el nombre y «txt» es la extensión, indicando en este caso que es texto.
El caso particular de Unix/Linux
¿Qué es el superbloque?
Un superbloque (superblock) es una estructura de datos fundamental que se encuentra al principio de un sistema de archivos. El superbloque contiene información crítica sobre el sistema de archivos en sí y se utiliza para administrar y acceder a los datos almacenados en ese sistema de archivos. Cada sistema de archivos Unix tiene su propio superbloque, y su formato específico puede variar según el sistema de archivos utilizado (por ejemplo, ext4, XFS, UFS, etc.).
La información que se almacena en el superbloque puede incluir:
- Tamaño del sistema de archivos: indica el tamaño total del sistema de archivos.
- Número de inodos: especifica la cantidad de inodos disponibles en el sistema de archivos. Los inodos son estructuras de datos que representan archivos y directorios.
- Bloques libres: registra la cantidad de bloques de datos libres que quedan en el sistema de archivos para almacenar información.
- Punto de montaje: indica el directorio en el que se monta el sistema de archivos en el sistema operativo.
- Identificación del sistema de archivos: un identificador único para el sistema de archivos que lo distingue de otros sistemas de archivos en el mismo sistema.
- Fecha y hora de montaje: registra cuándo se montó por última vez el sistema de archivos.
- Contadores de inodes y bloques utilizados: lleva un registro de cuántos inodos y bloques de datos se están utilizando en el sistema de archivos.
- Checksum y otros metadatos de integridad: algunos superbloques modernos pueden incluir información adicional para verificar la integridad de los datos almacenados en el sistema de archivos.
Cuando se monta un sistema de archivos, es decir, una partición con formato, el sistema operativo accede al superbloque para obtener información vital sobre la estructura y el estado del sistema de archivos. Esta información es esencial para la lectura y escritura de datos en el sistema de archivos, así como para garantizar la integridad y la coherencia de los datos almacenados.
Inodes y directorios
En Unix/Linux, todo es un fichero o archivo, como pueden ser las particiones, las unidades de dispositivos, etc. Esto en otros sistemas no es así, como es el caso de Windows. Sin embargo, cuando todo es un archivo, también las propias carpetas o directorios son considerados unos tipos de archivos especiales.
Por tanto, un directorio es un archivo especial que contiene nombres de archivos (y de subdirectorios) y números de inode para archivos en el mismo sistema de archivos o nombres de enlaces simbólicos a archivos o directorios en el mismo o en diferentes sistemas de archivos. En el caso de los hard links, el inodo lleva un registro de cuántas entradas de directorio están listadas en él y elimina los bloques de archivo cuando el recuento de enlaces llega a cero. Esto es diferente en caso de ser un soft link o enlace simbólico. Borrar un enlace simbólico no afecta al archivo de destino. Pero, si se borra un archivo con enlaces simbólicos a él, los enlaces se vuelven inutilizables.
En los sistemas de archivos de Unix/Linux, un archivo puede tener varios nombres, con una entrada de directorio para cada nombre en directorios iguales o diferentes, que todos apuntan a la misma estructura de inodo que mantiene la lista de bloques de disco donde se almacenan los datos.
Para comprender todo esto mejor, es importante tener presente qué es eso del inode (index node). Se trata de una estructura de datos fundamental en sistemas de archivos de los *nix. Representa y almacena información esencial sobre un archivo o directorio dentro del sistema de archivos. Por tanto, tanto una carpeta como un archivo serán vistos como un inode por el sistema.
Para que esto sea posible, cada inode apunta a la siguiente información:
- Número de inodo: un identificador único para cada archivo o directorio.
- Tipo de archivo: indica si el inodo se refiere a un archivo regular (f), un directorio (d), un enlace simbólico (l) u otro tipo de archivo.
- Tamaño del archivo: el tamaño actual del archivo en bytes.
- Permisos y propietario: información sobre quién tiene permiso para acceder (lectura, escritura, ejecución) y modificar el archivo, así como el propietario del archivo (usuario o root). Incluso el propietario podría ser un usuario que no existe como tal, sino que puede ser un dispositivo, etc.
- Fecha y hora de creación/modificación: registra cuándo se creó por primera vez el inode y cuándo se modificó por última vez. También se podría incluir otros metadatos o permisos extendidos.
- Número de enlaces: indica cuántos nombres de archivo o directorio se asocian con este inode. Los directorios tienen al menos dos enlaces: uno para sí mismos y otro para su directorio padre.
- Apuntadores a bloques de datos: contiene referencias a bloques de datos en la unidad de almacenamiento que almacenan el contenido real del archivo. Estos bloques pueden ser direcciones directas, indirectas o doblemente indirectas, dependiendo de la implementación específica del sistema de archivos y del tamaño del archivo.
Los inodos son cruciales para el funcionamiento del sistema de archivos, ya que permiten que el sistema operativo realice un seguimiento de la ubicación física y la información asociada con cada archivo y directorio. Cuando se accede a un archivo o directorio, el sistema operativo consulta el número de inodo correspondiente para encontrar la ubicación de los datos y otra información relacionada con ese archivo.
[ad_2]
Source link