Sistemas de archivos

Aprende cómo un sistema operativo almacena archivos para que sobrevivan a cortes de energía y fallos. Usa las llamadas al sistema para archivos y directorios, desde open y read hasta fsync, rename, enlaces y permisos. Descubre cómo un sistema de archivos sencillo organiza inodos, mapas de bits y bloques de datos, cómo Fast File System mantiene próximos los datos relacionados y cómo fsck y el registro en diario mantienen la consistencia del disco después de un fallo. Termina con los sistemas de archivos estructurados como registro y con la forma en que NFS y AFS comparten archivos a través de una red.

IntermedioUnidad 8 de 9 del curso Curso de Sistemas operativos

Lo que aprenderás

  1. Usa las llamadas al sistema de las que depende un programa para crear, leer, escribir, nombrar, proteger y organizar archivos, y predice qué hace cada llamada con los desplazamientos, los nombres y los datos en disco.
    • Lee y escribe archivos mediante descriptores de archivo
      Abre archivos, léelos y escríbelos mediante descriptores de archivo, cambia el desplazamiento dentro del archivo y explica cómo los procesos comparten archivos abiertos.
    • Garantiza la durabilidad de las escrituras y la atomicidad de las actualizaciones
      Fuerza la escritura de datos en almacenamiento estable cuando deban sobrevivir a un fallo y sustituye el contenido de un archivo de modo que los lectores vean la versión antigua o la nueva.
    • Organiza los nombres mediante directorios y enlaces
      Crea, lista y elimina directorios, y explica cómo afectan a los nombres y a los inodos los enlaces duros, los enlaces simbólicos y la eliminación de un archivo.
    • Consulta metadatos, controla el acceso y monta sistemas de archivos
      Consulta los metadatos de un archivo con stat, establece e interpreta los bits de permisos y explica cómo se unen sistemas de archivos separados en un solo árbol de directorios.
  2. Describe las estructuras en disco de un sistema de archivos sencillo de estilo Unix, calcula dónde se encuentran un inodo y los bloques de un archivo, y sigue las lecturas y escrituras de disco necesarias para abrir, leer y escribir un archivo.
    • Organiza un disco en bloques, mapas de bits, inodos y directorios
      Divide un disco en superbloque, mapas de bits de asignación, tabla de inodos y región de datos, localiza un inodo por su número y describe cómo se almacenan los directorios y el espacio libre.
    • Localiza los datos de un archivo mediante punteros, bloques indirectos y extensiones
      Explica cómo los punteros directos, los bloques indirectos y las extensiones de un inodo relacionan los desplazamientos de un archivo con bloques de disco, y calcula el tamaño máximo de archivo que admite una organización de punteros.
    • Sigue la entrada/salida de disco de las operaciones con archivos y el efecto de la caché
      Cuenta las lecturas y escrituras de bloques necesarias para abrir, leer, crear y escribir un archivo, y explica cómo la caché y el almacenamiento temporal de escrituras en búfer modifican ese tráfico.
  3. Diagnostica por qué los primeros sistemas de archivos Unix eran lentos en discos duros y explica cómo los grupos, las reglas de colocación y la política para archivos grandes de Fast File System mantienen próximos los datos relacionados.
    • Explica por qué los primeros sistemas de archivos Unix eran lentos y cómo lo solucionan los grupos
      Identifica los problemas de organización que desperdiciaban ancho de banda del disco en el sistema de archivos Unix original y describe cómo los grupos de cilindros y de bloques organizan el disco.
    • Aplica las reglas de colocación de FFS y dimensiona los fragmentos de archivos grandes
      Usa las heurísticas de colocación de FFS para directorios y archivos, aplica la excepción para archivos grandes, calcula el tamaño necesario de un fragmento para amortizar el posicionamiento y describe las otras mejoras de FFS.
  4. Explica por qué un fallo en mitad de una actualización puede corromper un sistema de archivos y compara su reparación posterior con fsck, la prevención de daños mediante el registro en diario y otros enfoques.
    • Explica el problema de la consistencia ante fallos
      Muestra por qué una operación con archivos necesita varias escrituras de bloques, enumera lo que un fallo entre ellas puede dejar en el disco y clasifica cada resultado.
    • Comprueba y repara un sistema de archivos con fsck
      Describe qué examina y repara el comprobador del sistema de archivos después de un fallo y explica por qué explorar todo el disco escala mal y no permite detectar todos los problemas.
    • Protege las actualizaciones mediante el registro de datos en diario y reaplica el registro
      Escribe una actualización en un diario antes de modificar el sistema de archivos en su ubicación, explica por qué el bloque de confirmación se escribe al final y recupera el sistema tras un fallo reaplicando las transacciones confirmadas.
    • Reduce el coste del registro en diario y compara otros enfoques
      Explica cómo el registro de metadatos en diario evita escribir los datos dos veces, por qué el registro ordenado escribe los datos antes de la confirmación, cómo los registros de revocación evitan un error al reutilizar bloques y cómo otros diseños mantienen la consistencia de los sistemas de archivos.
  5. Explica por qué escribir todo secuencialmente en un registro acelera las escrituras, cómo el mapa de inodos y la región de puntos de control permiten al sistema de archivos localizar datos en ese registro y cómo funcionan la limpieza y la recuperación tras un fallo.
    • Escribe secuencialmente en segmentos y localiza inodos mediante el mapa de inodos
      Explica la motivación de un sistema de archivos estructurado como registro, dimensiona un segmento para alcanzar un ancho de banda objetivo y sigue cómo el mapa de inodos y la región de puntos de control localizan un archivo.
    • Recupera espacio con el limpiador de segmentos y restaura el sistema tras un fallo
      Explica cómo LFS encuentra y compacta los bloques vigentes, elige qué segmentos limpiar y se recupera tras un fallo, y cómo sus ideas perduran en los sistemas de archivos con copia en escritura y para memoria flash.
  6. Explica cómo NFS y AFS permiten que muchas máquinas cliente usen archivos almacenados en servidores, cómo gestionan los fallos y cómo sus decisiones sobre la caché determinan cuándo un cliente ve los cambios de otro.
    • Explica cómo NFS se recupera de los fallos mediante solicitudes sin estado
      Describe la estructura cliente-servidor de NFS, cómo los identificadores de archivo remoto y las solicitudes idempotentes permiten a un cliente recuperarse de fallos del servidor mediante reintentos y por qué el servidor debe confirmar las escrituras antes de responder.
    • Compara la caché y la consistencia de NFS y AFS
      Explica cómo NFS y AFS almacenan datos de archivos en la caché de los clientes, cuándo hace visible cada uno los cambios de un cliente para los demás y qué cargas de trabajo favorecen cada diseño.

Guía de estudio de Sistemas de archivos

6 capítulos

1

Usa la interfaz de archivos y directorios

Las operaciones con archivos exponen varios tipos de estado: bytes, nombres, posiciones de archivos abiertos y permisos. Sigue un descriptor a través de lecturas y desplazamientos compartidos y después distingue una llamada completada de un guardado duradero. Los directorios y enlaces explican por qué eliminar un nombre no tiene por qué eliminar el objeto. Los metadatos y el montaje completan la visión de cómo un programa accede a un archivo y lo usa a través de un único árbol de directorios.

1.1 Lee y escribe archivos mediante descriptores de archivo

Un archivo es una secuencia persistente de bytes. El sistema de archivos almacena esos bytes sin decidir si representan texto, una imagen o código máquina. Un directorio da al archivo un nombre legible; su número de inodo lo identifica dentro del sistema de archivos.

Abre un archivo y comprueba el resultado

open(path, flags, mode) devuelve un descriptor de archivo, un entero no negativo que se usa en llamadas posteriores. Si hay un error, devuelve -1 y establece errno. Elige O_RDONLY, O_WRONLY o O_RDWR para el acceso. O_CREAT crea un archivo que no existe, O_TRUNC vacía un archivo existente y O_APPEND coloca cada escritura en el final actual.

Para un archivo nuevo, mode solicita permisos y la umask del proceso elimina bits. Si el directorio no tiene una lista de control de acceso (ACL) predeterminada, el resultado es mode & ~umask. Solicitar 0666 con umask 0022 da 0644, o rw-r--r--. Este argumento no cambia los permisos de un archivo que ya existe.

Los descriptores pertenecen a un proceso. Normalmente 0, 1 y 2 son la entrada, la salida y el error estándar. open elige el descriptor sin usar de menor valor, a menudo 3. En Linux, strace cat notes.txt muestra las llamadas: abrir la entrada, leerla, escribir en el descriptor 1 y después cerrar la entrada.

Sigue el desplazamiento, no la cantidad solicitada

read(fd, buf, n) devuelve el número de bytes realmente leídos, hasta n. Para una solicitud distinta de cero en un archivo normal, cero significa que no quedan bytes en el final del archivo o más allá; -1 indica un error. write también devuelve una cantidad real, que puede ser inferior a la solicitada. Comprueba esa cantidad antes de avanzar en un búfer o decidir que la operación ha terminado.

Supón que log.txt contiene 300 bytes. Cuatro solicitudes de 100 bytes devuelven 100, 100, 100 y 0. El desplazamiento, la posición de la siguiente operación, pasa a 100, 200, 300 y 300. El fin de archivo se indica mediante una cantidad devuelta, no mediante un byte especial almacenado en el archivo.

lseek(fd, 200, SEEK_SET) establece el desplazamiento en 200. Leer después 50 bytes devuelve los bytes 200 a 249 y deja el desplazamiento en 250. SEEK_CUR mide desde el desplazamiento actual; SEEK_END mide desde el final del archivo. Cambiar el desplazamiento modifica un número en memoria. No mueve un cabezal de disco ni lee datos por sí mismo. pread y pwrite usan una posición explícita sin cambiar este desplazamiento.

Determina qué descriptores comparten un desplazamiento

La tabla de descriptores del proceso apunta a entradas de la tabla de archivos abiertos del núcleo. Cada entrada de archivo abierto contiene el modo de acceso, el desplazamiento, una referencia al inodo y un contador de referencias.

Cómo se obtienen los descriptoresComportamiento del desplazamiento
Dos llamadas separadas a openDesplazamientos independientes, incluso para el mismo inodo
dup o dup2Una entrada de archivo abierto y un desplazamiento compartidos
Descriptores heredados mediante forkEl padre y el hijo comparten la entrada de archivo abierto y el desplazamiento

Si un hijo sitúa un descriptor compartido en el byte 10, la siguiente lectura del padre mediante esa entrada también empieza en 10. El inodo identifica el archivo, pero la entrada de archivo abierto contiene el desplazamiento: dos lectores pueden compartir un archivo sin compartir su posición. La redirección del intérprete de comandos usa dup2 para que la salida estándar se refiera a otra entrada de archivo abierto. close libera un descriptor; la entrada desaparece cuando se libera su última referencia. Cerrar por sí solo no fuerza la escritura de los datos en búfer en almacenamiento estable.

Puntos clave

  • Comprueba el número de bytes devuelto por cada llamada a read y write.
  • Un desplazamiento pertenece a una entrada de la tabla de archivos abiertos, no al inodo.
  • Las aperturas separadas tienen desplazamientos separados; los descriptores duplicados y heredados comparten uno.
  • lseek cambia el desplazamiento sin realizar entrada/salida de disco.
  • close libera un descriptor; no garantiza la durabilidad.

1.2 Garantiza la durabilidad de las escrituras y la atomicidad de las actualizaciones

Una escritura que termina correctamente y una actualización resistente a fallos responden a preguntas distintas. Una escritura informa de que se han aceptado los bytes. La durabilidad plantea si sobreviven a un fallo; la atomicidad plantea si una actualización solo puede observarse como un todo.

Fuerza la escritura de los bytes en almacenamiento estable

Los sistemas operativos suelen almacenar las escrituras en búfer en memoria y enviar los bloques modificados al almacenamiento más tarde, a menudo en unos 5 a 30 segundos. Esto combina escrituras pequeñas y permite que el programa continúe rápidamente. Un fallo puede borrar los datos que aún esperan en esos búferes.

fsync(fd) fuerza la escritura de los datos y metadatos modificados del archivo en el almacenamiento y espera a que el dispositivo informe de que ha terminado. Un programa debe comprobar el resultado antes de comunicar que el guardado es duradero. close libera el descriptor y no sustituye esta espera.

Un archivo también necesita un nombre duradero. La entrada que relaciona el nombre con el inodo es un dato que pertenece a su directorio, no al archivo. Después de crear un archivo, sincronizar solo el archivo puede hacer que sus bytes sean duraderos sin garantizar que sobreviva su nuevo nombre. Abre el directorio que lo contiene y sincronízalo cuando el nombre deba persistir.

Sustituye un archivo sin exponer una versión parcial

Sobrescribir un documento en su ubicación crea un intervalo en el que los lectores pueden encontrar contenido incompleto. O_TRUNC primero establece su longitud en cero. Si un fallo interrumpe las escrituras posteriores, la copia antigua completa ya ha desaparecido.

En su lugar, escribe el contenido de sustitución con un nombre temporal en el mismo directorio. Después usa rename para sustituir el destino. Para un destino existente en el mismo sistema de archivos, POSIX hace que esa sustitución sea atómica: el nombre de destino se refiere al archivo antiguo o al de sustitución, sin un momento intermedio en el que falte el nombre. Los lectores no ven una mezcla de sus contenidos a través de ese nombre.

Para settings.json, la secuencia de sustitución duradera es:

  1. Escribe todo el contenido nuevo en settings.json.tmp y comprueba si hay escrituras parciales o errores.
  2. Llama a fsync sobre el archivo temporal y comprueba que se complete correctamente.
  3. Llama a rename("settings.json.tmp", "settings.json") y comprueba que se complete correctamente.
  4. Llama a fsync sobre el directorio que lo contiene y comprueba que se complete correctamente.

El archivo temporal está completo y es duradero antes de que cambie el nombre. La sincronización final del directorio hace duradero ese cambio de nombre. Un fallo durante la secuencia deja en el destino la versión antigua completa o la nueva completa; después de que la sincronización final termine correctamente, la nueva versión es la duradera. La sustitución atómica del nombre por sí sola no garantiza que un cambio de nombre sin sincronizar sobreviva a un corte de energía.

rename entre sistemas de archivos falla con EXDEV. Un comando que responde copiando y eliminando realiza varias operaciones, por lo que esa alternativa no garantiza la sustitución atómica.

Cambia la longitud sin escribir todos los bytes

truncate(path, length) y ftruncate(fd, length) establecen la longitud del archivo. Reducirla descarta los bytes situados más allá del nuevo final. Ampliarla hace que la nueva región se lea como ceros. Situar el desplazamiento más allá del final y después escribir también crea un hueco que se lee como ceros.

Un archivo disperso puede representar ese hueco sin asignarle bloques de datos. Partiendo de un archivo vacío, escribir un byte en el desplazamiento 8192 crea un archivo de 8193 bytes; la región anterior sin escribir se lee como ceros. Su tamaño lógico puede superar el espacio asignado físicamente.

Puntos clave

  • fsync hace duraderos los datos y metadatos del archivo cuando termina correctamente.
  • Sincroniza el directorio para hacer duradero un nombre nuevo o sustituido.
  • Escribe, sincroniza, renombra y después sincroniza el directorio para lograr una sustitución duradera.
  • Un hueco disperso se lee como ceros y puede no ocupar bloques de datos.

1.3 Organiza los nombres mediante directorios y enlaces

Los directorios separan los nombres que usan las personas de los objetos que almacena el sistema de archivos. Cada directorio tiene su propio inodo y bloques de datos; sus entradas relacionan nombres con números de inodo.

Sigue las rutas a través del árbol

Una ruta absoluta empieza en /. Una ruta relativa empieza en el directorio de trabajo actual del proceso. La entrada . nombra el propio directorio y .. nombra su directorio padre; el padre de la raíz es la propia raíz. Desde /home/lee, la ruta relativa ../shared llega a /home/shared.

Una extensión como .txt forma parte de un nombre. Los programas pueden usarla para elegir cómo interpretar los bytes, pero el sistema de archivos no exige que un archivo .txt contenga texto.

mkdir crea un directorio que contiene . y ... Para listar las entradas, un programa usa opendir, llama a readdir hasta que no queden entradas y llama a closedir. Un resultado de readdir incluye un nombre y un número de inodo. Los programas cambian el contenido de los directorios mediante llamadas como link, unlink y rename, no mediante llamadas ordinarias a write. rmdir elimina un directorio vacío.

Da a un archivo dos nombres equivalentes

link(old, new) crea un enlace duro: otra entrada de directorio que apunta al mismo inodo. Ninguno de los nombres tiene el privilegio de ser el original. El número de enlaces del inodo registra cuántos nombres se refieren a él.

Considera estos comandos cuando ningún proceso mantiene abierto el archivo:

echo hi > a
ln a b
rm a
cat b
rm b

Crear b aumenta el número de enlaces de 1 a 2. Eliminar a lo reduce a 1; b sigue dando acceso a los mismos bytes, por lo que cat b imprime «hi». Eliminar b reduce el número a 0, lo que permite recuperar el inodo y sus bloques.

Un descriptor abierto añade una segunda regla sobre el tiempo de vida. Si se elimina el último nombre mientras un proceso todavía tiene abierto el archivo, ese proceso puede seguir accediendo a él. La recuperación espera tanto a que haya cero enlaces como a que no haya referencias abiertas. Esto explica por qué eliminar un archivo de registro grande que está abierto puede no liberar su espacio de inmediato.

Un enlace duro no puede cruzar sistemas de archivos: el número de inodo del destino no tendría significado en la otra tabla de inodos. La mayoría de los sistemas Unix también prohíben los enlaces duros a directorios para conservar un árbol sin ciclos. En el recuento clásico de directorios de Unix, un directorio vacío tiene dos enlaces, el de su entrada en el directorio padre y el de su propia entrada .. Cada subdirectorio aporta uno más mediante ..; tres subdirectorios dan un número de 5.

Almacena una ruta en un enlace simbólico

Un enlace simbólico es un archivo independiente cuyo contenido es una ruta de destino. ln -s /home/ana/report.txt r crea r con la ruta de destino de 20 bytes como contenido. Al seguirlo se resuelve esa ruta. Los enlaces simbólicos pueden cruzar sistemas de archivos y apuntar a directorios.

Tipo de enlaceA qué llega la entrada de directorioEfecto de eliminar el nombre del destino
Enlace duroEl inodo compartidoOtro enlace duro sigue dando acceso al archivo
Enlace simbólicoUn objeto de enlace independiente que contiene una rutaEl enlace queda colgante si la ruta almacenada deja de resolverse

Un enlace simbólico no aumenta el número de enlaces de su destino. Por tanto, conservar el objeto de enlace no mantiene disponible el destino.

Puntos clave

  • Los directorios relacionan nombres con números de inodo; las rutas seleccionan una secuencia de esos nombres.
  • Los enlaces duros son nombres equivalentes para un mismo inodo.
  • Eliminar un enlace elimina un nombre; la recuperación del espacio también espera a que terminen las referencias abiertas.
  • Los enlaces simbólicos almacenan rutas y pueden quedar colgantes.
  • Los enlaces duros permanecen dentro de un mismo sistema de archivos.

