Считывать блоки из файловой системы ext3?

StackOverflow https://stackoverflow.com/questions/1674012

  •  16-09-2019
  •  | 
  •  

Вопрос

Какой самый простой способ получить доступ к файловой системе ext3 на уровне блоков?Меня не волнуют файлы или необработанные байты, мне просто нужно читать FS по одному блоку за раз.Есть ли простой способ сделать это (на C)?Или, может быть, простое приложение, к источнику которого я мог бы обратиться за вдохновением?Я не нашел в сети полезных руководств, и мне немного страшно погружаться в исходный код ядра, чтобы узнать, как это сделать.

Это было полезно?

Решение

Да, видишь программы e2fsprogs.Это предоставляет инструменты, которые вы можете использовать для выполнения любых действий (!) с файловыми системами ext2, ext3 и ext4.Он также содержит библиотечный интерфейс, так что вы можете делать все, что угодно еще.

Посмотрите включенные файлы debugfs, возможно, этого будет достаточно для начала.В противном случае ознакомьтесь с заголовками и напишите какой-нибудь код.

Другие советы

Если вам нужно простое приложение, то я предлагаю вам взглянуть на "дд" полезность.Я прихожу как часть Основная утилита GNU.Его исходный код доступен для скачивания.Взгляните на его домашнюю страницу, здесь.
Если вы хотите добиться того же с помощью C-кода, то, пожалуйста, обратитесь к следующему коду.Надеюсь, это поможет вам.:)

#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;
}

Дисковые устройства и разделы внутри них ведут себя точно так же, как обычные файлы, из которых вы можете читать (и записывать), например:

head -c 2048 /dev/sda1 > first_2048_bytes

Конечно, вам нужно быть root.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top