O que é o número "mágico" de um sistema de arquivos em um super bloco?


9

Estou trabalhando em um sistema NAS de médio porte, basicamente rodando em Linux, e fiz alguns ótimos testes hoje. O passo a passo me levou a usar o fsdb para corromper o número mágico em um sistema de arquivos para corromper / testar o script que deve corrigi-lo.

Pesquisei bastante um pouco e não encontrei uma explicação sólida. Alguém pode lançar alguma luz de maneira intermediária?

Respostas:


15

Um número mágico é uma sequência de bytes usada em todos os arquivos de um determinado formato, geralmente em uma determinada posição (geralmente no início). Como todos os arquivos nesse formato específico têm essa sequência de bytes específica nessa posição específica e a maioria dos arquivos em outros formatos não o possui, o número mágico é uma maneira de reconhecer em que formato o arquivo está.

Aqui, esse conceito é aplicado a um formato de sistema de arquivos. Por exemplo, um sistema de arquivos ext2 / ext3 / ext4 sempre tem os bytes 0x53 0xEFnas posições 1080-1081. Um sistema de arquivos reiserfs sempre ReIsErFscomeça na posição 65588 (ou ReIsEr2Fsetc. nas versões mais recentes). Outros sistemas de arquivos têm números mágicos semelhantes. As ferramentas do sistema de arquivos verificam a presença do número mágico (e possivelmente outras pistas) para garantir que você não as tenha lançado acidentalmente em dados organizados em um formato que eles não podem lidar e podem danificar. Se você alterar o número mágico em um sistema de arquivos, as ferramentas comuns provavelmente se recusarão a tocá-lo; as ferramentas de reparo podem ser mais inteligentes e tratar um número mágico ruim como apenas uma das coisas que podem ser quebradas.

O filecomando reconhece arquivos com base em seus números mágicos. Você pode executar file -s /dev/sda1para ver o que ele acha que está na partição /dev/sda1. Suas decisões são baseadas em um banco de dados normalmente encontrado em /etc/magicou /usr/share/misc/magic. Comandos específicos podem usar diferentes números mágicos para reconhecer os formatos de arquivo com os quais podem lidar.


No Ubuntu, apt-get install source fileo pull irá file-x.yy/magic/Magdir/filesystemsconter exatamente as informações que a pergunta (e eu) estávamos procurando.
Nick Garvey

Isso não deveria ser file /dev/sda1?
Bobby

@ Bobby Não, file /dev/sda1apenas lhe dirá que este é um nó do dispositivo, não diz nada sobre o conteúdo. Você precisa de um file </dev/sda1ou file -s /dev/sda1.
Gilles 'SO- stop be evil'

Oh ok, para mim file < /dev/sda1falha com o texto de ajuda do arquivo (parâmetro ausente?), Mas -sfunciona muito bem. Obrigado.
Bobby

11
@ Bobby Ah, entendi, esqueci um personagem. É file - </dev/sda1porque você precisa dizer fileexplicitamente para ler a partir de stdin. Obrigado, eu vou consertar.
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.