GDT
= Group Descriptor Table
; GD
= Group Descriptor
. Estou tentando descobrir quantos bytes preciso ler depois do superbloco para extrair o GDT
, porque é necessário para um programa que estou fazendo. Como sabemos, cada um GD
é 64B
, e cada grupo de blocos deve ter GD
, mas como há sinalizadores especiais como flex_bg
ou sparse_super
ou meta_bg
que farão com que haja menos GD
do que deveria haver. Nesse caso, como devo saber o comprimento de GDT
?
relate perguntas
-
Como eu faria minha máquina Linux parecer que está executando o Windows?
-
Existe um equivalente a cd - para cp ou mv?
-
execute o contêiner do docker como root
-
Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux
-
Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?
Por que não usar a biblioteca libext2fs, que é enviada como parte do e2fsprogs? Esta é, na verdade, a melhor maneira de acessar os sistemas de arquivos ext2/ext3/ext4, já que é suportada pelo upstream, pelo mesmo conjunto de desenvolvedores que suporta o código do kenel Linux ext4.
Em resposta à sua pergunta, historicamente, o tamanho de um descritor de grupo de bloco único é 32 bytes. Se o sinalizador de recurso INCOPAT_64BIT for definido, o tamanho de um descritor de grupo de bloco único será definido pelo campo s_desc_size no superbloco ext4. Na prática , pelo menos hoje, em 2025, no momento em que este artigo foi escrito, se o sinalizador de recurso 64BIT for definido, s_desc_size será 64. E hoje, se s_desc_size for menor que 32 bytes, ou maior que 64 bytes, ou não for uma potência de dois, o sistema de arquivos será tratado como corrompido. Mas no futuro, é possível que haja uma extensão que aumente o tamanho do descritor de grupo de bloco. Isso só acontecerá se algum novo sinalizador de recurso incompatível for definido e definido, mas é por isso que é melhor usar libext2fs. Se e quando estendermos o formato do sistema de arquivos, versões mais recentes do libext2fs serão atualizadas para suportar o novo recurso do sistema de arquivos. Se você fizer suas próprias coisas, (a) provavelmente fará algo errado, e (b) poderá estar sujeito a problemas de compatibilidade futuros.
Agora, o tamanho do descritor de grupo de blocos é baseado no número de grupos de blocos multiplicado pelo tamanho dos descritores de grupo de blocos, arredondado para um tamanho de bloco do sistema de arquivos. O número de grupos de blocos pode ser calculado dividindo o número de blocos no sistema de arquivos (que pode ser encontrado no superbloco) pelo número de blocos em um grupo de blocos (que também pode ser encontrado no superbloco) arredondado para o próximo valor inteiro. Existem várias restrições sobre o que é e o que não é valores legais, mas é por isso que você deve usar libext2fs.
Coisas como sparse_super e sparse_super2 não têm nada a ver com o tamanho do descritor do grupo de blocos ou da tabela do descritor do grupo de blocos. Só tem a ver com quais grupos de blocos contêm cópias de backup do superbloco.