entendendo como o tipo de sistema de arquivos é determinado antes de ser montado

4

Existe alguma ferramenta de linha de comando para determinar o tipo de sistema de arquivos em um dispositivo de bloco antes de montá-lo? e como isso é alcançado?

Acredito que seja possível, já que geralmente monto discos externos com

$ mount /dev/sdXX /mnt

mount determina automaticamente o sistema de arquivos para você. ferramentas modernas de GUI até mesmo examinam o uso do disco e outras informações sem montar o sistema de arquivos se o driver para esse fs estiver presente.

o cenário aqui é que

  • o tipo de partição e o tipo de sistema de arquivos podem não coincidir.
  • a maior parte do sistema de arquivos linux usa o tipo de partição "83", que não oferece muita informação sobre o fs que ele contém.
  • a unidade correspondente pode estar ausente, faltando xfsprogs, hfsprogs, etc.

quando a montagem automática falha, com uma partição arbitrária ou imagem de disco em mãos, simplesmente não é possível testar cada candidato do tipo fs até encontrar o caminho certo. ou se o sistema de arquivos estiver corrompido. você não pode diagnosticá-lo com a ferramenta designada, já que o tipo fs é desconhecido.

eu acho que superblock é onde a maioria dos arquivos armazena seu identificador. mas diferentes fs escrevem superblocos em lugares diferentes.

é o despejo bruto de dados de bytes XXX no início suficiente para determinar o tipo de fs? Existe um padrão sobre onde e em que formato se deve armazenar essa informação?

qualquer insight sobre esta questão é muito apreciado.

= - =

Atualização:

thanx pela resposta de philag. então, a abordagem usual de file é, na verdade, a melhor abordagem.

meu problema foi que eu encontrei um sistema de arquivos estranho, cuja saída file é um tanto inútil.

cavando mais fundo na documentação do file (talvez as chamadas do sistema que ele utiliza também) deve me ajudar a entender melhor essa questão.

    
por Huang Tao 28.08.2011 / 13:04

1 resposta

3

Os primeiros bytes (não literalmente, mas geralmente no primeiro 4KiB) contêm uma assinatura, especialmente criada para ser única. O utilitário file pode determinar essas assinaturas. Veja por si mesmo:

$ # Create an example file we can write to. vdisk stands for your partition.
$ dd if=/dev/zero of=vdisk bs=1M count=40
$ mkfs.ext2 -qF vdisk
$ file vdisk
vdisk: Linux rev 1.0 ext2 filesystem data, UUID=cce25572-...-f4eba2957279
$ mkfs.xfs -fq vdisk
$ file vdisk
vdisk: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
$ # How does file find out? Let's look inside the partition
$ hexdump vdisk -C  | head -n 1
00000000  58 46 53 42 00 00 10 00  00 00 00 00 00 00 28 00  |XFSB..........(.|

Para obter uma lista detalhada de sistemas de arquivos que file reconhece, dê uma olhada em magic/Magdir/filesystems no file código-fonte . Se você está interessado apenas naqueles suportados pelo seu kernel, inspecione include/linux/magic.h nas fontes do seu kernel.

Se você estiver interessado em um dispositivo de bloco especial, a opção -s também é útil, assim como -L que seguirá (desreferencia) links simbólicos em vez de operar no próprio link. Por exemplo, se estiver usando um volume lógico e mapeador de dispositivos, algo como:

file -Ls /dev/mapper/home

pode ser útil.

    
por 28.08.2011 / 13:13