Leia blocos de um sistema de arquivos ext3?
Pergunta
Qual é a maneira mais fácil de acessar um sistema de arquivos ext3 no nível do bloco? Eu não ligo para os arquivos ou bytes brutos, eu só tenho que ler a FS um bloco de cada vez. Existe uma maneira simples de fazer isso (em C)? Ou talvez um aplicativo simples cuja fonte que eu poderia olhar para a inspiração? I não encontrou tutoriais utilizáveis ??na rede, e estou um pouco com medo de mergulhar na fonte do kernel para descobrir como fazê-lo.
Solução
Sim, veja e2fsprogs . Isto fornece ferramentas que você pode usar para fazer qualquer coisa (!) Com ext2, ext3 e sistemas de arquivos ext4. Ele também contém uma interface de biblioteca para que você possa fazer qualquer outra coisa.
Ver debugfs incluídos, pode ser o suficiente para você começar. Caso contrário, confira os cabeçalhos e escrever algum código.
Outras dicas
Se você quiser um aplicativo simples, então eu sugiro que você pode dar uma olhada em " dd " utilidade. I vem como parte do GNU Núcleo Utility . Sua fonte está disponível para download. Dê uma olhada em sua home page, aqui .
Se você quer conseguir mesmo a partir de um código C, em seguida, consulte o seguinte código. Espero que isso ajude você. :)
#include <stdio.h>
#include <linux/fs.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define SECTOR_NO 10 /*read 10th sector*/
int main()
{
int sector_size;
char *buf;
int n = SECTOR_NO;
int fd = open("/dev/sda1", O_RDONLY|O_NONBLOCK);
ioctl(fd, BLKSSZGET, §or_size);
printf("%d\n", sector_size);
lseek(fd, n*sector_size, SEEK_SET);
buf = malloc(sector_size);
read(fd, buf, sector_size);
return 0;
}
dispositivos de disco e partições dentro deles, se comportam como arquivos regulares que você pode ler (e escrever), por exemplo:.
head -c 2048 /dev/sda1 > first_2048_bytes
Você precisa ser root, é claro.