En esta sección usaré la expresión "sistema de archivos" de dos formas diferentes. Están los sistemas de archivos de las particiones del disco y otros dispositivos y está el sistema de archivos tal y como te lo presenta un equipo ejecutando Linux. En Linux "montas" un sistema de archivos de disco en el sistema de archivos del equipo.
En la sección anterior mencioné que los scripts de init comprueban y montan los
sitemas de archivos. Los comandos para hacerlo son fsck
y mount
respectivamente.
Un disco duro no es más que un gran espacio sobre el que puedes escribir unos y ceros.
Un sistema de archivos impone cierta estructura en ello, y hace que parezca que hay
archivos dentro de directorios, dentro de directorios... Cada archivo se representa por un
inode, que dice a quién pertenece el archivo, cuándo se creó y dónde encontrar su
contenido. Los directorios también se representan por medio de inodes, pero estos dicen
dónde encontrar los inodes de los archivos que están en el directorio. Si el sistema
quiere leer /home/greg/bigboobs.jpeg
primero busca el inode del directorio
raíz /
en el "superbloque", luego busca el inode del directorio
home
en el contenido de /
, luego busca el inode del directorio
greg
en el contenido de /home
, luego el inode de
bigboobs.jpeg
que le dirá qué bloques del disco leer.
Si añadimos unos datos al final de un archivo, puede ocurrir que los datos se escriban
antes de que el inode se actualice para decir qué nuevos bloques pertenecen al archivo, o
viceversa. Si se interrumpe la corriente en este momento, el sistema de archivos estrará
roto. Este tipo de cosas es el que fsck
intenta detectar y reparar.
El comando mount toma un sistema de archivos en un dipositivo y lo añade a la
jerarquía que ves cuando usas tu equipo. Normalmente, el núcleo monta su sistema de
archivos raíz como sólo de lectura. El comando mount se usa para montarlo de nuevo como
de lectura y escritura una vez que fsck
ha comprobado que está bien.
Linux soporta otros tipos de sistemas de archivos: msdos, vfat, minix y más. Los detalles del tipo de sistema de archivos específico quedan ocultos por el sistema de archivos virtual (VFS). No voy a entrar en detalles. Hay una explicación de ello en "The Linux Kernel" (ver la sección El núcleo de Linux para encontrar un url).
En /proc
se monta un tipo de sistema de archivos totalment diferente. En
realidad es una representación de lo que hay en el núcleo. Allí hay un directorio para
cada proceso que se ejecuta en el sistema, con el número de proceso como nombre del
directorio. Hay también archivos como interrupts
y meminfo
que
te dicen cómo se usa el hardware. Puedes aprender mucho explorando /proc
.
El comando mke2fs
que crea sistemas de archivos ext2 acepta parámetros.
Éstos controlan el tamaño de los bloques, el número de inodes y cosas así. Lee la
página man de mke2fs
para saber cómo.
El archivo /etc/fstab
controla qué se monta dónde en tu sistema de
archivos. También tiene una página man.
Haz un sistema de de archivos muy pequeño y explóralo con un visor hexadecimal. Identifica los inodes, superbloques y contenido de archivos.
Creo que hay herramientas que te dan una visión gráfica de un sistema de archivos. Encuentra una, pruébala y ¡envíame por correo la dirección y un comentario del programa!
Investiga el código del sistema de archivos ext2 del núcleo.
mount
es parte del paquete util-linux, hay un enlace a él en
Building a Minimal Linux System from
Source Code mount
, fstab
, fsck
, mke2fs
y proc
Documentation/proc.txt
del código fuente de Linux explica el
sistema de archivos /proc
./bin
, /sbin
y otros. Es una buena referencia si quieres hacer un sistema mínimo pero completo.