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.

Foi útil?

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, &sector_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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top