1.4 Consulta metadatos, controla el acceso y monta sistemas de archivos

El contenido de un archivo es solo una parte de su estado. Los metadatos registran quién puede usarlo, su tamaño y tipo, y cuándo cambió. El montaje permite acceder a objetos de varios sistemas de archivos a través de un único árbol de nombres.

Interpreta correctamente los metadatos

stat(path, &buf) lee los metadatos mediante una ruta; fstat(fd, &buf) los lee mediante un descriptor abierto. Los resultados incluyen el número de inodo, el tipo, los permisos, los identificadores de propietario y grupo, el tamaño, los bloques asignados y el número de enlaces. El tamaño del archivo cuenta los bytes lógicos; los bloques asignados miden el almacenamiento realmente utilizado, que puede ser menor en un archivo disperso.

Tres marcas de tiempo describen eventos diferentes:

CampoSignificadoEjemplo de evento
atimeÚltimo accesoLectura del contenido
mtimeÚltima modificación del contenidoEscritura de bytes
ctimeÚltimo cambio de estado del inodoEscritura, cambio de permisos o adición de un enlace duro

ctime no es la fecha de creación. Actualizar solo atime no cambia ctime. La llamada stat de Unix clásico no tiene un campo de fecha de creación; statx de Linux puede mostrar una fecha de creación registrada cuando el sistema de archivos la admite.

Interpreta los bits de permisos

Los derechos de lectura, escritura y ejecución se registran por separado para el propietario, el grupo y los demás. Cada clase es un dígito octal: lectura vale 4, escritura 2 y ejecución 1. Para rw-r-----, el propietario recibe 4 + 2 = 6, el grupo recibe 4 y los demás reciben 0. chmod 640 report.txt establece esos bits.

Los permisos de directorio se aplican a los nombres y al recorrido. La lectura permite listar nombres. La ejecución permite la búsqueda, es decir, usar el directorio en una ruta. La escritura junto con la ejecución permite crear, eliminar y renombrar entradas. Conocer un nombre puede bastar para abrir un archivo en un directorio con permiso de ejecución, pero sin permiso de lectura, siempre que los permisos del propio archivo permitan el acceso. Aun así, listar ese directorio falla.

Esta diferencia importa para la eliminación: eliminar una entrada modifica el directorio que la contiene. El bit de escritura de un archivo controla la modificación de sus bytes; no es el permiso del directorio para eliminar su nombre. Root elude la mayoría de las comprobaciones ordinarias de permisos. Las listas de control de acceso (ACL) pueden conceder derechos a usuarios y grupos identificados por su nombre, además de las tres clases básicas.

Conecta otro sistema de archivos

mkfs inicializa un sistema de archivos en una partición u otro dispositivo, incluidos su propio directorio raíz y sus metadatos. Destruye el contenido anterior del sistema de archivos del dispositivo, así que ejecútalo solo en un dispositivo destinado a la inicialización.

mount conecta esa raíz a un directorio existente llamado punto de montaje. Una unidad montada en /media/usb hace accesible allí el contenido de su raíz. El contenido anterior de /media/usb queda oculto mientras el montaje está activo; montar no lo combina con el árbol montado. Ejecutar mount sin argumentos lista los montajes actuales.

La capa de sistema de archivos virtual (VFS) del núcleo ofrece una interfaz común a ext4, XFS, FAT y los sistemas de archivos en memoria y de red. Los programas pueden llamar a open y read a través de cualquiera de ellos. El espacio de nombres combinado no combina sus tablas de inodos: números de inodo iguales en distintos sistemas de archivos pueden identificar archivos sin relación. Por tanto, los enlaces duros y los cambios de nombre atómicos permanecen dentro de su propio sistema de archivos.

Puntos clave

  • stat y fstat describen metadatos; ctime registra cambios de estado.
  • Los dígitos de permisos suman lectura = 4, escritura = 2 y ejecución = 1 para cada clase de usuario.
  • El permiso de ejecución de un directorio permite recorrer rutas; el de lectura permite listar su contenido.
  • El montaje conecta la raíz de un sistema de archivos y oculta el contenido anterior del punto de montaje.
  • El VFS comparte una interfaz entre tipos de sistemas de archivos, no una tabla global de inodos.
  • El tamaño lógico de un archivo y el espacio asignado pueden diferir.
2

Explica cómo un sistema de archivos sencillo almacena y localiza los datos

Una ruta legible oculta una secuencia de búsquedas, asignaciones y accesos a bloques. Construye una organización pequeña de disco, calcula la dirección de un inodo y relaciona desplazamientos en bytes con ubicaciones mediante punteros directos, bloques indirectos o extensiones. Después sigue la entrada/salida de las llamadas habituales. Indicar explícitamente el contenido de la caché permite explicar por qué el mismo programa puede provocar muchas operaciones de dispositivo en una ejecución y muy pocas en la siguiente.

2.1 Organiza un disco en bloques, mapas de bits, inodos y directorios

Un sistema de archivos debe recordar tanto dónde están los bytes como qué espacio está disponible. Una organización sencilla de estilo Unix hace visibles estas tareas al separar los registros de asignación, los inodos y el contenido.

Divide la partición en regiones

Un bloque es la unidad básica de asignación del sistema de archivos. Un bloque de 4 KiB contiene 4096 bytes, u ocho sectores tradicionales de 512 bytes. Los tamaños binarios usan KiB, MiB y GiB; las tasas de transferencia como MB/s usan millones decimales de bytes por segundo.

El diseño didáctico vsfs, el sistema de archivos muy sencillo, contiene estas estructuras:

EstructuraInformación almacenada
SuperbloqueTamaño del sistema de archivos, ubicación de las regiones, número de inodos y número mágico de identificación
Mapa de bits de inodosUn bit de asignación por inodo
Mapa de bits de datosUn bit de asignación por bloque de datos
Tabla de inodosMetadatos y punteros a datos de cada posición de inodo
Región de datosContenido de archivos normales y directorios

Un bit de mapa de valor 1 significa asignado; 0 significa libre. El superbloque indica al sistema operativo cómo interpretar el resto de la partición al montarla. Los dos mapas de bits describen recursos distintos: un archivo puede tener un inodo asignado antes de tener bloques de datos.

Localiza un inodo por su número

Toma una partición de 64 bloques de 4 KiB. Coloca el superbloque en el bloque 0, el mapa de bits de inodos en el 1, el mapa de bits de datos en el 2 y la tabla de inodos en los bloques del 3 al 7. Los datos ocupan los bloques del 8 al 63. Cinco bloques de la tabla de inodos con inodos de 256 bytes contienen 80 inodos, porque cada bloque contiene 16. Hay 56 bloques de datos. Un mapa de bits de 4 KiB puede describir 32 768 objetos, por lo que gran parte de cada mapa queda sin usar en esta pequeña organización.

Numerando las posiciones de inodo desde cero, el inodo 37 comienza 37 × 256 = 9472 bytes después del inicio de la tabla. La tabla empieza en el byte 12 288, lo que da una dirección absoluta de byte de 21 760. Dividir entre 4096 da el bloque de disco 5 con resto 1280. Dividir entre 512 da el sector 42 con resto 256. Lee el bloque o sector que lo contiene y selecciona en él los bytes del inodo.

El método general es: inicio de la tabla en bytes más el número de inodo multiplicado por el tamaño del inodo. Mantén separada la dirección inicial de la tabla del desplazamiento del inodo dentro de ella. Omitir esa dirección base lleva a localizar un bloque de disco equivocado.

Separa nombres, metadatos y contenido

Un inodo, o nodo índice, registra el tipo, los permisos, la propiedad, el tamaño, las marcas de tiempo, el número de enlaces, los bloques asignados y las ubicaciones de los datos. No contiene el nombre del archivo. El nombre pertenece a una entrada de directorio, lo que permite que varios nombres compartan un inodo.

Un directorio tiene un inodo de tipo directorio y bloques de datos con entradas. Una entrada sencilla almacena un número de inodo, la longitud del registro, la longitud del nombre y el nombre. La longitud del registro permite saltar la entrada completa durante el recorrido, incluido el espacio reutilizable que queda al eliminar. Los directorios grandes se benefician de los índices: XFS usa árboles B y ext4 usa índices de árbol con hash.

Crear un archivo requiere encontrar y activar un bit libre en el mapa de bits de inodos. Asignar datos modifica de forma similar el mapa de bits de datos. Un asignador puede reservar una secuencia de bloques para que el archivo pueda crecer de forma contigua. El mapa de bits indica si un bloque está libre; el inodo indica a qué archivo pertenece. Estas estructuras deben concordar.

Puntos clave

  • El superbloque describe la organización; los mapas de bits registran la asignación.
  • Un inodo contiene metadatos y ubicaciones de datos, mientras que los directorios contienen nombres.
  • Calcula la dirección de un inodo a partir de la base de la tabla, el número de inodo y el tamaño del inodo.
  • La asignación de inodos y la de datos usan mapas de bits separados.

2.2 Localiza los datos de un archivo mediante punteros, bloques indirectos y extensiones

Un programa ve desplazamientos de bytes consecutivos, pero los bloques de datos correspondientes pueden estar dispersos por el disco. El sistema de archivos necesita una correspondencia entre cada bloque lógico del archivo y su ubicación física.

Sigue los punteros directos e indirectos

Un puntero directo de un inodo indica un bloque de datos. Con bloques de 4 KiB, el desplazamiento de byte 10 000 está en el bloque lógico 2, porque dos bloques completos usan 8192 bytes. El desplazamiento dentro de ese bloque es 1808. Los bloques lógicos empiezan en 0, así que el bloque 2 usa el tercer puntero directo.

Un puntero indirecto indica un bloque que contiene direcciones de bloques de datos. Un bloque de 4096 bytes con direcciones de 4 bytes contiene 1024 punteros. Un puntero doblemente indirecto indica un bloque cuyos punteros llevan a 1024 bloques indirectos. La indirección triple añade otro nivel. Este índice multinivel está desequilibrado a propósito: los archivos pequeños usan punteros directos sin lecturas adicionales de bloques de punteros, mientras que los archivos grandes asumen el coste de niveles adicionales.

Para un inodo con 12 punteros directos y un puntero de cada nivel de indirección:

Nivel más alto utilizadoCapacidad de datos con bloques de 4 KiB
Solo directos12 bloques = 48 KiB
Indirecto simple12 + 1024 bloques = 4144 KiB
Indirecto doble12 + 1024 + 1024² bloques = 4 299 210 752 bytes
Indirecto tripleAñade 1024³ bloques = otros 4 TiB

Estas son las capacidades de esta organización de punteros. Los bloques de punteros también ocupan almacenamiento, pero sus bytes no son contenido del archivo.

Cuenta los bloques de punteros de un archivo

Un archivo de 5 MiB ocupa 1280 bloques de datos de 4 KiB cada uno. Asigna los primeros 12 a punteros directos. Asigna los siguientes 1024 al bloque indirecto simple. Quedan 244 bloques de datos.

Esos 244 necesitan una raíz doblemente indirecta y un bloque indirecto por debajo. En total, el archivo necesita tres bloques de punteros: el bloque indirecto simple, la raíz doblemente indirecta y su único bloque hijo. Contar solo la raíz doblemente indirecta deja fuera el bloque hijo que realmente contiene las direcciones de datos. Contar los 1024 posibles bloques hijos desperdicia espacio: solo se asigna el bloque hijo necesario.

Compara extensiones y cadenas

Una extensión registra un bloque inicial de disco y la longitud de una secuencia. Una secuencia contigua de 1000 bloques puede usar una extensión en lugar de 1000 punteros separados. Ext4, XFS y NTFS usan extensiones. Ext4 puede contener hasta cuatro extensiones en su inodo y usa un árbol para las adicionales. La fragmentación divide las secuencias y aumenta el número de registros de extensión necesarios.

La asignación enlazada sigue una cadena de bloques. La tabla de asignación de archivos (FAT) almacena los enlaces al siguiente bloque en una tabla separada, normalmente en caché en memoria. Una entrada de directorio identifica el primer bloque y llegar a un bloque situado más adelante requiere seguir los enlaces anteriores. FAT no usa inodos de Unix y no admite dos enlaces duros a un mismo archivo.

CorrespondenciaPrincipal ventajaPrincipal coste
Punteros directos e indirectosAcceso directo a archivos pequeños; indexación escalableBloques de punteros adicionales para archivos grandes
ExtensionesDescripciones compactas de secuencias contiguasMuchos registros cuando hay fragmentación
Cadenas FATAsignación enlazada sencilla con enlaces en cachéRecorrido de la cadena para acceder cerca del final

Los desplazamientos consecutivos nunca demuestran la contigüidad física. El asignador elige las ubicaciones y la correspondencia registra esas decisiones.

Puntos clave

  • Divide un desplazamiento en bytes entre el tamaño de bloque para encontrar su bloque lógico, numerado desde cero.
  • Un bloque indirecto contiene direcciones de bloques; cada nivel adicional multiplica el alcance.
  • Cuenta los bloques de punteros asignados por separado de los bloques de datos.
  • Las extensiones describen secuencias contiguas de forma compacta.
  • FAT sigue enlaces al siguiente bloque en lugar de usar un índice de inodo de Unix.
  • La adyacencia lógica no garantiza la adyacencia física.

2.3 Sigue la entrada/salida de disco de las operaciones con archivos y el efecto de la caché

Una llamada al sistema puede requerir varias operaciones de disco o ninguna. Para seguir el trabajo, recorre las estructuras que el sistema de archivos debe consultar e indica cuáles están ya en caché.

Recorre una ruta antes de leer el contenido

En el modelo sencillo sin caché, abrir /docs/plan.txt lee cinco bloques:

  1. El inodo de la raíz, cuyo número es conocido.
  2. Los datos del directorio raíz, para encontrar docs.
  3. El inodo de docs.
  4. Los datos del directorio docs, para encontrar plan.txt.
  5. El inodo del archivo.

Cada directorio cabe en un bloque y ningún bloque necesario está inicialmente en memoria. El sistema de archivos comprueba los permisos y crea una entrada de archivo abierto. La apertura ha encontrado los metadatos del archivo; todavía no ha leído su contenido. En ext2 y ext4 se usa el número 2 para el inodo de la raíz.

En un modelo de lectura deliberadamente sin caché, cada lectura de bloque lee después el inodo del archivo, lee los datos y escribe la hora de acceso del inodo. Dos bloques añaden seis operaciones de entrada/salida, lo que da once incluida la apertura. En este modelo, cerrar no requiere entrada/salida de disco. Estas cuentas describen las reglas explícitas de relectura y marcas de tiempo del modelo; una caché real las modifica.

Ten en cuenta la asignación durante la creación

Crear /docs/log.txt requiere algo más que encontrar un inodo existente. En el mismo modelo sencillo, realiza cuatro lecturas para los inodos de la raíz y de docs y los datos de sus directorios. Leer y escribir el mapa de bits de inodos añade dos operaciones de entrada/salida. Actualizar los datos de docs añade una escritura. Leer y escribir el nuevo inodo añade dos, y actualizar el inodo de docs añade una. Total: diez.

Cada bloque de datos recién asignado añade cinco operaciones de entrada/salida: leer y escribir el mapa de bits de datos, leer y escribir el inodo del archivo y escribir el bloque de datos. Por tanto, dos bloques dan veinte operaciones de entrada/salida incluida la creación. Este seguimiento cuenta las estructuras de datos sencillas antes de añadir el tráfico del registro en diario o el comportamiento de una caché real.

Llevar un registro ayuda: anota la estructura, si se lee o se escribe y por qué. Una escritura de datos también necesita un registro de asignación y una actualización de puntero. Un cambio de directorio también modifica los metadatos de ese directorio.

Deja que la caché cambie el seguimiento

Un acierto de caché usa un bloque que ya está en memoria. Linux usa una caché de páginas unificada compartida con la memoria virtual, no una caché de archivos de tamaño fijo permanentemente separada. Una apertura repetida puede reutilizar los bloques de directorios e inodos del recorrido anterior. Leer contenido en caché no necesita ninguna lectura del dispositivo. La política habitual relatime de Linux también evita una escritura de atime en cada lectura.

El almacenamiento temporal de escrituras en búfer retrasa el envío de bloques modificados al disco. La creación de dos archivos con poca diferencia de tiempo puede actualizar el mismo mapa de bits de inodos en memoria y escribirlo después una sola vez. El sistema de archivos puede reordenar el trabajo para mejorar la tasa de procesamiento. Un archivo temporal de corta vida puede crearse y eliminarse antes de que su contenido llegue al almacenamiento.

El uso de búferes mejora el rendimiento, pero deja un intervalo sin garantía de durabilidad. fsync cierra ese intervalo para un archivo al esperar las escrituras necesarias. O_DIRECT de Linux permite que los programas adecuados omitan la caché de páginas cuando gestionan sus propios búferes; omitir una caché no es por sí mismo la misma operación que sincronizar el almacenamiento duradero.

Puntos clave

  • Sigue el recorrido de la ruta por separado de la lectura de los datos del archivo.
  • El número de operaciones de entrada/salida depende del contenido de la caché y de la política de marcas de tiempo.
  • Crear un archivo actualiza registros de asignación, entradas de directorio e inodos.
  • El almacenamiento temporal de escrituras en búfer combina actualizaciones y mejora la planificación, pero retrasa la durabilidad.
  • Una llamada al sistema no se corresponde con un número fijo de operaciones de dispositivo.
3

Explica cómo Fast File System aprovecha la localidad para mejorar la velocidad

Una interfaz rápida necesita una organización adaptada al dispositivo de almacenamiento. Los primeros sistemas de archivos Unix desperdiciaban ancho de banda de los discos duros en transferencias pequeñas y metadatos distantes. FFS agrupa objetos relacionados y equilibra esa localidad con las necesidades de los archivos grandes. Sus reglas de colocación y el cálculo del tamaño de los fragmentos muestran cómo un diseño puede mejorar el rendimiento mientras los programas siguen usando operaciones conocidas.

3.1 Explica por qué los primeros sistemas de archivos Unix eran lentos y cómo lo solucionan los grupos

Un disco duro puede transferir rápidamente una larga secuencia de bytes una vez que su cabezal llega a ellos. Las solicitudes pequeñas y dispersas desperdician tiempo en búsquedas y esperas de rotación. Fast File System cambia la colocación para que las operaciones habituales con archivos utilicen más ancho de banda de transferencia del disco.

Diagnostica la antigua organización de Unix

La primera organización de Unix colocaba todos los inodos cerca del inicio y todos los datos de archivos después. Por ello, leer un archivo podía requerir una búsqueda larga desde los metadatos hasta el contenido. Una lista de bloques libres dispersaba gradualmente las asignaciones a medida que se creaban y eliminaban archivos. Incluso un archivo secuencial podía convertirse en muchos accesos a disco sin relación entre sí.

Los bloques pequeños de 512 bytes empeoraban la situación. Cada demora de posicionamiento solo permitía una transferencia corta antes de que la siguiente solicitud necesitara otra búsqueda o espera de rotación. Las mediciones históricas mostraron que el diseño antiguo llegaba a ofrecer tan solo el 2 % del ancho de banda del disco. Esa cifra describe el primer diseño medido, no un límite fijo de las interfaces de Unix.

