2016-07-10 2 views
0

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

1) Как только файл достигнет определенного размера, приобретите блокировку на нем 2) Посмотрите на индекс (указатель, представляющий байт в текущем файле) прочитанного вызовите в таблице vnode для этого файла 3) Удалите все данные файла, которые поступают перед индексом 4) Обновите индекс прочитанного вызова до нового начала файла 5) Разблокируйте файл, чтобы возобновить чтение/запись

У меня мало опыта в системе, но я полагаю, что если это делается на системном уровне, то это не зависит от языка (т. Е. Если приложение использует java-вызов или вызов python для чтения/записи, есть нет проблема).

Файл данных находится в файловой системе unix v6. Мониторинг размера файла и удаление данных не проблема, но я не могу найти системный вызов: 1) получить доступ к другим записям в таблице vnode, чтобы увидеть, где они находятся при чтении файла, и 2) Обновить указатели чтения эти системные вызовы.

ответ

0

Файловая система Unix v6 не имеет никакого смысла. Я уверен, что вы не имеете в виду систему V6 Unix, выпущенную Bell Labs для PDP-11 в 1975 году; во-первых, я уверен, что он никогда не поддерживал Java или Python! Поэтому вам, вероятно, нужно быть более конкретным, какую систему вы имеете в виду. Это не может быть OpenBSD (который еще не выпустил версию 6), или FreeBSD (которая до версии 10 и версии 6 будет довольно устаревшей). Может быть, NetBSD?

В любом случае, я бы не рекомендовал вносить изменения в ядро ​​для поддержки этого, так как это было бы очень не переносимым и намного сложнее, чем вы думаете, чтобы все было правильно. В частности, перенумеровывание отображения между логическими и физическими блоками - сложно.. Существуют операционные системы и файловые системы (такие как Linux ext4 и xfs), которые поддерживают операцию PUNCH HOLE, которая освобождает блоки между указанным начальным и конечным смещением, если эти смещения являются кратными размеру блока файловой системы. Вы даже можете использовать операцию COLLAPSE RANGE, которая будет «удалять» байты с начала или середины файла --- но опять же, они должны быть кратными размеру блока файловой системы, и они не будут влиять на смещения файла любых дескрипторов открытых файлов. COLLAPSE RANGE - это, по сути, очень плохая идея, поскольку для сохранения стабильности кеша страницы требуется удаление всех кэшированных страниц для файла. Время, когда это полезно, крайне редко. Основным случаем использования являются люди, которые манипулируют действительно большими видеофайлами. Но архитектурно, это почти наверняка не что вы хотите сделать.

Что я хотел бы порекомендовать - это сделать это в пользовательском пространстве. Да, это означает, что вам нужно будет реализовать поддержку в Java и Python, но поверьте мне, это будет проще, чем пытаться взломать уровень ядра и файловой системы. Если вы действительно настаиваете, вы можете создать библиотеку C, а затем создать интерфейсы SWIG, которые можно вызывать из Java и Python, но на самом деле, вероятно, проще повторить реализацию логики дважды в идиоматическом и родном Java и коде Python.

Что бы я хотел сделать, так это написать записи в блоках размером около 1 мегабайта или около того, как только кусок достигнет определенного размера, запустите новый фрагмент в новом файле. Назовите куски численно --- то есть data0001, data0002 и т. Д. Читатель может просто просто прочитать кусок, и когда это будет сделано с ним, удалите файл chunk и перейдите.

На самом деле это просто, и вы не потеряете в сорняках попытку взлома на уровне ядра.

+0

Good catch - я имел в виду файловую систему, подобную Unix, как на Linux-сервере (я читал об Unix v6 для изучения базовых понятий). – pqx994

+0

Кажется, что ваше предложение не будет работать, потому что я не писатель - представьте, что текущее приложение, которое не мое, записывает в файл. Я не могу редактировать приложение и как он пишет, я просто знаю имя файла и имею к нему доступ. – pqx994

+0

@ pqx994 Не могли бы вы просто написать приложение в fifo? –

Смежные вопросы