¿Qué son los metadatos y cómo ayuda en el proceso "fsck"?

8

Si lo entiendo correctamente, "fsck" se usa en los sistemas UNIX para verificar la consistencia interna en los discos después de un bloqueo. Me preguntaba, entonces, cómo utiliza los "metadatos" para asegurarse de que todo en el sistema de archivos sea coherente, por ejemplo, ¿qué pasos debe seguir el proceso fsck para restaurar y reparar?

-> editar: también sería útil si alguien pudiera aclarar a qué se refiere la "escritura sincrónica" en esta imagen.

Kaitlyn Mcmordie
fuente
Parece que sería más sobre el tema de U&L, tal vez.

Respuestas:

13

Los metadatos son información sobre datos. Si piensa en un archivo de texto, la secuencia de letras de ese archivo de texto son los datos reales que contiene el archivo. Sin embargo, el archivo tiene un nombre, un propietario, una fecha de creación, una ubicación en el medio de almacenamiento, etc. Toda esta información son metadatos. Tenga en cuenta que los metadatos se pueden manejar de la misma manera que los datos. Por ejemplo, Unix almacena metadatos de archivos en archivos de datos llamados directorios (o carpetas en esta nueva era de la informática :-)

El sistema de archivos Unix usa una unidad básica de almacenamiento llamada inodes . Un inodo individual puede contener datos de archivo reales, información de directorio (metadatos) o no utilizarse (libre). Tenga en cuenta que el acto de crear un nuevo archivo implica cambiar el estado de un inodo de libre a asignado, escribir datos en el nuevo archivo y escribir metadatos en un archivo de directorio. Es posible que una computadora se bloquee en medio de este tipo de operación, en cuyo caso el sistema de archivos puede estar dañado .

La verificación del sistema de archivos consiste en leer todos los inodos e intentar resolver tantos problemas de corrupción como sea posible. Por ejemplo, suponga que un inodo no está en la lista de inodos libres, pero no hay entradas de directorio que digan que este inodo es parte de un archivo en ninguno de los directorios que conoce el sistema de archivos. Este inodo se puede volver a colocar en la lista de inodes libres.

La escritura sincronizada es una forma de realizar la escritura en el disco de una manera que garantiza que si se produce un bloqueo, se puede recuperar el sistema de archivos. Por ejemplo, cuando está creando un nuevo archivo, debe asignar un inodo, crear el inodo con su conjunto de metadatos y luego actualizar el archivo que contiene la información del directorio. Con la escritura sincrónica , estas se realizan como acciones separadas, una a la vez, en ese orden. Si el bloqueo ocurre antes de que se escriba el directorio, el inodo puede volver a colocarse en la lista libre y no se produjo la creación del archivo.

También son posibles otros tipos de comprobaciones del sistema de archivos.

Jay Elston
fuente
6

En el contexto de los sistemas de archivos Unix o Linux, los "metadatos" son información sobre un archivo: ID de usuario de quién lo posee, permisos, tipo de archivo (especial, regular, canalización con nombre, etc.) y qué bloques de disco utiliza el archivo. Todo eso normalmente se mantiene en una estructura en disco llamada "inodo". Una de las piezas de información en un inodo es cuántos "enlaces" existen al archivo. Un archivo normal generalmente tiene 1, pero un directorio (que es principalmente un archivo con una marca especial de tipo de archivo "Soy un directorio") tiene al menos 2 enlaces. Todo lo visible en un sistema de archivos tiene un enlace desde el directorio en el que aparece, pero dado que cada directorio tiene un "." nombre así como su nombre ordinario, tienen 2 enlaces.

fsckpuede escanear los "bloques de inodo" de un sistema de archivos (los bloques de disco que contienen las estructuras de datos de inodo) para encontrar inodos que tienen un recuento de enlaces mayor que 0. Un archivo representado por un inodo con un recuento de enlaces mayor que 0 debe aparecer en un directorio en alguna parte. Si ese inodo no aparece en un directorio, fsckcoloca el archivo en un directorio conocido, generalmente "perdido + encontrado" en la parte superior del sistema de archivos. Tenga en cuenta que los sistemas de archivos Unix / Linux generalmente no tienen metadatos en un inodo sobre a qué directorio pertenece el inodo, solo información en el archivo de directorio sobre qué archivos contiene el directorio.

fsckpuede usar otros metadatos como qué bloques de disco contienen los datos de un archivo. fsckpuede verificar si los bloques de discos que un inodo dice que pertenecen a un archivo aparecen en la "lista no asignada" de bloques de discos del sistema de archivos. Potencialmente fsckpodría verificar si dos o más inodos contienen los mismos bloques de disco, lo que indicaría algún tipo de corrupción de asignación múltiple.

La asignación de bloques de disco a archivos aparece en los inodos en disco. La estructura de árbol de membresía del directorio de un sistema de archivos aparece en los directorios. Los inodes no aparecen, y no están asignados a directorios. fsckaprovecha esta separación para hacer reparaciones. Esto es bastante diferente de los sistemas como MS-DOS o Windows temprano, donde una "tabla de asignación de archivos" contenía tanto la estructura de árbol (membresía de directorio) como la asignación de bloque de disco. Corrompe el "FAT" y tienes que escanear bloques de disco para ver qué contienen y cómo podrían encajar.

Bruce Ediger
fuente
5

Los metadatos son "Datos sobre datos".

En el caso del sistema de archivos * nix, los metadatos utilizados por fsckun encabezado en cada bloque de datos apuntan a una entrada de directorio o al siguiente bloque de datos y las entradas correspondientes en el directorio. fsckescanea los bloques y comprueba que las entradas del directorio coincidan y que los punteros de reenvío al siguiente bloque sean correctos.

Esto varía mucho entre los sistemas de archivos. De hecho, qué metadatos se almacenan y dónde se almacenan es lo que más diferencia a los diversos sistemas de archivos * nix. Los más modernos también mantienen un archivo de registro de cambios en las estructuras de directorios.

James Anderson
fuente
Es curioso, pero ¿sabe cómo o dónde las implementaciones modernas almacenan los metadatos en el disco?
Kaitlyn Mcmordie
1
@KaitlynMcmordie, depende de la fs. Para ext [234], la mayoría de los metadatos se almacenan en el inodo del archivo. Los nombres se almacenan en los directorios, es decir, la parte de datos de los archivos que tienen la bandera del directorio y un formato específico para sus datos principales. Los datos del archivo se almacenan en bloques de datos, y los inodes se almacenan en las tablas de inodes, que se asignan cuando se formatea el fs. Otros datos en el inodo incluyen el propietario, los permisos, las marcas de tiempo de acceso y los punteros a los bloques de datos.
psusi