El Fast File System (FFS), desarrollado en Berkeley a principios de la década de 1980, mantuvo llamadas conocidas como open, read y write mientras cambiaba la organización y la política de asignación. Los bloques mayores, normalmente de 4 KiB, aumentaban los bytes transferidos por solicitud. Mantener próximos los metadatos y el contenido reducía la distancia entre solicitudes relacionadas.

Construye grupos con sus propios recursos

Un cilindro es el conjunto de pistas situadas al mismo radio en las superficies de los platos de un disco. FFS forma grupos de cilindros con cilindros vecinos. Un archivo puede tener su inodo y sus datos en el mismo grupo, lo que mantiene corta la búsqueda desde los metadatos hasta los datos.

Cada grupo contiene una copia del superbloque, sus propios mapas de bits de asignación de inodos y datos, parte de la tabla de inodos y bloques de datos. El grupo se parece a un pequeño sistema de archivos, pero todos los grupos pertenecen a un mismo sistema de archivos. Una copia del superbloque también ayuda a la recuperación si una de ellas resulta dañada. Ext4 mantiene copias en determinados grupos en lugar de en todos.

Las unidades modernas ocultan su geometría física. Por ello, ext2, ext3 y ext4 usan grupos de bloques, secuencias de direcciones de bloques lógicos consecutivas, para perseguir el mismo objetivo de localidad sin depender de cilindros exactos.

Sigue la creación de un archivo pequeño

Crear /docs/a.txt necesita un inodo libre, un bloque de datos, cambios en los mapas de asignación y una nueva entrada de directorio. FFS intenta colocar el archivo en el grupo de su directorio padre. El inodo nuevo, los datos del archivo, los mapas de bits y las actualizaciones del directorio pueden quedar entonces próximos.

La operación sigue necesitando varias actualizaciones distintas. La agrupación ahorra tiempo de posicionamiento; no reúne todos los metadatos y datos en un solo bloque. Una organización que tiene en cuenta el disco reduce el coste de llegar a esas estructuras sin cambiar las operaciones con archivos del programa.

Característica del almacenamientoConsecuencia para la colocación
Búsqueda y rotación del disco duroLos bloques próximos evitan repetidas demoras largas de posicionamiento
Alta tasa de transferencia secuencialLas solicitudes mayores mueven más bytes por cada demora
SSD sin búsqueda ni rotaciónLa distancia importa mucho menos, pero el tamaño de las solicitudes y el comportamiento de escritura siguen importando

Puntos clave

  • Las búsquedas largas, la fragmentación y los bloques pequeños limitaban la tasa de procesamiento del disco en los primeros sistemas Unix.
  • Los grupos de FFS colocan próximos los inodos, los mapas de asignación y los datos.
  • Los grupos de bloques modernos conservan la localidad sin necesitar la geometría física del disco.
  • FFS mejora la colocación mientras conserva la interfaz de archivos existente.

3.2 Aplica las reglas de colocación de FFS y dimensiona los fragmentos de archivos grandes

FFS usa los nombres como indicios de qué archivos accederá conjuntamente un programa. También limita cuánto espacio puede ocupar un archivo grande en un grupo, equilibrando la localidad con el espacio para futuras asignaciones.

Coloca directorios y archivos

Un directorio nuevo va a un grupo con relativamente pocos directorios y muchos inodos libres. Esto distribuye los distintos directorios y deja espacio para sus futuros archivos. El inodo de un archivo normal va en el grupo de su directorio padre y sus datos van cerca de su inodo.

Para /a/b, /a/c y /a/d, los tres archivos se colocan cerca del directorio /a. Un archivo /b/f sigue a su propio directorio padre /b, normalmente a otro grupo. Esto aprovecha la localidad en el espacio de nombres: un compilador que trabaja en un proyecto suele abrir varios archivos del mismo directorio. La relación de directorio predice patrones de acceso; no es una garantía para todos los programas.

Haz una excepción para un archivo grande

Un archivo grande podría consumir los bloques libres de su grupo y obligar a colocar todos los vecinos posteriores en otro lugar. FFS mantiene la primera parte, accesible mediante 12 punteros directos, en el grupo del inodo. Con bloques de 4 KiB son 48 KiB. Los fragmentos posteriores, cada uno accesible mediante un bloque indirecto que contiene 1024 punteros, abarcan 4 MiB de datos y van a otros grupos poco utilizados.

Esto sacrifica parte de la localidad dentro del archivo grande para conservar la localidad de los demás archivos del directorio. El archivo grande asume una demora de posicionamiento entre fragmentos, por lo que cada fragmento debe ser lo bastante grande para que ese coste merezca la pena.

Deduce el tamaño del fragmento

Sea T el tiempo de posicionamiento en segundos y R la tasa de transferencia en bytes por segundo. Un fragmento C tarda C/R segundos en transferirse. La fracción del tiempo total dedicada a la transferencia es:

F=C/RT+C/R.

Al despejar se obtiene:

C=F1−FRT.

A 100 MB/s con 10 ms de posicionamiento, R por T es 1 MB. Un fragmento de 1 MB necesita 10 ms de transferencia más 10 ms de posicionamiento, lo que da el 50 % del ancho de banda máximo. Para el 90 %, multiplica 1 MB por 0,9/0,1 y obtén 9 MB. Para el 99 %, el multiplicador es 99, lo que da 99 MB. Convierte milisegundos a segundos antes de multiplicar por MB/s. El denominador incluye tanto el tiempo de transferencia como el de posicionamiento; dividir solo entre el tiempo de transferencia ocultaría la sobrecarga.

Las tasas de transferencia han mejorado más rápido que las demoras de posicionamiento, por lo que alcanzar la misma fracción del máximo requiere fragmentos mayores a medida que aumenta la diferencia.

Aloja archivos pequeños y conserva la compatibilidad

FFS también usaba subbloques de 512 bytes para que los archivos pequeños no desperdiciaran un bloque completo de 4 KiB. Los archivos que crecían se copiaban a bloques completos; la biblioteca de C almacenaba las escrituras en búfer en partes de 4 KiB para reducir los desplazamientos repetidos. La parametrización histórica dejaba separaciones de rotación entre bloques consecutivos para que el siguiente bloque solicitado no hubiera pasado ya por el cabezal. Los búferes de pista modernos hacen innecesaria esa técnica al obtener una pista internamente.

Los nombres largos, los enlaces simbólicos y rename atómico eran capacidades adicionales de FFS. La mejora de velocidad debida a la organización no exigía cambiar los programas existentes.

Puntos clave

  • FFS usa un directorio como indicio de que se accederá conjuntamente a sus archivos.
  • Los directorios se distribuyen entre grupos; sus archivos normales se mantienen próximos.
  • Los fragmentos de archivos grandes se distribuyen para dejar espacio a los archivos vecinos.
  • Incluye el tiempo de posicionamiento y el de transferencia al calcular el ancho de banda efectivo.
  • Los subbloques reducen el desperdicio de espacio de los archivos pequeños; el uso de búferes de pista sustituye el ajuste de separaciones de rotación.
  • FFS añadió capacidades además de acelerar las llamadas existentes.
4

Mantén la consistencia de un sistema de archivos ante fallos

Un fallo puede interrumpir una operación lógica con archivos entre varias escrituras físicas. Compara los estados que deja una adición sin terminar y después examina cómo un comprobador repara metadatos y cómo un diario hace que la recuperación dependa de las transacciones registradas. La ordenación de datos y la reutilización de bloques revelan por qué una confirmación válida necesita algo más que un marcador. Otros diseños de consistencia resuelven el mismo problema con costes diferentes.

4.1 Explica el problema de la consistencia ante fallos

Una adición al final de un archivo parece una sola acción para un programa. En el disco modifica varias estructuras y un fallo puede dejar solo algunas actualizadas. La consistencia ante fallos plantea cómo prevenir o reparar esos resultados parciales.

Sigue tres escrituras independientes

Añadir un bloque de 4 KiB al final de un archivo existente modifica:

  • Db, el nuevo bloque de datos que contiene los bytes añadidos.
  • I, el inodo con un tamaño mayor y un puntero a ese bloque.
  • B, el mapa de bits de datos que marca el bloque como asignado.

Si los tres llegan al almacenamiento, se obtiene la actualización consistente prevista. Si no llega ninguno, se conserva el estado antiguo consistente. El peligro está en las seis combinaciones parciales. El dispositivo puede reordenar las solicitudes, por lo que enviarlas en un orden determinado sin esperar no establece el orden en que se completan.

Clasifica cada resultado parcial
Escrituras que sobrevivenResultado
Solo DbLos nuevos bytes existen, pero ningún puntero llega a ellos; el estado antiguo del sistema de archivos sigue siendo consistente
Solo IEl inodo apunta a contenido antiguo y el mapa de bits sigue considerando libre el bloque
Solo BUn bloque asignado no tiene propietario: una fuga de espacio de almacenamiento
I y BLos metadatos concuerdan, pero la nueva región del archivo contiene datos antiguos
I y DbEl archivo apunta a datos nuevos válidos que el mapa de bits sigue considerando libres
B y DbLos nuevos bytes están asignados, pero son inaccesibles: datos perdidos y fuga de espacio

Se produce una inconsistencia cuando los metadatos no concuerdan, por ejemplo, cuando un inodo reclama un bloque cuyo bit de asignación indica que está libre. El asignador podría entonces dar ese mismo bloque a otro archivo. Una fuga de espacio de almacenamiento reserva espacio al que ningún archivo puede acceder. Los datos basura pueden ser más difíciles de detectar: I y B concuerdan perfectamente aunque Db nunca llegó.

Db por sí solo no provoca una fuga de espacio asignado, porque el mapa de bits sigue permitiendo reutilizar ese bloque. Escribir bytes en una ubicación libre no equivale a asignarla. B por sí solo sí provoca una fuga de espacio, porque la asignación sobrevivió sin un puntero propietario.

Separa estructura y significado

Un comprobador puede comparar punteros con mapas de bits. En general, no puede saber si unos bytes aparentemente válidos son los que un programa pretendía guardar. El resultado I y B demuestra este límite: un archivo estructuralmente válido puede tener contenido incorrecto.

La transición deseada es atómica para toda la actualización: recuperar el estado antiguo completo o el nuevo completo. Un modelo sencillo de almacenamiento solo proporciona escrituras atómicas para un sector, tradicionalmente de 512 bytes. Varios bloques del sistema de archivos superan esa unidad, por lo que el sistema de archivos debe construir un protocolo más sólido. Las garantías reales de escritura atómica dependen del dispositivo y de la interfaz; el protocolo del diario debe hacer que su registro de confirmación quepa en la unidad atómica admitida.

El almacenamiento en búfer aumenta el número de cambios que pueden perderse, pero no es la causa de fondo. Incluso enviar inmediatamente cada escritura deja un punto posible de fallo entre dos finalizaciones distintas. La creación, el cambio de nombre y la eliminación de archivos también modifican varias estructuras. Para comprender sus estados de fallo se empieza con el mismo ejercicio: identificar cada bloque modificado y preguntarse qué ocurre cuando solo sobrevive un subconjunto.

Puntos clave

  • Una operación lógica con archivos puede requerir varias escrituras de bloques que se completan de forma independiente.
  • Compara los datos, los punteros del inodo y los bits de asignación después de cada posible punto de fallo.
  • Los metadatos consistentes pueden seguir apuntando a contenido incorrecto de un archivo.
  • La atomicidad de varios bloques necesita un protocolo del sistema de archivos que vaya más allá de una sola escritura atómica del dispositivo.

4.2 Comprueba y repara un sistema de archivos con fsck

Un comprobador de sistemas de archivos repara las relaciones entre las estructuras almacenadas después de que se produzcan daños. Su ventaja es una visión amplia de los metadatos; sus debilidades son el coste de explorarlos y el desconocimiento del contenido previsto de los archivos.

Reconstruye el estado de la asignación

fsck examina un sistema de archivos que no se cerró correctamente antes de montarlo de forma normal. Comprueba si el tamaño y los recuentos del superbloque son razonables y puede usar una copia de respaldo si la principal está dañada.

Después examina inodos y bloques indirectos para determinar a qué bloques de datos apuntan realmente los archivos. A partir de esa información de propiedad reconstruye los mapas de bits de asignación. Si un inodo por lo demás válido apunta al bloque 74 mientras el mapa de bits indica que el 74 está libre, el mapa debe cambiar para marcarlo como asignado. Confiar solo en el mapa de bits podría permitir que una asignación posterior sobrescribiera los datos del archivo.

La discrepancia opuesta es un bit del mapa marcado como asignado sin un puntero de inodo propietario. Reconstruir el mapa puede recuperar ese espacio. La reparación establece una relación consistente; no puede reconstruir bytes arbitrarios de la aplicación que falten.

Comprueba objetos, nombres y enlaces

Todo inodo asignado necesita un tipo válido, como archivo normal, directorio o enlace simbólico. Un inodo que no se puede reparar se borra y se ajustan los registros de asignación.

Recorrer desde la raíz permite a fsck contar las referencias de directorio a cada inodo. Compara estas referencias observadas con los números de enlaces registrados y corrige los errores. Un inodo asignado al que ningún directorio llega puede trasladarse a lost+found, lo que da al contenido recuperado un nombre accesible sin conocer su ruta original.

Otras comprobaciones incluyen:

  • Propiedad duplicada: dos inodos reclaman un bloque de datos. Una reparación puede borrar uno de los inodos o dar a cada archivo una copia separada.
  • Direcciones no válidas: deben borrarse los punteros fuera del intervalo válido del sistema de archivos.
  • Estructura de directorios: . y .. deben ser válidas y ocupar las primeras entradas en la organización sencilla de directorios, las entradas deben referirse a inodos asignados y los directorios no deben tener varios padres.

Estas comprobaciones interactúan. Borrar un inodo no válido también cambia qué bloques deben estar asignados y qué entradas de directorio siguen siendo válidas. Por tanto, una reparación necesita una visión coherente de los metadatos, no solo una lista de bits individuales sospechosos.

Comprende qué demuestra un resultado sin errores

Supón que el inodo y el mapa de bits de una adición llegaron al disco, pero sus datos no. El puntero está dentro del intervalo válido, el bit de asignación está activado y la estructura de enlaces es válida. fsck no tiene ninguna discrepancia de metadatos que reparar. El archivo puede superar la comprobación mientras contiene bytes antiguos en la región recién añadida.

El tiempo de ejecución también depende principalmente del tamaño del sistema de archivos, no de la cantidad modificada antes de un fallo. Un fallo durante una actualización de tres bloques puede seguir requiriendo la exploración de todos los metadatos. En un sistema de archivos grande esto puede tardar entre minutos y horas, durante las cuales el acceso normal no está disponible.

El registro en diario reduce el trabajo habitual de recuperación tras un fallo al registrar las actualizaciones recientes. No hace que un comprobador quede obsoleto: los errores de software o los fallos de hardware pueden dañar estructuras más allá de lo que puede reparar la reaplicación del diario. fsck sigue siendo una herramienta de reparación para esos casos.

Puntos clave

  • fsck reconstruye la asignación a partir de los punteros de los inodos y corrige las relaciones entre metadatos.
  • El recorrido de directorios comprueba los números de enlaces y encuentra inodos asignados inaccesibles desde la raíz.
  • La comprobación puede reparar la propiedad duplicada y los punteros no válidos.
  • Una comprobación de metadatos sin errores no puede demostrar que los bytes de la aplicación sean correctos.
  • La exploración completa de metadatos escala con el tamaño del sistema de archivos, incluso después de una pequeña actualización interrumpida.

4.3 Protege las actualizaciones mediante el registro de datos en diario y reaplica el registro

Un diario registra una actualización antes de que el sistema de archivos sobrescriba sus ubicaciones habituales. Después de un fallo, ese registro indica a la recuperación qué cambios completos pueden rehacerse. Esto es el registro anticipado. Ext3, ext4, XFS y NTFS usan registro en diario, aunque sus formatos exactos de registro difieren.

Describe una actualización como una transacción

Para una adición al final de un archivo, el registro de datos en diario registra copias del nuevo inodo I, del mapa de bits B y del bloque de datos Db. Un registro de inicio de transacción, TxB, lleva un identificador y los destinos finales de los bloques. Un registro de fin de transacción, TxE, lleva el identificador correspondiente y marca la confirmación.

Registrar imágenes completas de los bloques de sustitución es registro físico. Registrar en su lugar una descripción de la operación es registro lógico. Rehacer físicamente tiene una propiedad útil: volver a escribir la misma imagen en la misma dirección tiene el mismo efecto. Por tanto, la recuperación puede repetir un punto de control que se completó parcialmente antes del fallo.

Sitúa la confirmación después del contenido

El protocolo básico tiene cuatro etapas:

  1. Escritura en el diario: escribir TxB, I, B y Db en el diario y esperar a que la escritura duradera se complete.
  2. Confirmación: escribir TxE y esperar. La transacción queda confirmada.
  3. Punto de control: copiar I, B y Db del diario a sus ubicaciones finales.
  4. Liberación: liberar el espacio del diario de esa transacción para reutilizarlo más adelante.

TxE no debe hacerse duradero antes que su contenido. Si se enviaran los cinco bloques sin una garantía de orden, un dispositivo podría completar TxB y TxE y dejar Db sin escribir. La recuperación confundiría una transacción incompleta con una válida. En el modelo básico, TxE cabe en una escritura atómica de sector, por lo que está presente como registro de confirmación completo o está ausente.

Las cachés de escritura del dispositivo también deben respetar el límite de durabilidad. Los vaciados de caché o las escrituras forzadas impiden que una caché volátil del dispositivo haga creer al protocolo que el contenido está a salvo cuando un corte de energía aún podría borrarlo.

Recupérate de dos puntos de fallo

Un fallo después del contenido, pero antes de TxE, deja una transacción sin confirmar. La recuperación la ignora y conserva el estado antiguo del archivo.

Un fallo después de TxE, pero durante el establecimiento del punto de control, deja una transacción confirmada. La recuperación escribe todas sus imágenes en sus ubicaciones finales en orden. Algunas escrituras pueden repetir trabajo ya realizado, lo que no causa problemas para estas imágenes de bloques. Esto es la recuperación mediante rehacer. El espacio del diario no puede reutilizarse hasta que las imágenes confirmadas hayan llegado a sus ubicaciones finales.

El diario es un registro circular. Su superbloque registra el intervalo activo, lo que permite reutilizar el espacio completado. Agrupar varias actualizaciones en una transacción puede registrar una sola vez un bloque de directorio o un mapa de bits compartido. El intervalo de confirmación predeterminado de ext4 es de 5 segundos, por lo que la confirmación no es automáticamente inmediata después de cada escritura de una aplicación.

Distingue las sumas de comprobación de la durabilidad

Una suma de comprobación de transacción puede revelar bloques de contenido ausentes o escritos de forma incompleta incluso cuando hay un registro de confirmación. Un protocolo basado en sumas de comprobación puede enviar juntas las escrituras del diario y aceptar solo las transacciones cuya validación tiene éxito. Las sumas de comprobación detectan registros incompletos; los vaciados de caché establecen si los bytes cuya escritura se ha reconocido sobreviven realmente.

