У меня есть сервер сборки Jenkins (Linux) и агент (Windows), которые создают большие временные рабочие пространства, которые можно эффективно обрабатывать как кэши:
- было бы неплохо, если бы их сохранили
- их можно восстановить в случае утери
- в случае потери данные должны быть утеряны, а не повреждены
Существует ли файловая система, которая позволяет мне пожертвовать сохранением данных ради скорости, при этом сохраняя данные после перезагрузок, но удаляя данные, потенциально затронутые некорректными завершениями работы, в идеале с гранулярностью «каталог верхнего уровня»?
Типичным сценарием было бы монтирование в каталог, содержащий рабочие пространства, поэтому каждое задание создает каталог верхнего уровня. Во время выполнения задания различные файлы, находящиеся глубоко в иерархии, считываются и записываются. Если машина выходит из строя во время выполнения задания, и файлы могут находиться в несогласованном состоянии, весь каталог задания следует удалить во время проверки файловой системы, поскольку его можно легко создать заново.
решение1
Не думайте, что вы найдете то, что вам нужно, в файловой системе.
Что вы могли бы сделать, так это в качестве последнего шага задания (в момент, когда вы захотите сохранить кэш) заставить его создать файл с постоянным именем - /storage/jobID/job_complete
или что-то в этом роде. При запуске, если этот файл не существует в каталоге задания, rm -r каталог задания. Это решает вашу проблему "полузавершенного задания".
Далее, вам нужна скорость. Пришло время рассмотреть новое оборудование, например SSD, или рассмотреть возможность внедрения RAID 0. Хотя 0 указывает на то, сколько данных вы сможете восстановить, если один диск выйдет из строя, вы можете получить значительное увеличение скорости как записи, так и чтения. (Медиацентр, который я поддерживал в местном колледже, использует RAID-1 для захвата видео в реальном времени перед перемещением полученных файлов в хранилище SAN).