Como posso modificar o wtime do sistema de arquivos ext

3

Como posso modificar o superbloco de um sistema de arquivos ext para que eu possa definir o campo wtime (Last write time) ?

Eu tentei com debugfs:

debugfs 1.42.9 (4-Feb-2014)
debugfs:  open /dev/sdd2 -w
debugfs:  ssv wtime "@0x64000000"
debugfs:  show_super_stats -h
debugfs:  close

Quando fecho, o sistema de arquivos wtime é definido para a hora atual do sistema.

Obviamente, não quero alterar a hora do sistema para que o wtime seja definido quando o sistema de arquivos é fechado e, em seguida, para reverter a hora do meu sistema.

Meu segundo pensamento foi que eu posso mudá-lo com o hexeditor, mas tenho quase certeza de que o superbloco tem uma soma de verificação calculada sobre o superbloco e verificada.

    
por bat_ventzi 18.09.2014 / 15:07

3 respostas

2

Depois que eu li a resposta de Peter Horvath. Procurei nas fontes e, como ele apontou, aqui ext2fs_flush2 escreve este campo e o código atual é assim:

fs->super->s_wtime = fs->now ? fs->now : time(NULL);

Eu pesquisei as fontes desse fs->now e descobri que ele está sendo definido por do_set_current_time . Eu pensei que tinha tentado isso da última vez, mas tentei mais uma vez. E, na verdade, o código a seguir fez o trabalho.

debugfs:  open /dev/sdb2 -w
debugfs:  ssv mtime "@0x64000000"
debugfs:  set_current_time "@0x64000000"
Setting current time to Thu Mar  2 01:46:40 2023

debugfs:  close

Editar: você deve tocar no superbloco se quiser que wtime seja atualizado. E você não pode definir 0 como seu current_time .

    
por 19.09.2014 / 09:39
2

Explorar o código-fonte do nosso software não é do diabo. Eu pesquisei um pouco depois deles e encontrei os seguintes resultados:

  1. O Debugfs está no pacote e2fsprogs.
  2. E2fsprogs também contém a biblioteca libext2, que é a biblioteca comum para lidar com todas as operações de manipulação do ext2.
  3. Quando vemos o código fonte do e2fsprogs , com alguns greps podemos encontrar muito facilmente o ponto do comando close_filesys isso.
  4. Podemos ver que essa chamada chama sempre ext2_close_free() , que já está no código-fonte libext2fs, aqui .
  5. Na função nomeada, podemos ver as atualizações do wtime : ext2fs_close_free() chamadas ext2fs_close2() , que chama ext2fs_close() , que chama ext2fs_flush2() , que chama ext2fs_flush() .
  6. Como podemos ver nesta função, o campo wtime será sempre atualizado. Não há exceção.

Mas: você pode facilmente desativar isso no código-fonte. Se você vier aqui novamente, eu vou te explicar como.

p. sim, existe uma soma de verificação no superbloco ext2 e é gerada pelo crc32c, que é um algoritmo complexo.

    
por 18.09.2014 / 16:06
0

Bem, possivelmente espaço do usuário é a solução, você pode tentar o fuse-ext2

Página inicial: link

    
por 18.09.2014 / 15:16