Una escritura de una aplicación que permanece en búfer y sin confirmar aún puede desaparecer. Un programa que requiere una finalización duradera usa fsync y comprueba que termine correctamente.

Puntos clave

  • El registro anticipado anota las actualizaciones completas antes de cambiar sus ubicaciones finales.
  • En el protocolo básico, la durabilidad del contenido precede al registro de confirmación.
  • La recuperación rehace las transacciones confirmadas e ignora las que no se confirmaron.
  • Rehacer imágenes de bloques idénticas es seguro después de un punto de control parcial.
  • El establecimiento del punto de control debe terminar antes de reutilizar el espacio del diario.
  • La agrupación reduce el tráfico de metadatos, mientras que fsync establece la durabilidad necesaria.

4.4 Reduce el coste del registro en diario y compara otros enfoques

El registro de datos en diario escribe el contenido de los archivos en el diario y después en sus ubicaciones finales. Registrar solo los metadatos reduce ese tráfico, pero el orden entre los datos y los metadatos sigue determinando lo que puede mostrar la recuperación.

Mantén los datos por delante de los punteros confirmados

En el registro ordenado de metadatos en diario, Db va directamente a su ubicación final. TxB, I y B van al diario. Estos dos conjuntos de escrituras pueden ejecutarse en paralelo, pero ambos deben terminar antes de que TxE confirme los metadatos. Después de la confirmación, I y B pueden escribirse en sus ubicaciones finales y puede liberarse el espacio del diario.

La dependencia es la clave: el bloque que indica un puntero debe estar listo antes de que ese puntero pueda recuperarse. Si I se confirma primero, la recuperación puede instalar un puntero válido a bytes dejados por un usuario anterior del bloque. Los metadatos concordarían sin contener los datos previstos.

Modo de ext4Qué entra en el diarioRegla de datos antes de la confirmación
data=journalDatos y metadatosLos datos forman parte de la transacción registrada
data=orderedMetadatosLos datos referenciados llegan a su ubicación final antes de la confirmación
data=writebackMetadatosNo hay tal garantía de ordenación de los datos

El modo ordenado es el predeterminado. El registro de metadatos en diario por sí solo no implica el modo ordenado: el modo de escritura diferida puede recuperar archivos estructuralmente correctos con contenido desactualizado. El modo de registro de datos ilustra el protocolo completo, pero supone una segunda escritura de los datos del archivo.

Evita que la reaplicación dañe un bloque reutilizado

El contenido de los directorios cuenta como metadatos. Supón que se registra un bloque de directorio en la dirección 1000, después se elimina el directorio y la misma dirección pasa a contener datos de un archivo normal. Esos nuevos datos de usuario no se registran en el modo de solo metadatos. Reaplicar la imagen antigua del directorio después de un fallo sobrescribiría los bytes del nuevo archivo.

Un registro de revocación confirmado indica a la recuperación que omita las copias registradas de ese bloque en transacciones anteriores a la revocación o en la propia transacción que la contiene. No prohíbe todos los usos futuros de la dirección. Si una transacción posterior vuelve a registrar ese bloque, la imagen posterior aún puede reaplicarse. Este límite temporal distingue la revocación de marcar permanentemente un bloque como inutilizable.

Compara alternativas

Las actualizaciones suaves imponen dependencias entre escrituras ordinarias sin un diario. Escribir datos inicializados antes de un puntero evita que se pueda acceder a datos basura, aunque las operaciones interrumpidas pueden provocar fugas de espacio que una comprobación posterior en segundo plano recupera. FFS de FreeBSD usa este enfoque. Seguir todas las dependencias dificulta la implementación.

La copia en escritura (COW) escribe los bloques modificados en ubicaciones sin usar y cambia atómicamente un puntero raíz para publicar el nuevo árbol. El árbol antiguo permanece disponible hasta el cambio. ZFS, Btrfs y WAFL usan diseños relacionados; conservar los bloques antiguos también permite crear instantáneas.

Los diseños de investigación basados en punteros inversos registran la propiedad desde los datos hacia los inodos para que las actualizaciones incompletas dejen discrepancias detectables. La consistencia optimista ante fallos reduce las esperas y usa sumas de comprobación y otras comprobaciones para detectar trabajo incompleto. Cada enfoque equilibra el tráfico de escritura, las garantías de recuperación y la complejidad de implementación. El registro ordenado de metadatos en diario mantiene breve la recuperación y escribe una sola vez los datos de archivos ordinarios.

Puntos clave

  • El registro ordenado en diario envía los datos a sus ubicaciones finales antes de confirmar los punteros de sus metadatos.
  • El registro de solo metadatos en diario y el registro ordenado en diario no son sinónimos.
  • Los registros de revocación impiden que imágenes registradas obsoletas sobrescriban bloques reutilizados.
  • Las actualizaciones suaves ordenan las dependencias; la copia en escritura publica un árbol nuevo.
  • Reducir el tráfico de escritura puede requerir una ordenación o validación más cuidadosa.
5

Explica cómo un sistema de archivos estructurado como registro escribe y recupera espacio

Las escrituras secuenciales aprovechan bien un disco, pero mover cada bloque actualizado crea nuevos problemas de búsqueda y gestión del espacio. Sigue LFS desde los segmentos almacenados en búfer hasta el mapa de inodos y la región de puntos de control, y después observa cómo el limpiador encuentra los bloques vigentes y restablece segmentos libres. La recuperación debe recuperar la correspondencia válida más reciente sin confundir un punto de control interrumpido con uno completo.

5.1 Escribe secuencialmente en segmentos y localiza inodos mediante el mapa de inodos

Un sistema de archivos estructurado como registro convierte pequeñas actualizaciones dispersas en grandes escrituras secuenciales. Esto ayuda a un disco cuya tasa de transferencia es alta, pero cuyas demoras de búsqueda y rotación siguen siendo costosas.

Reúne las actualizaciones en un segmento

LFS de Berkeley, desarrollado por Rosenblum y Ousterhout y publicado en 1991, partió de la evolución de las cargas de trabajo. Las memorias más grandes atendían más lecturas desde la caché, por lo que las escrituras representaban una parte mayor del tráfico de disco. El ancho de banda secuencial crecía más rápido que la velocidad de posicionamiento. FFS seguía necesitando varias escrituras cortas de metadatos y datos para crear un archivo pequeño, y las escrituras pequeñas también funcionaban mal con RAID con paridad.

LFS almacena juntos en búfer en memoria los datos modificados, los inodos y la información de correspondencia. Los escribe en una región del disco sin usar como un gran segmento. Actualizar un bloque crea una nueva versión en una dirección nueva; la versión anterior permanece físicamente hasta que la limpieza recupera su segmento.

Los segmentos amortizan el posicionamiento igual que los fragmentos grandes de FFS. Con una tasa R, un tiempo de posicionamiento T y una fracción deseada del tiempo de transferencia F, el tamaño almacenado en búfer es:

D=F1−FRT.

A 200 MB/s y 5 ms, el 95 % requiere 19 MB. La transferencia tarda 95 ms, el posicionamiento tarda 5 ms y la tasa efectiva es 19 MB por 0,1 s = 190 MB/s. Una fracción objetivo alta puede requerir un segmento mayor que los habituales, de cientos de kilobytes a varios megabytes. El tamaño necesario depende del dispositivo y del objetivo, no de la palabra «segmento».

Encuentra un inodo que sigue moviéndose

La fórmula de la tabla fija de inodos ya no funciona: cada actualización de un inodo lo escribe en una dirección nueva. LFS añade un mapa de inodos, o imap, que relaciona cada número de inodo con su dirección de disco más reciente. Las partes actualizadas del imap se escriben en el registro junto a los inodos que describen.

Una región de puntos de control (CR) fija registra dónde están las partes más recientes del imap. Se actualiza periódicamente, por ejemplo cada 30 segundos, para que la escritura ocasional en una ubicación fija no domine el tráfico.

La cadena de búsqueda es:

  1. Leer la CR al montar para encontrar las partes actuales del imap.
  2. Cargar el imap en memoria.
  3. Buscar en el imap el número de inodo solicitado.
  4. Leer ese inodo más reciente y seguir sus punteros a datos.

Una vez que el imap está en caché, las lecturas ordinarias de archivos usan prácticamente la misma ruta de inodo a datos que en FFS. La correspondencia adicional hace viable el movimiento sin cambiar la identidad estable del archivo.

Mantén estables las entradas de directorio

Un directorio almacena nombres y números de inodo. Si se actualiza /docs/report.txt, su inodo se mueve, pero conserva su número. El imap cambia; la entrada de directorio no necesita cambiar solo por ese movimiento.

Sin esta indirección, un directorio que contuviera direcciones físicas de inodos tendría que reescribirse cada vez que se moviera un inodo hijo. Su propio inodo se movería entonces, lo que obligaría a cambiar su directorio padre, y así sucesivamente hacia la raíz. El imap interrumpe este problema de actualización recursiva.

LFS hace secuenciales las escrituras, pero no todas las lecturas. Los bloques sin cambios de un archivo pueden permanecer en segmentos antiguos mientras las versiones posteriores de otros bloques se mueven a otros lugares. Leer ese archivo aún puede requerir búsquedas entre segmentos; las grandes cachés de memoria forman parte de la motivación del diseño.

Puntos clave

  • LFS escribe juntos los datos y metadatos almacenados en búfer en espacio sin usar, en grandes segmentos.
  • El imap relaciona números de inodo estables con direcciones de inodo que cambian.
  • La región fija de puntos de control localiza las partes más recientes del imap.
  • Las entradas de directorio conservan los números de inodo, lo que evita reescrituras recursivas de los directorios padre.
  • El tamaño del segmento debe amortizar el posicionamiento; las lecturas aún pueden estar dispersas.

5.2 Recupera espacio con el limpiador de segmentos y restaura el sistema tras un fallo

Escribir nuevas versiones en ubicaciones sin usar mantiene físicamente presentes los bytes antiguos. LFS necesita distinguir las versiones antiguas inaccesibles de los bloques vigentes, recuperar grandes regiones libres y recuperar una correspondencia utilizable después de un fallo.

Limpia segmentos completos

El limpiador de segmentos lee segmentos ocupados parcialmente, copia sus bloques vigentes en un número menor de segmentos nuevos y libera los segmentos antiguos. Si cuatro segmentos del mismo tamaño tienen cada uno una cuarta parte de datos vigentes, sus datos vigentes combinados llenan un segmento nuevo. Liberar los cuatro segmentos antiguos después de la copia gana tres segmentos de capacidad utilizable.

Limpiar segmentos completos conserva grandes regiones contiguas para futuras escrituras secuenciales. La copia tiene un coste: los bloques vigentes se leen y escriben de nuevo aunque ninguna aplicación los haya cambiado. Un disco casi lleno con segmentos mayoritariamente vigentes puede requerir mucha copia para recuperar poco espacio libre.

Determina si un bloque está vigente

Un resumen de segmento identifica el inodo propietario de cada bloque y su desplazamiento de bloque lógico dentro del archivo. Para comprobar un bloque en la dirección A, usa el imap para encontrar el inodo más reciente de ese propietario. Sigue su puntero para el bloque lógico registrado. Si el puntero sigue siendo igual a A, esta es la versión vigente. Si apunta a otro lugar, A está obsoleto.

Por ejemplo, un resumen asocia la dirección 600 con el inodo 14, bloque lógico 2. El inodo 14 actual apunta para el bloque lógico 2 a la dirección 920. El bloque 600 ya no está vigente aunque sus bytes parezcan datos válidos. La vigencia depende de la accesibilidad actual, no de cuán recientemente se escribió un bloque ni de si su contenido parece útil.

Los números de versión aceleran el descarte. Eliminar un archivo o truncarlo a cero incrementa su versión en el imap. Un bloque de segmento con una versión anterior puede clasificarse como no vigente sin leer el inodo.

La política de limpieza también tiene en cuenta los cambios previstos. Los segmentos de actualización frecuente contienen bloques que se sobrescriben a menudo; esperar puede hacer que más bloques dejen de estar vigentes sin copiarlos. Los segmentos de actualización poco frecuente cambian poco, por lo que la política original de LFS los limpia antes. La política debe equilibrar la fracción vigente, la antigüedad y el espacio disponible; la frecuencia de actualización de un segmento por sí sola no mide el coste inmediato de copia.

Recupera la correspondencia y el trabajo reciente

LFS mantiene dos regiones de puntos de control en extremos opuestos del disco y alterna las actualizaciones. Cada actualización escribe una cabecera con marca de tiempo, el cuerpo y una marca de tiempo final coincidente. La recuperación elige la región más reciente cuyo principio y final coinciden. Una actualización más reciente interrumpida no sustituye a un punto de control completo anterior.

El punto de control puede no incluir los segmentos completados más recientes. Por ello, la recuperación avanza desde el final del registro que tiene anotado, busca actualizaciones válidas posteriores y las aplica para reconstruir la correspondencia actual. Los datos que nunca formaron una actualización válida recuperable no pueden recrearse desde la memoria después de un corte de energía.

Los sistemas relacionados con copia en escritura conservan bloques antiguos para permitir instantáneas; ZFS, Btrfs y WAFL comparten esa idea general. Los controladores de unidades SSD suelen usar capas de traducción de memoria flash estructuradas como registro, mientras que F2FS aplica ideas de estructura como registro a nivel de sistema de archivos para almacenamiento flash. Cada uno sigue necesitando una forma de recuperar el espacio que dejan las versiones obsoletas.

Puntos clave

  • El limpiador copia bloques vigentes en un número menor de segmentos y libera los segmentos antiguos.
  • La vigencia depende de la correspondencia del inodo más reciente, no del contenido aparente de un bloque.
  • Las discrepancias de versión pueden identificar rápidamente bloques no vigentes.
  • Esperar para limpiar segmentos de actualización frecuente puede evitar copiar bloques que pronto quedarán obsoletos.
  • La recuperación selecciona un punto de control completo y avanza por las actualizaciones posteriores válidas.
  • La limpieza añade operaciones de entrada/salida y puede resultar costosa cuando queda poco espacio libre.
6

Compara cómo los sistemas de archivos distribuidos comparten archivos a través de una red

Compartir archivos entre máquinas introduce respuestas inciertas y copias en caché que pueden no concordar. NFS muestra cómo las solicitudes independientes y los reintentos seguros simplifican un tipo de recuperación ante fallos. AFS muestra cómo el almacenamiento de archivos completos en caché y los compromisos de notificación de cambios reducen el trabajo del servidor. Compara sus límites de compartición y su estado ante fallos para predecir cuándo otro cliente ve un cambio y cuándo pueden perderse actualizaciones concurrentes.

6.1 Explica cómo NFS se recupera de los fallos mediante solicitudes sin estado

Un sistema de archivos distribuido mantiene archivos en un servidor mientras los programas de las máquinas cliente usan las llamadas de archivo habituales. El cliente traduce esas llamadas en solicitudes de red. Las demoras y los fallos plantean una pregunta que las llamadas locales suelen ocultar: ¿qué debe hacer un cliente cuando no puede saber si una solicitud se completó?

Mantén el estado de los archivos abiertos en el cliente

El sistema de archivos de red (NFS) de Sun comenzó en la década de 1980. NFSv2 hizo que su servidor no mantuviera estado respecto a los archivos abiertos. El servidor almacena archivos, pero no recuerda los descriptores ni los desplazamientos actuales de cada cliente. Cada solicitud lleva suficiente información para ejecutarse sin una solicitud de apertura anterior.

Un identificador de archivo remoto identifica el volumen del servidor, el número de inodo y la generación del inodo. La generación cambia cuando se reutiliza un número de inodo, lo que impide que un identificador antiguo nombre accidentalmente otro archivo en esa posición reutilizada.

Para abrir /home/ana/notes.txt, el cliente parte de un identificador de la raíz y envía LOOKUP para home, ana y notes.txt. Conserva el identificador resultante en su propio estado de archivos abiertos. Leer los primeros 4 KiB se convierte en una solicitud READ que contiene ese identificador, el desplazamiento 0 y la cantidad 4096. Cerrar el descriptor local no necesita una solicitud CLOSE de NFSv2 porque el servidor no tiene ninguna entrada de archivo abierto que liberar.

Reintenta sin repetir un efecto

Si no llega una respuesta, el cliente no puede distinguir entre una solicitud perdida, un servidor no disponible o una respuesta perdida. Vuelve a enviar la solicitud cuando se agota el tiempo de espera.

Una operación es idempotente cuando repetirla tiene el mismo efecto que ejecutarla una vez. READ, LOOKUP y GETATTR no modifican el contenido almacenado. En este modelo, una operación WRITE con desplazamiento explícito también repite de forma segura los mismos bytes en la misma ubicación. Repetir una solicitud que diga «añade estos bytes al final actual» añadiría, en cambio, una segunda copia; el desplazamiento de un WRITE de NFS evita esa ambigüedad.

Algunas solicitudes necesitan más cuidado. Reintentar un MKDIR que tuvo éxito después de perderse su respuesta puede devolver «ya existe». El directorio está presente, pero la respuesta repetida difiere del éxito original. La recuperación sin estado no convierte todas las operaciones en solicitudes fáciles de repetir.

Haz fiables las confirmaciones de recepción

NFSv2 debe hacer duradero un WRITE antes de confirmar su éxito. De lo contrario, el servidor podría confirmar un bloque, perderlo de la memoria durante un fallo y después aceptar bloques posteriores. El cliente creería que todas las escrituras tuvieron éxito mientras el archivo carecería de una actualización intermedia.

Las respuestas después del almacenamiento estable evitan ese fallo a costa del rendimiento. NFSv3 añadió escrituras no estables seguidas de COMMIT, lo que permite hacer duraderas varias escrituras conjuntamente. El cliente debe distinguir una confirmación no estable de una finalización duradera.

Distingue las versiones del protocolo

Un protocolo con estado necesita mecanismos para recuperar el estado de archivos abiertos y bloqueos después de reiniciar un servidor y liberar el estado de los clientes que fallaron. NFSv4 acepta deliberadamente esa complejidad: tiene OPEN, CLOSE, bloqueos y concesiones temporales que los clientes renuevan. El cliente de Linux normalmente prueba primero la versión 4.2 y recurre a otras cuando es necesario. Por tanto, afirmar que NFSv2 no mantiene estado no describe todas las versiones de NFS.

Puntos clave

  • NFSv2 mantiene descriptores y desplazamientos en los clientes; cada solicitud contiene todo lo necesario.
  • Los identificadores de archivo remoto incluyen una generación para rechazar identidades obsoletas tras reutilizar un inodo.
  • Los desplazamientos explícitos hacen que repetir el mismo WRITE sea seguro en el modelo de reintentos.
  • NFSv2 confirma las escrituras solo después de llevarlas a almacenamiento estable; NFSv3 puede aplazar la durabilidad hasta COMMIT.
  • NFSv4 mantiene estado y usa mecanismos de recuperación y concesiones temporales.

6.2 Compara la caché y la consistencia de NFS y AFS

La caché del cliente ahorra viajes por la red, pero crea varias copias de los archivos compartidos. La regla de consistencia determina cuándo otra máquina debe dejar de usar una copia antigua y obtener los cambios del escritor.

Valida las cachés de NFS en los límites de compartición

