Как проверить, присутствует ли блок в разреженном файле (для простого копирования при записи)? - PullRequest
6 голосов
/ 02 апреля 2010

Как получить разреженный размер блока и проверить, присутствуют ли данные с данным смещением в разреженном файле в reiserfs / ext3 в Linux?

Я хочу использовать его для реализации простого блочного устройства копирования-записи с использованием FUSE.

Или мне лучше оставить растровое изображение в отдельном файле?

Ответы [ 3 ]

5 голосов
/ 02 апреля 2010

/ USR / SRC / Linux / Документация / файловые системы / fiemap.txt

fiemap ioctl - эффективный метод для получения пользователем пространства для получения файла. отображения экстентов. Вместо блочного отображения (такого как bmap), fiemap возвращает список экстентов.

Вот быстрый пример использования в git: //kernel.ubuntu.com/cking/debug-code/fiemap/. В разреженном файле не хватает экстентов для «пропущенных» частей.

2 голосов
/ 06 сентября 2012

Начиная с Linux 3.1, lseek предоставляет флаги SEEK_HOLE и SEEK_DATA для перехода к началу или концу отверстия, так что это может быть альтернативой ioctl на основе решение . Ни один из них на практике не пробовал, поэтому у меня нет никакого реального опыта, чтобы сравнить их.

1 голос
/ 02 апреля 2010

Ну, http://lxr.linux.no/#linux+v2.6.33/arch/um/drivers/cow_user.c указывает, что в пользовательском режиме Linux для этого используется явная битовая карта, FWIW.

...