¿Cuál es el número "mágico" de un sistema de archivos en un superbloque?

9

Estoy trabajando en un sistema NAS de rango medio que básicamente se ejecuta en Linux y hoy tuve que hacer algunas pruebas excelentes. El paso a paso me llevó a usar fsdb para corromper el número mágico en un sistema de archivos para corromperlo / probar el script que debería solucionarlo.

Busqué en Google bastante y no encontré una explicación sólida. ¿Alguien puede arrojar algo de luz de manera intermedia?

mbb
fuente

Respuestas:

15

Un número mágico es una secuencia de bytes que se usa en todos los archivos de un formato determinado, generalmente en una posición determinada (a menudo al principio). Dado que todos los archivos en ese formato en particular tienen esa secuencia de bytes particular en esa posición en particular, y la mayoría de los archivos en otros formatos no la tienen, el número mágico es una forma de reconocer en qué formato está un archivo.

Aquí, este concepto se aplica a un formato de sistema de archivos. Por ejemplo, un sistema de archivos ext2 / ext3 / ext4 siempre tiene los bytes 0x53 0xEFen las posiciones 1080-1081. Un sistema de archivos reiserfs siempre ReIsErFscomienza en la posición 65588 (o ReIsEr2Fs, etc., en versiones más recientes). Otros sistemas de archivos tienen números mágicos similares. Las herramientas del sistema de archivos verifican la presencia del número mágico (y posiblemente otras pistas) para asegurarse de que no los haya lanzado accidentalmente en datos que están organizados en un formato que no pueden manejar y podrían dañar. Si cambia el número mágico en un sistema de archivos, es probable que las herramientas comunes se nieguen a tocarlo; Las herramientas de reparación pueden ser más inteligentes y tratar un número mágico malo como una de las cosas que podrían romperse.

El filecomando reconoce los archivos en función de sus números mágicos. Puedes correr file -s /dev/sda1para ver qué piensa que está en la partición /dev/sda1. Sus decisiones se basan en una base de datos que normalmente se encuentra en /etc/magico /usr/share/misc/magic. Los comandos específicos pueden usar diferentes números mágicos para reconocer los formatos de archivo que pueden manejar.

Gilles 'SO- deja de ser malvado'
fuente
En Ubuntu, apt-get install source fileextraerá file-x.yy/magic/Magdir/filesystemsel contenido de la información que la pregunta (y yo) estaba buscando.
Nick Garvey
¿No debería ser eso file /dev/sda1?
Bobby
@Bobby No, file /dev/sda1solo le diré que este es un nodo de dispositivo, no dice nada sobre el contenido. Necesitas cualquiera file </dev/sda1o file -s /dev/sda1.
Gilles 'SO- deja de ser malvado'
Oh, está bien, para mí file < /dev/sda1falla con el texto de ayuda del archivo (¿parámetro perdido?), Pero -sfunciona muy bien. Gracias.
Bobby
1
@Bobby Ah, ya veo, olvidé un personaje. Es file - </dev/sda1, porque tienes que decir fileexplícitamente que leas desde stdin. Gracias, lo arreglaré.
Gilles 'SO- deja de ser malvado'