Según la consistencia de cierre a apertura de NFS, cerrar un archivo modificado envía las escrituras almacenadas en búfer al servidor. Una apertura posterior en otro cliente comprueba que la copia esté actualizada y ve esos cambios. GETATTR o una validación relacionada compara los atributos del servidor con los almacenados en caché y descarta los datos desactualizados cuando detecta un cambio.

Comprobar en cada acceso sobrecargaría el servidor. Linux almacena en caché los atributos de archivos normales durante intervalos predeterminados de entre 3 y 60 segundos. Por tanto, un proceso que mantiene abierto un archivo puede leer datos de caché desactualizados entre comprobaciones. La apertura es un límite de compartición más sólido que una lectura cualquiera mediante un descriptor ya abierto. El comportamiento de cierre a apertura no garantiza la visibilidad inmediata de cada escritura individual.

Reutiliza archivos completos con los compromisos de notificación de AFS

El sistema de archivos Andrew (AFS) se diseñó en Carnegie Mellon en la década de 1980 para admitir muchos clientes por servidor. Cuando no existe una copia local válida, la apertura obtiene el archivo completo y lo guarda en el disco local. Las lecturas y escrituras usan después esa copia, y cerrar un archivo modificado envía la nueva versión completa al servidor. Una copia válida en caché puede volver a abrirse sin descargarla de nuevo.

AFSv1 comprobaba la validez en cada apertura y dejaba el recorrido de rutas al servidor. AFSv2 trasladó el recorrido a los clientes, que almacenan directorios en caché, e introdujo compromisos de notificación de cambios. El servidor promete avisar a un cliente cuando cambie un objeto en caché. Hasta que se invalida esa promesa, el cliente reutiliza su copia sin comprobaciones repetidas. Su identificador de archivo incluye un volumen, un identificador de archivo y un identificador de unicidad.

Sigue dos sesiones que se solapan

Supón que los clientes A y B abren un archivo. A cambia su copia local y la cierra, enviando la nueva versión al servidor. El servidor invalida los compromisos de notificación de los demás clientes. Una apertura posterior en B obtiene la nueva versión, pero la sesión que B ya tenía abierta conserva su copia existente hasta que se cierre y se vuelva a abrir.

Si ambas máquinas modifican sus copias, la última en cerrar sustituye el archivo completo del servidor. Los bloques de las dos copias no se mezclan. Dos ediciones en desplazamientos distintos pueden perder los cambios de un cliente porque la prevalencia del último cierre elige una versión completa. Los procesos de una misma máquina cliente ven inmediatamente las escrituras de los demás.

Los compromisos de notificación son estado del servidor. Después de reiniciar un cliente, los archivos en caché son sospechosos porque pueden haberse perdido notificaciones. Después de reiniciar un servidor, los clientes deben detectar la pérdida de las promesas de notificación, mediante mensajes periódicos de comprobación o un aviso del servidor, y volver a validarlas.

Adapta la caché a la carga de trabajo
Carga de trabajo o cuestiónNFSAFS
Parte pequeña de un archivo grandeTransfiere los bloques solicitadosLa transferencia del archivo completo puede desperdiciar trabajo
Lecturas repetidas de archivos grandes que superan la capacidad de memoriaDepende de los bloques disponibles en cachéLa copia en disco local evita más descargas por la red
Seguimiento de la actualizaciónComprobaciones de atributosCompromisos de notificación del servidor
Compartición concurrenteNecesita coordinaciónNecesita coordinación; el último cierre puede sobrescribir otra versión

AFS también ofrecía un espacio de nombres global, listas de control de acceso y volúmenes gestionados por el administrador. Históricamente, AFSv2 aumentó la capacidad de un servidor a unos 50 clientes frente a los aproximadamente 20 de AFSv1. La regla de caché de ninguno de los dos diseños sustituye la coordinación explícita, como los bloqueos de archivo, cuando los programas necesitan actualizaciones compartidas seguras.

Puntos clave

  • NFS usa la validación de cierre a apertura, aunque la caché de atributos puede dejar desactualizados a los lectores que mantienen el archivo abierto.
  • AFS reutiliza una caché de archivos completos en disco mientras el compromiso de notificación siga siendo válido.
  • AFS publica al cerrar; una sesión remota ya abierta conserva su copia antigua.
  • Los escritores concurrentes de AFS sustituyen versiones completas, por lo que prevalece el último cierre.
  • El estado de los compromisos de notificación requiere una nueva validación después de los fallos.
  • La granularidad de transferencia determina qué cargas de trabajo se benefician de cada diseño de caché.

Ejemplos de Sistemas de archivos

6 Lecciones Interactivas

1

Sigue un archivo desde la apertura hasta su sustitución duradera

19 pasos
Sigue los descriptores, nombres y permisos, y un guardado que sobrevive a un fallo.
  1. 1
    IntroducciónSigue cuatro tipos de estado

    Una operación con archivos puede cambiar bytes, una posición de archivo abierto, un nombre de directorio o un registro de permisos. Sigue un programa pequeño a través de estas capas y después construye una sustitución duradera. Mantener separadas las capas explica dos resultados inicialmente sorprendentes: un archivo puede seguir siendo utilizable después de eliminar su último nombre y cerrar un archivo no hace duradero un guardado por sí solo.

  2. 2
    EjemploAbre y lee un intervalo de bytes

    Se abre para lectura un archivo de 260 bytes. Supón que open devuelve el descriptor 3 y que la primera llamada a read(3, buf, 80) devuelve 80. El descriptor identifica la referencia abierta de este proceso; el desplazamiento ahora es 80. La cantidad devuelta te indica cuánto avanzar. La cantidad solicitada es solo un límite superior, por lo que el programa debe examinar el valor de retorno.

  3. 3
    DesafíoEncuentra el siguiente desplazamiento

    La siguiente solicitud pide 100 bytes, pero devuelve 60. ¿En qué desplazamiento empezará la siguiente lectura ordinaria?

    ---reveal---

    Empieza en el byte 140: el desplazamiento anterior, 80, avanza los 60 bytes realmente leídos. Avanzar los 100 solicitados saltaría bytes incorrectamente. Una lectura que devuelve 0 al final del archivo dejaría el desplazamiento sin cambios.

  4. 4
    AnalogíaComparte un marcador de página

    Una entrada de archivo abierto es como un marcador de página compartido en un ejemplar de un libro. dup ofrece otra forma de acceder a ese mismo marcador; dos llamadas separadas a open crean dos marcadores. La analogía solo representa la posición: ambas aperturas siguen dando acceso al mismo archivo. Modificar sus bytes puede afectar a ambos lectores aunque sus desplazamientos sean independientes.

  5. 5
    EjemploSigue un descriptor duplicado

    El programa llama a other = dup(3) y después a lseek(other, 20, SEEK_SET). El descriptor 3 ahora también usa el desplazamiento 20 porque ambos descriptores llegan a una misma entrada de archivo abierto. Una lectura de 15 bytes mediante el descriptor 3 deja su desplazamiento compartido en 35. El cambio de posición modifica el estado en memoria; no lee ningún bloque ni mueve un cabezal físico de disco.

  6. 6
    ConsejoElige la operación de posición adecuada

    Usa pread cuando una lectura deba indicar una posición de byte explícita sin cambiar el desplazamiento de la entrada de archivo abierto. Esto importa cuando los descriptores comparten esa entrada después de dup o fork. La llamada ordinaria read avanza el desplazamiento compartido; pread no lo hace. Comprueba la cantidad devuelta y los errores de cualquiera de las dos llamadas antes de suponer que se obtuvieron los bytes solicitados.

  7. 7
    ExplicaciónHaz duraderos los bytes aceptados

    Una llamada a write que termina correctamente suele colocar los nuevos bytes en búferes de memoria. Un fallo posterior puede borrarlos antes de que lleguen al almacenamiento. fsync espera a que los datos y metadatos modificados del archivo lleguen al almacenamiento, según informa el dispositivo. Cerrar un descriptor libera una referencia abierta; no realiza la misma operación de durabilidad.

  8. 8
    EjemploPrepara una sustitución completa

    Un editor quiere sustituir settings.json. Primero escribe todo el contenido de sustitución en settings.json.tmp, en el mismo directorio, y comprueba las cantidades escritas y los errores. El destino antiguo permanece intacto durante este trabajo. Después sincroniza correctamente el archivo temporal, asegurándose de que los bytes completos de sustitución sean duraderos antes de cambiar el nombre de destino.

  9. 9
    EjemploPublica y haz persistente el nuevo nombre

    Después, el editor renombra el archivo temporal sobre settings.json. La sustitución dentro del mismo sistema de archivos es atómica: el nombre da acceso al archivo antiguo o al nuevo, sin un intervalo en el que falte el nombre. Por último, sincroniza el directorio que lo contiene. Ese último paso hace persistente el cambio de nombre, porque la entrada pertenece al directorio y no al archivo.

  10. 10
    DesafíoEncuentra el paso de durabilidad que falta

    Un programa escribe y sincroniza un archivo nuevo, lo renombra sobre el destino e informa inmediatamente de que el guardado es duradero. ¿Qué operación falta?

    ---reveal---

    Sincronizar el directorio que lo contiene y comprobar que la operación termine correctamente. La sincronización del archivo protege el contenido de sustitución, mientras que la sincronización del directorio protege el cambio de nombre. El cambio de nombre atómico por sí solo no garantiza que sobreviva a un fallo.

  11. 11
    EjemploAñade un segundo nombre

    El comando ln draft saved crea un enlace duro. Ambos nombres se refieren a un mismo inodo y el número de enlaces del archivo normal pasa a 2. Eliminar draft deja saved disponible con un número de enlaces de 1. Nada copió el contenido: la operación añadió una entrada de directorio. Un enlace simbólico sería, en cambio, un objeto propio que almacena una ruta que se debe seguir.

  12. 12
    DesafíoElimina todos los nombres de un archivo abierto

    Un proceso tiene abierto saved. Otro proceso elimina su último enlace duro. ¿Puede el primer proceso seguir leyéndolo y cuándo se puede recuperar el almacenamiento?

    ---reveal---

    El descriptor abierto sigue siendo utilizable. La recuperación del espacio espera hasta que no haya nombres ni referencias abiertas. El número de enlaces registra los nombres, por lo que llegar a cero no termina por sí solo una referencia abierta existente.

  13. 13
    Idea claveUna ruta no es una referencia a un objeto

    Un enlace simbólico conserva una ruta de destino, por lo que eliminar o renombrar el destino puede dejarlo colgante. Un enlace duro nombra directamente el inodo y sobrevive a la eliminación de sus otros nombres. Los enlaces simbólicos pueden cruzar sistemas de archivos porque las rutas pueden cruzar puntos de montaje; los enlaces duros no pueden hacerlo porque los números de inodo tienen significado dentro de un sistema de archivos.

  14. 14
    EjemploInterpreta los derechos de acceso

    La cadena de permisos rw-r----- se divide en propietario rw-, grupo r-- y demás ---. Con lectura = 4, escritura = 2 y ejecución = 1, los dígitos son 6, 4 y 0. Así, chmod 640 report establece lectura y escritura para el propietario, lectura para el grupo y ningún derecho para los demás. Los tres dígitos describen clases de usuarios separadas, no una sola suma compartida.

  15. 15
    DesafíoAccede a un nombre de archivo conocido

    Un usuario tiene permiso de ejecución, pero no de lectura, en /srv/data, y los permisos del archivo permiten leer /srv/data/plan. ¿Puede el usuario abrir la ruta conocida y listar el directorio?

    ---reveal---

    El usuario puede abrir la ruta conocida porque la ejecución permite buscar en el directorio. Listarlo requiere permiso de lectura del directorio, por lo que falla. También se comprueban los permisos del archivo; buscar en el directorio por sí solo no concede acceso a todos los archivos que contiene.

  16. 16
    ConsejoInterpreta ctime correctamente

    Después de chmod, ctime cambia porque cambió el estado del inodo. No es una marca de tiempo de creación. mtime registra cambios en el contenido del archivo; atime registra el acceso, a menudo con actualizaciones diferidas. Mantener separados estos significados te ayuda a interpretar la salida de stat sin concluir que un cambio de permisos creó un archivo nuevo o reescribió sus bytes.

  17. 17
    ConexiónUne árboles sin unir identidades

    El montaje conecta la raíz de otro sistema de archivos a un directorio como /media/usb y oculta el contenido anterior de ese directorio mientras está montado. La capa de sistema de archivos virtual da a ambos árboles llamadas comunes. No combina sus tablas de inodos: el inodo 25 de un sistema de archivos puede no tener relación con el inodo 25 del otro.

  18. 18
    DesafíoSustituye un archivo mediante un segundo nombre

    Un programa mantiene abierto el archivo antiguo mediante el enlace duro backup. Un editor publica un archivo nuevo completo renombrando un archivo temporal sobre current y después sincroniza el directorio. ¿A qué contenido da acceso el descriptor antiguo y a cuál da acceso una nueva apertura de current?

    ---reveal---

    El descriptor y backup siguen dando acceso al inodo antiguo. Una nueva apertura de current da acceso al inodo de sustitución. El cambio de nombre modifica una entrada de directorio sin cambiar el destino de las referencias abiertas existentes; la sincronización hace persistente ese cambio de nombre.

  19. 19
    RepasoUsa el modelo de estado correcto

    Sigue las posiciones de lectura ordinarias mediante las entradas de archivos abiertos y los nombres mediante directorios e inodos. Para una sustitución duradera, termina el archivo temporal, sincronízalo, renómbralo y después sincroniza el directorio. Al diagnosticar el acceso o la eliminación, examina los derechos del directorio y las referencias abiertas pertinentes, además de los propios metadatos del archivo.

2

Localiza bytes en disco y cuenta el trabajo

17 pasos
Localiza inodos y bloques de datos y después sigue una ruta sin caché y su equivalente en caché.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónTraduce nombres a bloques
  2. 2
    EjemploConstruye la organización de la partición
  3. 3
    DesafíoCuenta las posiciones de inodo
  4. 4
    EjemploCalcula la dirección absoluta de un inodo
  5. 5
    EjemploSelecciona los bytes dentro del bloque que los contiene
  6. 6
    Idea claveMantén el nombre del archivo fuera del inodo
  7. 7
    EjemploLocaliza un bloque lógico de datos
  8. 8
    ExplicaciónAmplía el árbol de punteros
  9. 9
    EjemploAsigna la primera parte de un archivo grande
  10. 10
    DesafíoCompleta el recuento de bloques de punteros
  11. 11
    ConexiónDescribe una secuencia en lugar de cada dirección
  12. 12
    EjemploRecorre una ruta sin caché
  13. 13
    DesafíoAplica el modelo de lectura
  14. 14
    ConsejoCuenta cada estructura modificada
  15. 15
    Idea claveDeja que la memoria reduzca el trabajo del dispositivo
  16. 16
    DesafíoRepite una búsqueda después de almacenarla en caché
  17. 17
    RepasoSepara tres traducciones
3

Coloca archivos relacionados y dimensiona sus transferencias

13 pasos
Usa las reglas de localidad de FFS y deduce el tamaño de fragmento necesario para un objetivo de ancho de banda.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDedica tiempo a transferir bytes útiles
  2. 2
    ExplicaciónDiagnostica metadatos distantes y transferencias pequeñas
  3. 3
    AnalogíaMantén unido un conjunto de trabajo
  4. 4
    EjemploColoca recursos locales en cada grupo
  5. 5
    DesafíoExplica qué cambia con la agrupación
  6. 6
    EjemploColoca los archivos de un directorio
  7. 7
    Idea claveDeja espacio para los archivos vecinos
  8. 8
    EjemploMide la sobrecarga
  9. 9
    EjemploCalcula el tamaño para un objetivo del 90 %
  10. 10
    DesafíoPredice el tamaño de fragmento de una unidad más rápida
  11. 11
    ConsejoAdapta también la asignación a los archivos pequeños
  12. 12
    DesafíoMantén espacio para archivos creados conjuntamente
  13. 13
    RepasoEquilibra localidad, espacio y tamaño de transferencia
4

Sigue una adición durante un fallo y la recuperación

18 pasos
Compara escrituras parciales, reparación mediante un comprobador, confirmación en diario y recuperación ordenada de metadatos.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónRecupera una actualización completa
  2. 2
    EjemploNombra los tres bloques modificados
  3. 3
    DesafíoClasifica una asignación sin puntero
  4. 4
    EjemploEncuentra datos basura ocultos
  5. 5
    Idea claveDistingue tres tipos de fallo
  6. 6
    ExplicaciónReconstruye la propiedad con fsck
  7. 7
    DesafíoEvalúa una comprobación sin errores
  8. 8
    ConexiónRepara nombres sin inventarlos
  9. 9
    EjemploEscribe primero el contenido para rehacer
  10. 10
    EjemploConfirma la transacción completa
  11. 11
    DesafíoRecupérate después de un punto de control parcial
  12. 12
    ConsejoComprueba por separado la confirmación y la durabilidad
  13. 13
    EjemploEvita registrar los datos dos veces
  14. 14
    DesafíoDetecta la regla de ordenación que falta
  15. 15
    EjemploProtege un bloque reutilizado de una reaplicación antigua
  16. 16
    ConexiónPublica en su lugar un árbol nuevo
  17. 17
    DesafíoRecupera la estructura sin recuperar la intención
  18. 18
    RepasoPregunta qué puede demostrar la recuperación
5

Escribe, localiza y limpia un registro en movimiento

15 pasos
Sigue una actualización de LFS a través de su correspondencia, comprobación de vigencia y recuperación tras un fallo.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónMantén estable la identidad mientras cambian las ubicaciones
  2. 2
    ConexiónConvierte muchas actualizaciones pequeñas en una transferencia
  3. 3
    EjemploEscribe una versión nueva
  4. 4
    ExplicaciónActualiza el mapa de inodos
  5. 5
    DesafíoComprueba el directorio padre
  6. 6
    EjemploEncuentra el mapa después del montaje
  7. 7
    EjemploDimensiona un segmento secuencial
  8. 8
    Idea claveNo deduzcas que las lecturas son secuenciales
  9. 9
    EjemploComprueba la vigencia del bloque antiguo
  10. 10
    DesafíoCalcula el espacio recuperado
  11. 11
    ConsejoEvita copiar datos que pronto dejarán de estar vigentes
  12. 12
    EjemploElige un punto de control completo
  13. 13
    DesafíoRecupera el trabajo posterior al punto de control
  14. 14
    DesafíoRecupera el mapa antes de comprobar la vigencia
  15. 15
    RepasoAsume el coste de las actualizaciones secuenciales con correspondencias y limpieza
6

Reintenta solicitudes y predice la visibilidad de archivos compartidos

