Рамдиск, который сохраняет старые файлы
У меня есть программа, которая записывает файл на диск, а затем обрабатывает другой. Обычно это происходит в течение секунды или около того, поэтому файл является почти временным. Чтобы избежать дискового ввода-вывода, я пишу в /dev/shm. Однако, если второй процесс перестает работать или отстает, я не хочу потерять все данные в случае сбоя / перезагрузки системы.
Мне нужна установка, которая будет копировать файлы старше X секунд на жесткий диск (не SSD).
Сейчас я видел EPRD, но он работает на уровне блоков. Так что у меня не будет семантики или безопасности файла, которую я желаю. То же самое для bcache, насколько я могу судить. (Плюс bcache нацелен на производительность типа SSD, поэтому, вероятно, не лучше использовать его с жесткими дисками.)
Я хочу, чтобы в нормальном состоянии был нулевой дисковый ввод-вывод, а затем просто копирование файлов после определенного возраста. Могу ли я использовать стандартную файловую систему, установить кэширование с обратной записью и получить эту функциональность? Или это что-то для cronjob и rsync?
1 ответ
Если вы не настаиваете на файлах в памяти, но можете жить с данными в памяти и не боитесь немного развить свои текущие коды, вы можете использовать Redis. http://redis.io/
Это очень-очень простой менеджер баз данных значений ключей в памяти, который сохраняет данные на диске через заданные промежутки времени и имеет привязку ко всем разумным языкам в дополнение к удобному инструменту cli.
Что вам нужно сделать, это:
- установите для интервала хранения redis значение, которое вы считаете достаточно безопасным, чтобы хранить то, что ожидает слишком долго, но достаточно долго, чтобы не хранить данные, которые появляются и исчезают во времени,
- записать данные в redis в процессе A вместо записи в файл,
- читать данные из redis в процессе A,
- удалить данные
В случае сбоя redis или ОС, при следующем запуске redis сохраненные данные будут автоматически считаны в ожидании обработки.