16 pasos
Compara la recuperación de NFS ante fallos con las secuencias de compartición en caché de NFS y AFS.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónGestiona la incertidumbre entre máquinas
  2. 2
    EjemploConstruye una lectura independiente
  3. 3
    Idea claveSin estado no significa sin almacenamiento
  4. 4
    DesafíoReintenta tras perder una respuesta a WRITE
  5. 5
    ConsejoReconoce un reintento que cambia la respuesta
  6. 6
    EjemploHaz duradera la confirmación
  7. 7
    ConexiónDistingue las versiones del protocolo
  8. 8
    EjemploComparte en un límite de apertura de NFS
  9. 9
    DesafíoExplica una lectura antigua desde la caché
  10. 10
    AnalogíaSustituye las comprobaciones repetidas por una promesa
  11. 11
    EjemploConserva la copia de una sesión de AFS ya abierta
  12. 12
    DesafíoPredice el resultado de dos escritores
  13. 13
    Idea claveTen en cuenta los compromisos de notificación después de un fallo
  14. 14
    ConexiónElige la granularidad de transferencia para la carga de trabajo
  15. 15
    DesafíoDistingue un reintento seguro de una edición compartida segura
  16. 16
    RepasoPlantea dos preguntas de red distintas

Ejercicios de Sistemas de archivos

60 Preguntas de Práctica en 6 sets

Set 1: Descriptores, nombres y guardados duraderos10 Preguntas de Práctica

Pregunta 1 de 10

Una lectura de un archivo normal solicita 120 bytes y devuelve 45. Si empieza en el desplazamiento 30, ¿dónde comienza la siguiente lectura ordinaria?
  1. Desplazamiento 75
  2. Desplazamiento 120
  3. Desplazamiento 150
  4. Desplazamiento 45
Mostrar respuestaOcultar respuesta
Respuesta: A
El desplazamiento avanza los 45 bytes realmente devueltos, de 30 a 75. Avanzar hasta 150 usaría la cantidad solicitada de 120, pero una solicitud solo establece un límite superior para los bytes leídos. Una lectura parcial que termina correctamente sigue avanzando según la cantidad real.

Pregunta 2 de 10

Un proceso abre por separado el mismo archivo como a y b y después lee 24 bytes mediante a. ¿Cuál es el desplazamiento de b antes de su primera lectura?
  1. 24, porque se comparte el inodo
  2. 0, porque la primera lectura reinicia ambas entradas
  3. 24, porque todos los descriptores comparten desplazamientos
  4. 0, porque las aperturas tienen entradas separadas
Mostrar respuestaOcultar respuesta
Respuesta: D
Cada apertura separada crea su propia entrada de archivo abierto y, por tanto, su propio desplazamiento, inicialmente cero. Compartir un inodo no implica compartir una entrada de archivo abierto. La lectura mediante a solo avanza a; los descriptores creados con dup compartirían una posición.

Pregunta 3 de 10

Un archivo tiene al menos 200 bytes. Un proceso lo abre como a, crea b = dup(a) y lo abre por separado como c. Después de fork, el hijo sitúa b en 70. El padre lee 12 bytes mediante a y después llama a pread(c, buf, 9, 100). ¿Cuáles son los desplazamientos finales de a, b y c?
  1. 82, 82, 0
  2. 82, 82, 109
  3. 12, 70, 0
  4. 82, 70, 109
Mostrar respuestaOcultar respuesta
Respuesta: A
a y b comparten una entrada después de la bifurcación, por lo que el cambio de posición del hijo la sitúa en 70 y la lectura del padre la avanza hasta 82. La apertura separada c empieza en cero y pread la deja ahí. Avanzar c hasta 109 confundiría la entrada/salida con posición explícita con la llamada ordinaria read.

Pregunta 4 de 10

Un programa ha escrito correctamente un archivo existente completo. ¿Qué llamada espera directamente a que los datos y metadatos modificados de ese archivo lleguen al almacenamiento?
  1. close(fd)
  2. fstat(fd, &buf)
  3. lseek(fd, 0, SEEK_SET)
  4. fsync(fd)
Mostrar respuestaOcultar respuesta
Respuesta: D
fsync espera a que los datos y metadatos modificados del archivo lleguen al almacenamiento, según informa el dispositivo. close libera el descriptor y puede dejar escrituras en búfer. Leer metadatos o cambiar el desplazamiento no solicita esta garantía de durabilidad.

Pregunta 5 de 10

Un editor escribe un archivo temporal con el contenido completo de sustitución en el directorio de destino y lo sincroniza correctamente. ¿Qué secuencia completa una sustitución duradera?
  1. Cerrar el archivo temporal y después renombrarlo
  2. Renombrarlo y después sincronizar el directorio
  3. Truncar el destino y después renombrar el temporal
  4. Sincronizar el directorio y después renombrarlo
Mostrar respuestaOcultar respuesta
Respuesta: B
El cambio de nombre publica atómicamente el contenido completo de sustitución y la sincronización del directorio hace duradero ese cambio de nombre. Sincronizar el directorio antes del cambio de nombre no puede hacer persistente un cambio que aún no ha ocurrido. Cerrar el archivo temporal por sí solo no hace persistente la actualización posterior del directorio.

Pregunta 6 de 10

En un archivo nuevo vacío se sitúa el desplazamiento en 12 288 y se escribe allí un byte. ¿Cuáles son su tamaño lógico y el contenido del hueco anterior?
  1. 1 byte; el hueco está fuera del archivo
  2. 12 289 bytes; el hueco contiene bytes antiguos del disco
  3. 12 289 bytes; el hueco se lee como ceros
  4. 12 288 bytes; el hueco se lee como ceros
Mostrar respuestaOcultar respuesta
Respuesta: C
El byte en el desplazamiento 12 288 amplía el archivo hasta incluir esa posición, lo que da una longitud de 12 289. Los bytes sin escribir dentro de la región ampliada se leen como ceros y una representación dispersa puede evitar asignar bloques para el hueco. Contar solo el byte escrito confunde los datos asignados con la longitud lógica del archivo.

Pregunta 7 de 10

Dos nombres, red y blue, son enlaces duros a un mismo archivo normal cerrado. Después de eliminar el enlace red, ¿qué ocurre con blue?
  1. Sigue siendo utilizable con 2 enlaces
  2. Sigue siendo utilizable con 1 enlace
  3. Desaparece junto con el inodo compartido
  4. Se convierte en un enlace simbólico colgante
Mostrar respuestaOcultar respuesta
Respuesta: B
Eliminar el enlace solo quita el nombre red y reduce el número de enlaces del inodo compartido de 2 a 1. blue sigue siendo un nombre equivalente para ese inodo y da acceso a su contenido. Considerarlo colgante aplicaría a un enlace duro el comportamiento de ruta de un enlace simbólico.

Pregunta 8 de 10

Un archivo normal tiene un nombre y un descriptor abierto. Otro proceso elimina el enlace correspondiente al nombre. ¿Cuándo puede el sistema de archivos recuperar su inodo y sus datos?
  1. Cuando el proceso cambie la posición del descriptor
  2. Cuando terminen las referencias abiertas restantes
  3. Cuando termine un listado posterior del directorio
  4. Cuando desaparezca el último nombre, inmediatamente
Mostrar respuestaOcultar respuesta
Respuesta: B
Eliminar el último enlace deja el número de enlaces en cero, pero el descriptor abierto sigue manteniendo accesible el objeto. La recuperación del espacio espera a que haya cero enlaces y ninguna referencia abierta. Eliminar inmediatamente el nombre del directorio es compatible con conservar el archivo sin nombre para su usuario actual.

Pregunta 9 de 10

Un usuario puede recorrer /srv/team, pero no puede listar sus nombres. El usuario conoce /srv/team/brief y los permisos de ese archivo permiten leerlo. ¿Qué acceso es posible?
  1. Se puede listar y se puede abrir
  2. Se puede listar, pero no se puede abrir
  3. Se puede abrir, pero no se puede listar
  4. No se puede listar ni se puede abrir
Mostrar respuestaOcultar respuesta
Respuesta: C
El permiso de ejecución del directorio permite buscar una ruta conocida, mientras que el permiso de lectura del directorio permite listar nombres. Por tanto, el archivo conocido y legible puede abrirse aunque no se pueda listar el directorio. El permiso de lectura del archivo por sí solo no supliría la falta de permiso de recorrido, pero aquí sí se dispone de este.

Pregunta 10 de 10

Se monta una unidad en un directorio que ya contiene archivos. ¿Qué ocurre con esos archivos anteriores mientras el montaje está activo?
  1. Se copian al sistema de archivos montado
  2. Se eliminan como parte del montaje
  3. Se combinan con la raíz montada
  4. Quedan ocultos por la raíz montada
Mostrar respuestaOcultar respuesta
Respuesta: D
El montaje hace visible la raíz del otro sistema de archivos en el punto de montaje y oculta el contenido anterior del directorio. No combina las entradas de ambos directorios ni elimina los archivos cubiertos. Un árbol de rutas unificado ofrece una vía común a los objetos sin combinar los sistemas de archivos subyacentes.
Set 2: Relaciona inodos, bloques de datos y trabajo del dispositivo10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un sistema de archivos asigna un inodo para un archivo normal vacío. ¿Qué mapa de bits registra esa asignación?
  1. El mapa de bits de inodos
  2. El mapa de bits de datos
  3. El mapa de bits de extensiones
  4. El mapa de bits de directorios
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una tabla de inodos empieza en el bloque de disco 4. Los bloques son de 4 KiB y los inodos son de 256 bytes, numerados desde cero. ¿En qué dirección absoluta de byte empieza el inodo 23?
  1. 22272
  2. 5888
  3. 16384
  4. 22528
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una partición tiene 100 bloques. Su superbloque usa 1, sus dos mapas de bits usan 2 y su tabla de inodos usa 8. ¿Cuántos bloques quedan en su región de datos?
  1. 97 bloques
  2. 89 bloques
  3. 92 bloques
  4. 91 bloques
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un bloque indirecto de 4 KiB almacena direcciones de 8 bytes. ¿Cuántas direcciones caben?
  1. 2048 direcciones
  2. 512 direcciones
  3. 4096 direcciones
  4. 1024 direcciones
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Con bloques de 2 KiB, ¿dónde se encuentra el desplazamiento de byte 6500 dentro de la correspondencia de bloques lógicos del archivo?
  1. Bloque 3, desplazamiento de byte 1500
  2. Bloque 2, desplazamiento de byte 2404
  3. Bloque 4, desplazamiento de byte 356
  4. Bloque 3, desplazamiento de byte 356
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un inodo tiene 6 punteros directos, un puntero indirecto simple y un puntero doblemente indirecto. Los bloques son de 1 KiB y los punteros de 4 bytes. Un archivo no disperso ocupa 400 bloques de datos. ¿Cuántos bloques de punteros se necesitan fuera del inodo?
  1. 2 bloques de punteros
  2. 5 bloques de punteros
  3. 3 bloques de punteros
  4. 4 bloques de punteros
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un archivo consta de tres secuencias contiguas separadas de 40, 15 y 25 bloques. ¿Qué número mínimo de registros de extensión describe esas secuencias?
  1. 80 registros
  2. 1 registro
  3. 3 registros
  4. 2 registros
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

En un modelo con caché vacía y directorios de un bloque, ¿cuántas lecturas de bloques de inodos o directorios localizan /lab/raw/data antes de leer su contenido?
  1. 7 lecturas
  2. 5 lecturas
  3. 8 lecturas
  4. 6 lecturas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un archivo usa solo punteros directos a datos. En un modelo sencillo con caché vacía, cada directorio ocupa un bloque. Después de abrir /lab/raw/data, el programa lee tres bloques de datos; cada acceso a un bloque vuelve a leer el inodo y escribe atime. Cerrar no realiza entrada/salida. ¿Cuál es el total?
  1. 13 operaciones de entrada/salida
  2. 19 operaciones de entrada/salida
  3. 10 operaciones de entrada/salida
  4. 16 operaciones de entrada/salida
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

La creación de dos archivos modifica el mismo bloque del mapa de bits de inodos antes de que se escriba en disco. ¿Cómo puede el almacenamiento en búfer reducir el tráfico de ese bloque?
  1. Evita reservar cualquiera de los inodos en disco
  2. Sustituye los bits de asignación por punteros a inodos
  3. Combina ambos cambios en una escritura posterior
  4. Almacena el mapa de bits dentro de los dos archivos nuevos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Localidad, tasa de procesamiento y actualizaciones parciales10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué sobrecarga de disco reduce principalmente colocar el inodo de un archivo cerca de sus datos?
  1. Los números de enlaces de directorios
  2. El espacio de almacenamiento de punteros
  3. El tiempo de búsqueda y la latencia rotacional
  4. Las comprobaciones de permisos de archivos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un disco duro tiene una tasa de transferencia secuencial alta, pero un sistema de archivos emite lecturas diminutas dispersas por él. ¿Por qué puede seguir siendo baja la tasa de procesamiento?
  1. Los bloques dispersos necesitan desplazamientos mayores
  2. La profundidad del directorio establece cada búsqueda de bloque
  3. Las lecturas pequeñas reducen el ancho de banda máximo de la unidad
  4. El posicionamiento domina las transferencias cortas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

El grupo de un directorio tiene espacio de sobra. ¿Dónde coloca normalmente FFS el inodo y los datos de un archivo normal recién creado?
  1. Juntos en el grupo lejano menos utilizado
  2. Juntos en el grupo del directorio padre
  3. En grupos separados para distribuir todo el tráfico
  4. Con el inodo únicamente en una tabla global
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Por qué usa FFS subbloques para archivos pequeños?
  1. Para evitar todas las escrituras de metadatos
  2. Para eliminar los punteros a datos del inodo
  3. Para que cada archivo ocupe varios grupos
  4. Para reducir el espacio sin usar en bloques grandes
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un disco alcanza un máximo de 120 MB/s. Un fragmento de 3 MB tarda 35 ms, incluidos el posicionamiento y la transferencia. ¿Qué tamaño de fragmento alcanzaría el 90 % del máximo si el tiempo de posicionamiento permanece fijo?
  1. 3,78 MB
  2. 10,8 MB
  3. 12 MB
  4. 37,8 MB
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un asignador similar al de FFS debe dejar espacio cerca de un directorio de proyecto para archivos pequeños del mismo directorio mientras almacena un archivo grande de lectura secuencial. Otros grupos tienen espacio de sobra. El disco alcanza un máximo de 160 MB/s y el posicionamiento tarda 5 ms. ¿Cómo deben colocarse y dimensionarse los fragmentos posteriores del archivo grande para alcanzar el 90 % del máximo?
  1. Usar fragmentos de 7,2 MB solo en el grupo inicial
  2. Usar fragmentos de 0,8 MB solo en el grupo inicial
  3. Usar fragmentos de 7,2 MB en otros grupos
  4. Usar fragmentos de 0,8 MB en otros grupos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Después de una adición al final de un archivo, los nuevos datos y el inodo llegan al disco, pero el mapa de bits de asignación no. ¿Cuál es el principal riesgo estructural?
  1. El mismo bloque puede volver a asignarse
  2. El bloque queda reservado sin propietario
  3. El inodo ha perdido todos sus nombres de directorio
  4. Los nuevos datos son inaccesibles desde el archivo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Solo el nuevo bloque de datos de una adición llega al disco. No sobreviven ni la actualización del inodo ni la del mapa de bits. ¿Cómo se clasifica el estado resultante?
  1. Inconsistente, con dos propietarios del bloque
  2. Confirmado, con una longitud de archivo desactualizada
  3. Con fuga, con un bloque asignado sin propietario
  4. Consistente, sin la adición
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un fallo deja un bloque marcado como asignado, pero sin referencias. El inodo de un segundo archivo apunta a otro bloque que sigue marcado como libre. Después de la reparación, ¿qué cambios en los bits de asignación concilian estos dos casos?
  1. Desactivar el primer bit y activar el segundo
  2. Activar ambos bits y conservar todos los punteros
  3. Desactivar ambos bits y conservar todos los punteros
  4. Activar el primer bit y desactivar el segundo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Las actualizaciones del inodo y del mapa de bits de una adición sobreviven, pero sus datos no. ¿Por qué puede el archivo superar la comprobación estructural y contener bytes incorrectos?
  1. Los mapas de bits reconstruyen los bytes ausentes
  2. El inodo deja de describir sus datos
  3. La propiedad concuerda aunque el contenido está desactualizado
  4. La comprobación solo compara nombres de archivo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Comprueba, confirma y reaplica de forma segura10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un inodo válido reclama el bloque 85, pero el mapa de bits marca el bloque 85 como libre. ¿Qué reparación del mapa de bits concuerda con la propiedad?
  1. Mantener la discrepancia por ahora
  2. Borrar el puntero del inodo
  3. Marcar el bloque 85 como asignado
  4. Liberar el bloque 85 en el punto de control
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un inodo asignado contiene punteros y datos válidos, pero no tiene ningún nombre accesible desde la raíz. ¿Cómo puede fsck conservar el acceso a él?
  1. Crear una entrada accesible en lost+found
  2. Dejarlo sin enlace y cambiar su número de enlaces
  3. Conservarlo solo restaurando una copia de respaldo
  4. Liberar sus bloques asignados sin añadir un nombre
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

El contenido de una transacción básica de registro de datos en diario es completamente duradero, pero su registro de confirmación TxE nunca llegó al almacenamiento. ¿Qué hace la recuperación tras el fallo con la transacción?
  1. Instala solo sus imágenes de inodo y mapa de bits
  2. La reaplica porque su contenido parece completo
  3. La ignora porque no está confirmada
  4. Considera que su contenido ya está en el punto de control
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una transacción está confirmada y la mitad de sus imágenes llegaron a sus ubicaciones finales antes de un fallo. ¿Por qué puede la recuperación reaplicar todas las imágenes?
  1. Porque primero descarta todos los datos ya escritos
  2. Porque sustituir bloques por imágenes idénticas es repetible
  3. Porque la confirmación hace innecesarias las escrituras finales
  4. Porque el punto de control solo cambia nombres de directorio
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un archivo tiene inicialmente dos bloques de datos. La transacción T1 de registro de datos en diario añade los bloques 80 y 81 y se confirma. T2 añade el bloque 82 en su contenido del diario, pero no tiene registro de confirmación. Se produce un fallo después de que solo la imagen del inodo de T1 se haya escrito en su ubicación final. Después de la recuperación, ¿cuáles son la longitud del archivo y los estados de asignación de los bloques del 80 al 82?
  1. Longitud de cinco bloques; 80, 81 y 82 asignados
  2. Longitud de cuatro bloques; 80, 81 y 82 asignados
  3. Longitud de dos bloques; 80, 81 y 82 libres
  4. Longitud de cuatro bloques; 80 y 81 asignados, 82 libre
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un diario vuelve a su inicio mientras una transacción confirmada solo se ha escrito parcialmente en sus ubicaciones finales. La implementación propuesta reutiliza inmediatamente el espacio de esa transacción porque TxE es duradero. ¿Qué fallo puede causar esto?
  1. La transacción deja de estar confirmada pese a TxE
  2. La recuperación añade cada cambio registrado una segunda vez
  3. La recuperación debe establecer un punto de control de todo el sistema de archivos
  4. Un fallo puede borrar las únicas copias necesarias para terminar
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

En el registro ordenado de metadatos en diario, las escrituras de datos y las escrituras de metadatos en el diario se ejecutan en paralelo. ¿Qué debe terminar antes de que TxE se haga duradero?
  1. Tanto las escrituras de datos como las de metadatos en el diario
  2. Solo la escritura de datos en su ubicación final
  3. El punto de control de metadatos en sus ubicaciones finales
  4. Solo la escritura del contenido de metadatos en el diario
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

La transacción confirmada T10 registra el bloque 70 como metadatos de directorio. La transacción confirmada T11 revoca el bloque 70 después de su eliminación. Más tarde, la transacción confirmada T12 registra una nueva imagen de metadatos para el bloque 70. ¿Qué ocurre con esas imágenes de bloque durante la recuperación?
  1. Se reaplica T10 y se omite T12
  2. Se omiten tanto T10 como T12
  3. Se omite T10 y se reaplica T12
  4. Se reaplican tanto T10 como T12
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un archivo ext4 se recupera con metadatos consistentes, pero contenido desactualizado, porque sus metadatos se confirmaron antes de que los datos asociados llegaran a su ubicación final. ¿Qué modo de datos permite este orden?
  1. data=writeback
  2. data=ordered
  3. Los tres modos por igual
  4. data=journal
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un diseño de actualizaciones suaves escribe primero datos inicializados y después falla antes de publicar su puntero. Una reparación recupera más tarde el espacio asignado sin usar. ¿Qué equilibrio ilustra esto?
  1. Los punteros publicados pueden indicar datos sin escribir de forma segura
  2. Las referencias seguras pueden coexistir con una fuga de espacio
  3. Cada escritura de la aplicación ya era duradera
  4. Todas las exploraciones de metadatos dejan de ser necesarias
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Registros en movimiento y cachés de red10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un inodo de LFS se mueve a una nueva dirección de disco después de una actualización. ¿Qué estructura relaciona su número estable con esa dirección más reciente?
  1. El mapa de inodos
  2. El directorio
  3. La tabla de inodos
  4. El mapa de bits de datos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Por qué almacenar números de inodo estables en los directorios de LFS evita actualizaciones recursivas de los directorios padre cuando se mueve el inodo de un archivo?
  1. Solo el imap necesita la dirección modificada
  2. Las entradas de directorio contienen imágenes enteras de inodos
  3. Las direcciones antigua y nueva del inodo siguen siendo actuales
  4. Todos los directorios permanecen fijados en memoria
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

La escritura de un segmento de 6 MB tarda 40 ms en un disco que alcanza un máximo de 200 MB/s. Con la misma demora de posicionamiento, ¿qué tamaño debe tener un segmento para alcanzar el 95 % del máximo?
  1. 114 MB
  2. 38 MB
  3. 19 MB
  4. 8 MB
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un resumen de segmento asigna la dirección 450 al inodo 9, bloque lógico 3. El inodo 9 más reciente del imap apunta el bloque 3 a la dirección 880. ¿Está vigente el bloque antiguo en 450?
  1. Sí, porque el inodo 9 sigue existiendo
  2. Sí, porque el resumen indica su propietario
  3. No, porque el puntero actual es distinto
  4. No, porque todos los bloques del punto de control están obsoletos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un limpiador lee seis segmentos del mismo tamaño, cada uno con un 50 % de datos vigentes, y reúne sus datos vigentes en segmentos nuevos. Sin contar la sobrecarga de metadatos, ¿cuántos segmentos de capacidad libre se ganan y a cuántos segmentos equivalen los datos vigentes escritos?
  1. 3 ganados; 6 escritos
  2. 6 ganados; 6 escritos
  3. 6 ganados; 3 escritos
  4. 3 ganados; 3 escritos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

El punto de control A tiene la misma marca de tiempo 52 al principio y al final. El punto de control B tiene una cabecera 53 y una marca de tiempo final 51. Hay segmentos válidos después del final del registro indicado en A. ¿Qué plan de recuperación conserva el trabajo recuperable más reciente?
  1. Usar A y después avanzar por los segmentos posteriores válidos
  2. Usar A y después descartar cada segmento que no esté en su mapa
  3. Usar B y después ignorar los segmentos anteriores a su cabecera
  4. Usar B y después reconstruir directorios desde posiciones de la tabla de inodos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un cliente conserva un identificador de archivo remoto de NFS para un archivo eliminado. Su número de inodo se reutiliza para otro archivo en el mismo volumen. ¿Qué campo del identificador impide acceder al archivo de sustitución?
  1. El desplazamiento del descriptor del cliente
  2. El número de generación del inodo
  3. El número de enlaces del directorio
  4. La posición del archivo abierto en el servidor
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un cliente envía un WRITE de NFSv2 con un desplazamiento explícito. El servidor lo completa de forma duradera, falla antes de responder y después se reinicia. ¿Qué hace que volver a enviar esa solicitud sea suficiente en el modelo básico de recuperación?
  1. El servidor restaura el desplazamiento abierto anterior del cliente
  2. El reintento añade bytes después del resultado almacenado
  3. El cliente deduce que la primera solicitud nunca se ejecutó
  4. El resultado estable sobrevive y repetirlo es seguro
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

El cliente A cierra un archivo NFS modificado antes de que el cliente B lo abra bajo la consistencia de cierre a apertura. ¿Qué debería observar la nueva apertura de B?
  1. Solo los cambios anteriores a la primera apertura de A
  2. Su copia antigua hasta que caduquen todos los temporizadores de atributos
  3. Los cambios de A después de validar que la copia está actualizada
  4. Su copia antigua hasta que se reinicie el servidor
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Los clientes A y B de AFS abren la misma versión. A cambia la región X y cierra. B cambia la región Y en su copia, que sigue abierta, y cierra el último; después C abre el archivo. ¿Qué versión recibe C?
  1. El archivo original hasta que ambos clientes vuelvan a abrirlo
  2. El archivo de A hasta que caduque el compromiso de notificación de B
  3. La versión completa de B, que puede perder la edición de A
  4. Un archivo combinado con las ediciones de ambos clientes
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 6: Diagnostica diseños de sistemas de archivos10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una herramienta copia correctamente un archivo a otro sistema de archivos y después elimina el original. ¿Ofrece esto la misma garantía de sustitución atómica que un cambio de nombre dentro de un mismo sistema de archivos?
  1. No, porque la copia y la eliminación son operaciones separadas
  2. Sí, porque la eliminación hace duradera la copia
  3. Sí, porque ambos archivos tienen los mismos bytes
  4. No, porque todos los movimientos requieren enlaces duros
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

one y two son enlaces duros a un archivo, y shortcut es un enlace simbólico que contiene la ruta one. Un proceso abre two y después se eliminan los tres nombres. Antes de que ese proceso cierre su descriptor, ¿qué queda?
  1. Ningún dato, porque han desaparecido todos los objetos de enlace
  2. Un archivo abierto sin nombre y con cero enlaces
  3. El archivo con un enlace duro desde el descriptor
  4. Un enlace simbólico vigente que mantiene accesible el destino
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un inodo tiene 8 punteros directos, un puntero indirecto simple y un puntero doblemente indirecto. Los bloques son de 2 KiB y las direcciones de 8 bytes. Un archivo no disperso tiene una longitud de 550 KiB. ¿Cuántos bloques en total contienen sus datos y sus estructuras externas de punteros?
  1. 277 bloques
  2. 279 bloques
  3. 275 bloques
  4. 278 bloques
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un fragmento de 4 MB alcanza 80 MB/s en un disco cuya tasa máxima es de 100 MB/s. Si el coste de posicionamiento no cambia, ¿qué tamaño de fragmento alcanza el 95 % del máximo?
  1. 7,6 MB
  2. 19 MB
  3. 9,5 MB
  4. 76 MB
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

En el registro básico de datos en diario, ¿qué registro marca una transacción como confirmada después de que su contenido sea duradero?
  1. Solo el mapa de bits de asignación
  2. La siguiente entrada de directorio
  3. El nuevo número de inodo
  4. El registro TxE correspondiente
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

T20 registra el bloque 44 como metadatos de directorio. T21 elimina ese directorio, reutiliza el bloque 44 para datos de usuario y confirma una revocación para el 44. T22 registra una imagen de metadatos distinta para el 44, pero nunca se confirma. Un fallo deja legibles los contenidos de las tres transacciones del diario. ¿Qué puede reaplicar la recuperación al bloque 44?
  1. La imagen de T22, la más reciente
  2. La imagen de T20, la última confirmada
  3. La imagen de T20 y luego la de T22
  4. Ni la imagen de T20 ni la de T22
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un candidato de limpieza de LFS de tres segmentos contiene el equivalente a un segmento de datos vigentes. Otro contiene el equivalente a dos segmentos vigentes entre tres segmentos. Con segmentos del mismo tamaño y sin contar la sobrecarga de metadatos, ¿cuál proporciona más capacidad libre por cada segmento vigente escrito?
  1. Ambos: 1 ganado por cada 1 escrito
  2. El segundo: 2 ganados por cada 1 escrito
  3. El primero: 2 ganados por cada 1 escrito
  4. El primero: 3 ganados por cada 1 escrito
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un rediseño de NFSv2 confirma una escritura de un bloque intermedio desde la memoria volátil y después falla. El cliente ya recibió una respuesta de éxito para esa escritura, por lo que solo reintenta una escritura posterior con desplazamiento explícito que no recibió confirmación. ¿Qué debilidad persiste?
  1. La actualización intermedia confirmada puede seguir ausente
  2. La generación del inodo debe ser igual al último desplazamiento
  3. El reintento posterior debe duplicar el bloque intermedio
  4. Los desplazamientos de clientes deben reconstruirse en el servidor
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un cliente vuelve a leer repetidamente un archivo más grande que la memoria. Sigue disponible una copia válida de AFS en la caché de disco. ¿Qué evita las descargas repetidas por la red?
  1. La visibilidad global inmediata de cada escritura
  2. Convertir cada lectura en un OPEN al servidor
  3. Reutilizar la copia completa del archivo en disco local
  4. Desactivar el mecanismo de notificación del servidor
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un servidor AFS publica el archivo modificado de A e invalida el compromiso de notificación de B. B sigue teniendo abierta una sesión de lectura anterior. El servidor se reinicia entonces y pierde las listas de compromisos de notificación. ¿Qué deben hacer la sesión ya abierta de B y la reutilización posterior de su caché?
  1. Conservar la copia abierta; detectar el reinicio y validar antes de reutilizar
  2. Conservar la copia abierta; confiar en los compromisos tras el reinicio
  3. Sustituir inmediatamente la sesión abierta; confiar en los compromisos antiguos
  4. Sustituir la sesión abierta; obtener datos solo tras reiniciar el cliente
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

96 Términos Clave, cada uno con su definición

A

Acierto de caché
Un acierto de caché se produce cuando la información solicitada ya está presente en la caché y puede usarse sin obtenerla del almacenamiento.
Abrir un archivo vecino puede reutilizar bloques de directorio conservados del recorrido anterior de una ruta.
Actualizaciones suaves
Las actualizaciones suaves ordenan las escrituras dependientes de metadatos y datos para evitar referencias inseguras sin registrar las actualizaciones en un diario.
Escribir datos inicializados antes del puntero puede dejar una fuga después de un fallo, pero evita un bloque no válido accesible.
Almacenamiento de archivos completos en caché
El almacenamiento de archivos completos en caché conserva un archivo completo en el cliente y atiende lecturas y escrituras locales mientras esa versión en caché siga siendo utilizable.
AFS puede volver a abrir un archivo válido almacenado en caché en disco sin descargarlo de nuevo, incluso después de que ya no quepa en memoria.
Almacenamiento temporal de escrituras en búfer
El almacenamiento temporal de escrituras en búfer mantiene temporalmente los bloques modificados en memoria para que el sistema pueda combinar, planificar o, a veces, eliminar escrituras.
Crear dos archivos con poca diferencia de tiempo puede actualizar un mapa de bits en memoria y escribirlo después una sola vez.
Amortización
La amortización reparte un coste fijo entre suficiente trabajo útil para que el coste represente una fracción menor del tiempo total.
Una transferencia de 9 MB a 100 MB/s dedica una parte mucho menor de su tiempo total a una búsqueda de 10 ms que una transferencia de 1 MB.
Archivo disperso
Un archivo disperso contiene regiones lógicas llenas de ceros que el sistema de archivos puede representar sin asignar bloques de datos.
Escribir un byte mucho más allá del final puede crear un archivo lógico grande con poco almacenamiento asignado.
atime
atime es la marca de tiempo del último acceso a un archivo, que registra el acceso al contenido según la política de actualización de marcas de tiempo del sistema de archivos.
Una lectura puede actualizar atime, aunque la política habitual relatime de Linux evita escribirlo después de cada acceso.

B

Bits de permisos
Los bits de permisos codifican los derechos de lectura, escritura y ejecución por separado para el propietario de un archivo, su grupo y los demás usuarios.
El modo 750 concede al propietario los tres derechos, al grupo lectura y ejecución, y a los demás ningún derecho.
Bloque de datos
Un bloque de datos es una unidad de asignación que contiene contenido de archivos o entradas de directorio y a la que se llega mediante la correspondencia almacenada del objeto.
Un bloque de datos de un directorio contiene nombres y números de inodo, mientras que un bloque de un archivo normal contiene sus bytes.
Bloque indirecto
Un bloque indirecto almacena una matriz de direcciones de bloques y amplía los datos accesibles mediante un solo puntero del inodo.
Un bloque indirecto de 4 KiB con direcciones de 4 bytes puede identificar 1024 bloques de datos separados.
Bloque lógico de archivo
Un bloque lógico de archivo es una parte de un archivo del tamaño de un bloque, identificada por su posición dentro de ese archivo con independencia de su ubicación en disco.
Los bloques lógicos 0 y 1 pueden almacenarse lejos uno del otro aunque sus intervalos de bytes sean consecutivos.
Bloque vigente
Un bloque vigente es un bloque almacenado al que todavía hace referencia la correspondencia válida más reciente para su archivo propietario y su posición lógica.
Un resumen indica el inodo 14 y el bloque 2, pero la dirección antigua ya no está vigente si el inodo más reciente apunta a otro lugar.
Búfer de pista
Un búfer de pista es memoria de la unidad que conserva datos leídos de una pista y reduce la necesidad de que el software controle las separaciones de rotación.
La unidad puede devolver el siguiente bloque solicitado desde su búfer de pista incluso después de que haya pasado por debajo del cabezal.
Búfer modificado
Un búfer modificado es una copia en memoria de datos o metadatos que ha cambiado y todavía debe escribirse en el almacenamiento.
Varias ediciones pueden actualizar un bloque modificado antes de que el sistema de archivos envíe su contenido final al dispositivo.

C

Caché de atributos
Una caché de atributos conserva temporalmente metadatos de archivos para que un cliente pueda evitar pedir al servidor que los valide en cada acceso.
Los temporizadores predeterminados de atributos de archivos normales de Linux van de 3 a 60 segundos, lo que permite lecturas desactualizadas entre comprobaciones.
Caché de páginas
La caché de páginas es memoria usada para conservar datos de archivos y bloques relacionados, de modo que un acceso posterior pueda evitar operaciones en el dispositivo de almacenamiento.
Una segunda lectura de un bloque sin cambios en caché puede copiar bytes al programa sin emitir otra lectura de disco.
Caché desactualizada
Una caché desactualizada contiene una copia antigua de un objeto que ya no coincide con la versión publicada actualmente por su servidor.
Un cliente que ya tiene un archivo abierto puede leer bytes antiguos en caché después de que otro cliente haya cerrado una versión modificada.
Compromiso de notificación de cambios
Un compromiso de notificación de cambios de AFS es una promesa del servidor de avisar a un cliente cuando cambie un objeto en caché, lo que permite reutilizarlo sin comprobaciones repetidas.
Publicar un archivo modificado hace que el servidor invalide los compromisos de notificación de los demás clientes para que las aperturas posteriores actualicen sus copias.
Concesión temporal
Una concesión temporal es un estado o una promesa gestionados por el servidor y limitados en el tiempo que un cliente debe renovar para conservarlos, lo que permite que caduquen después de un fallo.
Un servidor NFSv4 puede liberar el estado de un cliente que ha fallado cuando su concesión temporal caduca sin renovarse.
Consistencia ante fallos
La consistencia ante fallos es el requisito de que las estructuras almacenadas del sistema de archivos puedan recuperarse hasta un estado válido y coherente después de actualizaciones interrumpidas.
Una adición al final de un archivo no debe dejar un inodo como propietario de un bloque que el asignador todavía considera disponible para otro archivo.
Consistencia con prevalencia del último cierre
La consistencia con prevalencia del último cierre resuelve las escrituras concurrentes de AFS permitiendo que el último cliente en cerrar sustituya la versión completa del archivo del servidor.
Dos clientes que editan regiones distintas pueden perder una de las ediciones porque el cierre publica una copia local completa.
Consistencia de cierre a apertura
La consistencia de cierre a apertura hace visibles los cambios enviados por un escritor a quien abra el archivo después, aunque permite una visibilidad más débil durante las sesiones abiertas.
Después de que el cliente A cierre un archivo NFS modificado, el cliente B lo abre y valida su caché antes de leer los cambios.
Copia en escritura
La copia en escritura coloca los bloques modificados en direcciones nuevas y publica una nueva raíz, manteniendo intacta la versión antigua hasta el cambio.
Un fallo antes de la publicación deja accesible el árbol antiguo en lugar de exponer una mezcla de actualizaciones en su ubicación.
Coste de posicionamiento
El coste de posicionamiento es el tiempo de búsqueda y la latencia rotacional en los que incurre un disco duro antes de poder empezar a transferir los datos solicitados.
Dos lecturas distantes de 4 KiB pueden dedicar mucho más tiempo al posicionamiento que a transferir su pequeño contenido.
ctime
ctime es la marca de tiempo del cambio de estado del inodo, que se actualiza con escrituras de contenido y cambios como los de permisos, propiedad o enlaces.
Ejecutar chmod cambia ctime aunque los bytes y, por tanto, la hora de modificación del contenido permanezcan sin cambios.

D

Datos basura
Los datos basura son contenido antiguo o no válido que se expone por error a través de un archivo aunque sus punteros y registros de asignación concuerden.
Si el puntero de un bloque nuevo se confirma antes de que lleguen los nuevos bytes de ese bloque, un archivo aparentemente válido puede exponer el contenido anterior del bloque.
Descriptor de archivo
Un descriptor de archivo es un entero no negativo local a un proceso que se refiere a una entrada del núcleo para un archivo abierto.
Después de que open devuelva 4, el programa pasa 4 a read, write y close para esa referencia abierta.
Desplazamiento dentro del archivo
Un desplazamiento dentro del archivo es la posición de byte de una entrada de archivo abierto en la que empieza la siguiente lectura o escritura ordinaria.
Leer 32 bytes desde el desplazamiento 80 lo deja en 112 cuando la lectura devuelve la cantidad completa.
Diario de transacciones
Un diario de transacciones es un registro reservado en disco que contiene registros de actualizaciones para que los cambios confirmados puedan recuperarse después de escrituras interrumpidas.
Un fallo durante el establecimiento de un punto de control puede repararse a partir del diario sin examinar todos los inodos del sistema de archivos.
Durabilidad
La durabilidad es la propiedad por la que una actualización almacenada y confirmada permanece disponible después de un fallo o corte de energía.
Un editor espera a que fsync termine correctamente antes de informar de que el nuevo contenido de un documento se ha guardado de forma duradera.

E

Enlace duro
Un enlace duro es un nombre de directorio que se refiere directamente a un inodo existente y tiene la misma condición que sus otros nombres.
Después de ln draft copy, eliminar draft deja copy apuntando al mismo archivo y a sus bytes existentes.
Enlace simbólico
Un enlace simbólico es un archivo independiente cuyo contenido especifica una ruta de destino que el sistema sigue durante la resolución de rutas.
Un enlace a /media/archive puede llegar a otro sistema de archivos, pero falla si desaparece su ruta de destino.
Entrada de directorio
Una entrada de directorio asocia un nombre con un número de inodo, lo que permite que una búsqueda en el directorio identifique el objeto nombrado.
Añadir un enlace duro crea otra entrada de directorio para un inodo existente sin copiar el contenido del archivo.
Entrada de la tabla de archivos abiertos
Una entrada de la tabla de archivos abiertos es un registro del núcleo que contiene el desplazamiento, el modo de acceso, una referencia al inodo y el contador de referencias de un archivo abierto.
Los descriptores creados por dup apuntan a una misma entrada de archivo abierto, por lo que cambiar la posición mediante cualquiera de ellos modifica su posición compartida.
Escritura parcial
Una escritura parcial es una llamada de escritura que termina correctamente, pero informa de que ha escrito menos bytes de los solicitados por el programa.
Si write devuelve 200 para una solicitud de 500 bytes, el programa todavía debe gestionar los 300 bytes restantes.
Establecimiento de puntos de control
El establecimiento de puntos de control en el registro en diario copia los bloques registrados de una transacción confirmada a sus ubicaciones finales ordinarias en el sistema de archivos.
El espacio del diario sigue siendo necesario hasta que el establecimiento del punto de control haya colocado de forma segura cada imagen requerida en su destino.
Excepción para archivos grandes
La excepción para archivos grandes distribuye las partes posteriores de un archivo grande de FFS entre grupos para que no pueda consumir todo el grupo de su directorio.
Los primeros bloques accesibles mediante punteros directos permanecen cerca, mientras que los fragmentos indirectos posteriores se trasladan a otros grupos poco utilizados.
Extensión
Una extensión consta de una dirección inicial de disco y una longitud de secuencia que juntas describen una serie contigua de bloques de un archivo.
Un archivo contiguo de 1000 bloques puede usar una extensión en lugar de almacenar 1000 direcciones individuales de bloques.

F

Fragmentación
La fragmentación es la dispersión del espacio libre o de los bloques de un archivo en regiones separadas, lo que aumenta el trabajo necesario para acceder a ellos.
Un archivo puede tener desplazamientos de bytes secuenciales, pero requerir búsquedas repetidas porque sus bloques asignados están dispersos.
fsck
fsck es un comprobador de sistemas de archivos que examina metadatos y repara las relaciones de asignación, punteros, inodos y directorios después de una corrupción.
El comprobador puede activar un bit del mapa cuando un inodo válido es propietario del bloque, pero el mapa indica incorrectamente que está libre.
Fuga de espacio de almacenamiento
Una fuga de espacio de almacenamiento es almacenamiento asignado que ningún objeto propietario accesible usa, lo que deja capacidad no disponible sin conservar contenido útil.
Una actualización del mapa de bits sin su nuevo puntero de inodo puede reservar un bloque al que ningún archivo puede acceder después de la recuperación.

G

Grupo de bloques
Un grupo de bloques es un intervalo consecutivo de bloques lógicos de disco con estructuras locales de asignación, inodos y espacio de datos.
Ext4 usa grupos de bloques para buscar localidad aunque la unidad no exponga su geometría real.
Grupo de cilindros
Un grupo de cilindros es una región de FFS formada por cilindros vecinos del disco que mantiene físicamente próximos sus inodos, mapas de bits y datos.
Colocar un archivo pequeño en el grupo de cilindros de su directorio acorta las búsquedas entre las estructuras que se actualizan.

I

Idempotencia
La idempotencia significa que repetir una operación tiene el mismo efecto que ejecutarla una vez, lo que permite reintentar de forma segura las solicitudes adecuadas.
Repetir un WRITE con desplazamiento explícito almacena bytes idénticos en la misma ubicación en lugar de añadirlos de nuevo.
Identificador de archivo remoto
Un identificador de archivo remoto identifica un objeto remoto mediante información como su volumen de servidor, número de inodo y generación.
Un cliente incluye el identificador en READ para que el servidor conozca el objeto sin depender de una solicitud OPEN previa.
Inodo
Un inodo es un registro de un sistema de archivos de estilo Unix que almacena los metadatos y las ubicaciones de datos de un objeto, pero no almacena su nombre de archivo.
Dos nombres de directorio pueden compartir el inodo 28, por lo que modificar el archivo mediante cualquiera de los dos nombres actualiza el mismo objeto.
Inodo inaccesible desde la raíz
Un inodo inaccesible desde la raíz es un inodo asignado al que no se puede llegar mediante el árbol de directorios desde la raíz del sistema de archivos.
Después de daños en un directorio, fsck puede colocar en lost+found un inodo inaccesible por lo demás válido para que se inspeccione.
Instantánea
Una instantánea conserva una vista de un estado anterior del sistema de archivos al mantener los bloques y las correspondencias antiguos que definen esa versión.
La copia en escritura puede mantener disponible el árbol antiguo mientras se escriben los bloques modificados de la versión actual.

L

Limpiador de segmentos
El limpiador de segmentos es el componente de LFS que copia los bloques vigentes fuera de segmentos parcialmente usados y libera los segmentos antiguos para su reutilización.
Compactar cuatro segmentos con una cuarta parte de datos vigentes en uno gana tres segmentos de capacidad a cambio de operaciones de entrada/salida de copia.
Lista de control de acceso
Una lista de control de acceso añade reglas de permisos para usuarios o grupos identificados por su nombre, además de las clases de permisos de propietario, grupo y demás.
Una ACL puede conceder acceso a un miembro concreto del proyecto sin conceder los mismos derechos a todos los demás usuarios.
Localidad en el espacio de nombres
La localidad en el espacio de nombres es la tendencia a acceder conjuntamente a archivos próximos en el árbol de directorios, especialmente dentro de un mismo directorio.
Un compilador que abre varios archivos fuente de un proyecto se beneficia cuando sus inodos y contenidos están próximos.

M

Mapa de bits de asignación
Un mapa de bits de asignación usa un bit por cada objeto registrado para indicar si ese inodo o bloque de datos está asignado o libre.
Asignar un nuevo bloque de datos activa su bit en el mapa de bits de datos, mientras que un archivo nuevo también necesita un bit en el mapa de bits de inodos.
Mapa de inodos
El mapa de inodos, o imap, traduce cada número de inodo estable a la dirección en disco de su versión más reciente en un registro LFS.
Un directorio puede conservar el número de inodo 14 incluso cuando el inodo más reciente se mueve de la dirección 300 a la 900.
Máscara de creación de archivos
Una máscara de creación de archivos es un ajuste del proceso que elimina determinados bits de los permisos solicitados para un archivo nuevo.
Sin una ACL predeterminada, la umask 0022 transforma una solicitud de 0666 en los permisos 0644.
Metadatos
Los metadatos son información que describe un archivo, como su tipo, tamaño, propiedad, permisos, marcas de tiempo y ubicaciones de datos.
fstat lee metadatos mediante un descriptor sin tratar el contenido del archivo como un registro de metadatos.
Modo de adición al final
El modo de adición al final es un modo de archivo abierto que coloca cada escritura en el final actual del archivo y se selecciona con O_APPEND.
Un proceso de registro usa O_APPEND para que cada mensaje nuevo se coloque después del contenido existente del archivo.
Modo de diario con escritura diferida
El modo de diario con escritura diferida registra metadatos sin exigir que los bloques de datos asociados lleguen a su almacenamiento final antes de la confirmación.
Después de la recuperación en data=writeback, los metadatos pueden ser consistentes incluso cuando un archivo escrito recientemente contiene bytes desactualizados.
mtime
mtime es la marca de tiempo de la última modificación del contenido de un archivo, que distingue los cambios en los bytes almacenados de otros cambios de estado del inodo.
Cambiar los permisos actualiza ctime, mientras que escribir el contenido del archivo actualiza mtime además de ctime.

N

Número de enlaces
El número de enlaces registra cuántos nombres de directorio se refieren a un inodo, con un recuento especial de las entradas de punto para los directorios de Unix clásico.
Dos enlaces duros a un archivo normal producen un número de enlaces de 2, independientemente de cuántos descriptores estén abiertos.
Número de generación
Un número de generación distingue objetos sucesivos a los que se asigna el mismo número de inodo y protege a los clientes frente a identidades obsoletas.
Reutilizar el inodo 31 con una generación más reciente impide que un identificador antiguo del inodo 31 eliminado nombre su sustituto.

P

Problema de actualización recursiva
El problema de actualización recursiva se produce cuando mover un objeto obliga a reescribir punteros de sus padres, que se mueven y obligan a nuevas reescrituras.
Los números de inodo estables junto con el imap impiden que un inodo de archivo desplazado obligue a realizar actualizaciones hasta la raíz.
Puntero directo
Un puntero directo es una dirección almacenada en un inodo que apunta directamente a un bloque de datos sin un bloque de punteros separado.
El tercer puntero directo localiza el bloque lógico de archivo 2 porque la numeración de bloques empieza en cero.
Puntero doblemente indirecto
Un puntero doblemente indirecto llega a un bloque de punteros a bloques indirectos y añade un segundo nivel de direcciones antes de los datos.
Un archivo que supera la capacidad directa e indirecta simple asigna una raíz doblemente indirecta y suficientes bloques hijos indirectos.
Puntero duplicado
Un puntero duplicado es una referencia a un bloque que genera un conflicto de propiedad cuando dos inodos reclaman el mismo bloque de datos.
Una reparación puede dar a cada archivo su propia copia para que cambiar uno no pueda modificar silenciosamente los datos del otro.
Puntero no válido
Un puntero no válido es una dirección de bloque almacenada fuera del intervalo de direcciones válido del sistema de archivos y que, por tanto, no puede identificar datos válidos de su propietario.
Si un inodo apunta más allá del final de la partición, fsck borra ese puntero no válido durante la reparación.
Punto de montaje
Un punto de montaje es una ruta de directorio existente donde se conecta la raíz de otro sistema de archivos al árbol visible de directorios.
Montar una unidad en /media/usb oculta el contenido anterior de ese directorio mientras el montaje permanece activo.

R

Recorrido de una ruta
El recorrido de una ruta resuelve una ruta componente a componente, usando el contenido de los directorios para encontrar cada inodo siguiente hasta llegar al destino.
Al abrir /team/result, primero se encuentra team en la raíz y después result en el directorio team.
Recuperación por avance
La recuperación por avance examina actualizaciones válidas del registro posteriores a un punto de control y las aplica para reconstruir un estado más reciente que ese punto.
Un segmento escrito después del último punto de control aún puede recuperarse cuando su actualización es válida y completa.
Región de puntos de control
La región de puntos de control es una ubicación fija de LFS que registra las direcciones de las partes más recientes del imap para que pueda localizarse el registro en movimiento.
Al montar, el sistema lee la región de puntos de control antes de cargar el mapa de inodos y localizar los inodos de archivos.
Registro circular
Un registro circular reutiliza una región de almacenamiento limitada volviendo a su inicio y recuperando los registros cuyo trabajo de recuperación ha terminado.
Cuando los bloques de una transacción se han escrito en sus ubicaciones finales, su espacio en el diario puede quedar disponible para una transacción posterior.
Registro de confirmación
Un registro de confirmación marca una transacción como completa y recuperable después de que el contenido requerido del diario haya llegado al almacenamiento duradero.
El protocolo básico de recuperación mediante rehacer ignora los bloques de contenido que no tienen un registro de confirmación válido y correspondiente.
Registro de metadatos en diario
El registro de metadatos en diario registra los cambios de las estructuras del sistema de archivos mientras los datos ordinarios de los archivos se escriben directamente en sus ubicaciones finales.
Tanto el modo ordenado como el de escritura diferida registran metadatos en el diario, pero solo el ordenado exige que los datos se escriban antes de la confirmación.
Registro de revocación
Un registro de revocación indica a la recuperación que no reaplique las imágenes registradas obsoletas de un bloque correspondientes a transacciones anteriores a la revocación o a la propia transacción que la contiene.
La revocación impide que una imagen antigua de directorio sobrescriba datos de usuario después de que se haya reutilizado el mismo bloque de disco.
Registro físico
El registro físico registra imágenes completas de bloques de sustitución, lo que permite que la recuperación rehaga una actualización escribiendo esas imágenes en direcciones fijas.
Reaplicar una imagen de inodo repite los mismos bytes almacenados incluso si esa imagen se escribió en su ubicación final antes del fallo.
Registro lógico
El registro lógico registra una descripción de una operación de actualización en lugar de almacenar imágenes completas de sustitución de cada bloque modificado.
Un registro de operación compacto describe un cambio, mientras que un diario físico contiene los propios bytes de los nuevos bloques.
Registro ordenado en diario
El registro ordenado en diario es un registro de metadatos en diario que hace duraderos los datos referenciados en su ubicación final antes de confirmar los metadatos.
Un nuevo bloque de datos y los metadatos del diario pueden escribirse en paralelo, pero ambos deben terminar antes del registro de confirmación.
Resumen de segmento
Un resumen de segmento registra información de propiedad, como el número de inodo y el desplazamiento lógico, de los bloques almacenados en un segmento de LFS.
El limpiador usa el resumen para encontrar qué puntero de inodo actual debe comparar con la dirección de un bloque.
Ruta absoluta
Una ruta absoluta identifica un objeto a partir del directorio raíz, indicado por una barra inicial en las rutas Unix.
La ruta /srv/reports/today empieza en la raíz incluso cuando el directorio actual del proceso es /home/lee.
Ruta relativa
Una ruta relativa identifica un objeto a partir del directorio de trabajo actual del proceso en lugar de la raíz.
Desde /srv/reports, la ruta ../logs llega a /srv/logs siguiendo primero la entrada del directorio padre.

S

Segmento
Un segmento es una unidad grande y secuencial de salida de LFS que contiene datos y metadatos almacenados en búfer y escritos juntos en espacio sin usar.
Combinar muchos cambios pequeños en un segmento reparte el coste de posicionamiento de un disco entre una transferencia más larga.
Segmento de actualización frecuente
Un segmento de actualización frecuente contiene bloques que se sustituyen a menudo, por lo que esperar puede permitir que más bloques dejen de estar vigentes antes de la limpieza.
Retrasar la limpieza de un segmento de actualización frecuente puede ahorrar la copia de datos que otra escritura de aplicación dejará obsoletos pronto.
Servidor sin estado
Un servidor sin estado ejecuta solicitudes que contienen todo lo necesario sin conservar el estado de archivos abiertos de cada cliente, como descriptores y desplazamientos.
Un servidor NFSv2 puede volver a atender solicitudes después de reiniciarse sin reconstruir la tabla de archivos abiertos de cada cliente.
Sistema de archivos Andrew
El sistema de archivos Andrew, o AFS, es un diseño distribuido que usa almacenamiento de archivos completos en la caché del cliente y compromisos de notificación del servidor para reducir el trabajo repetido.
Una copia válida de AFS en caché en disco puede volver a abrirse sin una nueva descarga, mientras que una copia invalidada necesita actualizarse.
Sistema de archivos de red
El sistema de archivos de red, o NFS, es una familia de protocolos para acceder a archivos de servidor, con diseños sin estado en v2 y con estado en v4.
Un cliente de Linux normalmente prueba primero NFS versión 4.2, por lo que el modelo anterior sin estado no describe todos los montajes.
Sistema de archivos distribuido
Un sistema de archivos distribuido permite que las máquinas cliente usen archivos almacenados en servidores a través de una red mediante operaciones de archivo conocidas.
El cliente traduce una llamada read de un programa en una solicitud que identifica un archivo del servidor y el intervalo de bytes deseado.
Sistema de archivos estructurado como registro
Un sistema de archivos estructurado como registro escribe secuencialmente datos y metadatos en búfer en espacio sin usar y sustituye las versiones antiguas mediante nuevas correspondencias.
Actualizar un bloque de archivo escribe un nuevo bloque y un nuevo inodo en lugar de sobrescribir sus ubicaciones anteriores en disco.
Sistema de archivos virtual
El sistema de archivos virtual es una capa del núcleo que presenta operaciones de archivo comunes para distintos tipos de sistemas de archivos subyacentes.
Un programa puede usar read en un archivo ext4 y en uno NFS mientras sus implementaciones gestionan almacenamientos diferentes.
Subbloque
Un subbloque es una pieza de asignación más pequeña que FFS usa para almacenar archivos cortos sin desperdiciar un bloque grande completo del sistema de archivos.
Un archivo corto puede ocupar una pieza de 512 bytes antes de que su crecimiento requiera copiar su contenido a un bloque completo.
Suma de comprobación de transacción
Una suma de comprobación de transacción resume el contenido registrado para que la recuperación pueda detectar el contenido incompleto o dañado de una transacción.
Un marcador de confirmación que parece coincidir no basta cuando la validación muestra que falta parte de su contenido.
Superbloque
Un superbloque almacena los recuentos, la información de organización y los valores de identificación necesarios para interpretar y montar un sistema de archivos.
El sistema operativo lee el superbloque para localizar la tabla de inodos antes de buscar archivos individuales.
Sustitución atómica
Una sustitución atómica cambia un nombre de destino de un archivo antiguo a uno nuevo sin exponer un estado intermedio en el que falte el nombre.
Una llamada a rename dentro del mismo sistema de archivos sustituye config mientras los lectores acceden al archivo antiguo completo o al nuevo completo.

T

Tabla de asignación de archivos
La tabla de asignación de archivos, o FAT, almacena los enlaces al siguiente bloque de los archivos en una tabla separada, formando una cadena desde cada primer bloque.
Encontrar el vigésimo bloque de un archivo requiere seguir su cadena incluso cuando la propia tabla está en caché.
Tabla de inodos
Una tabla de inodos es una región que contiene registros de inodo de tamaño fijo cuyas posiciones pueden calcularse a partir de sus números de inodo.
Una tabla que empieza en el byte 16 384 sitúa el inodo 20, de 256 bytes, en la dirección absoluta de byte 21 504.
Transacción
Una transacción agrupa actualizaciones relacionadas bajo una única decisión de confirmación para que la recuperación acepte un cambio completo o lo ignore.
Una transacción de adición puede contener una nueva imagen del inodo, una imagen del mapa de bits de asignación y el nuevo bloque de datos.
Truncamiento
El truncamiento cambia la longitud lógica de un archivo; reducirla descarta los bytes finales, mientras que ampliarla crea bytes que se leen como ceros.
Abrir un archivo existente con O_TRUNC lo vacía antes de que el programa escriba contenido de sustitución.

U

Unidad de escritura atómica
Una unidad de escritura atómica es la cantidad que una interfaz de almacenamiento garantiza escribir por completo o dejar sin cambios cuando se interrumpe la operación.
Un registro de confirmación del diario debe caber en la unidad atómica admitida por el dispositivo para el protocolo básico de marcador de todo o nada.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar