Я думаю о ситуации, когда у меня было бы что-то, что создает копию каталога, настраивает несколько файлов, а затем выполняет некоторую обработку результата. Это будет происходить довольно часто, может быть, несколько десятков раз в день. (Точный вариант использования - это тестирование отправленных патчей; обманывайте код, исправляйте его, создавайте / тестируйте / отчет и т. Д.)
То, что я ищу, может быть сделано путем создания новой структуры каталогов и заполнения ее жесткими ссылками из оригинала. Однако это работает, только если все используемые вами инструменты удаляют и воссоздают файлы, а не редактируют их на месте.
Есть ли способ заставить файловую систему работать копирование при записи для файла?
Примечание: я знаю, что многие FS используют COW на уровне блоков (все обновления выполняются посредством записи в новые блоки), но это не то, что я хочу.
Если у вас есть выбор платформы для вашего файлового сервера, я бы пошел с недавней сборкой OpenSolaris и использовал функцию дедупликации ZFS. Таким образом, копии файлов не будут занимать дополнительное место, и даже общие сегменты между файлами не будут реплицироваться.
Вы можете прочитать все о дедупликации ZFS на этот пост в блоге Джеффа Бонвика.
Наиболее решения для виртуализации Linux предложить COW на уровне файлов среди виртуализированных ОС (скопировано из WP):
Я нахожу этот вопрос при поиске лучшего решения вместо моего текущего, например: cp -al SOURCEDIRNAME copy.SOURCEDIRNAME
или
find SOURCEDIRNAME -type d -exec mkdir -p copy.{} ';'
find SOURCEDIRNAME -type f -exec ln {} copy.{} ';'
На данный момент у меня есть копия структуры с кучей жестких ссылок. Это работает относительно быстро и не требует дополнительного места на диске, потому что мы не копируем все файлы. Теперь я могу делать кое-что (например, patch
или построить) в каталоге копий. Если они не изменяют исходные файлы, только переименуйте их и / или создайте новые файлы. После работы у меня есть некоторые результаты, и я могу удалить каталог копий и начать заново.
Если вы используете более сложные инструменты и не доверяете им (или знаете, что они пытаются перезаписать существующие файлы), вам может потребоваться пастушок.
Попробуйте использовать одну из UniouFS, AUFS или Наложенная файловая система (зависит от того, что поддерживается в вашем дистрибутиве)
Например, OverlayFS используется докером как один из драйверов для объединения слоев.
Наложение в основном касается каталогов. Если данное имя появляется как в верхней, так и в нижней файловой системе и относится к каталогу, не являющемуся каталогом в любой из них, то нижний объект скрыт - имя относится только к верхнему объекту.
Если и верхний, и нижний объекты являются каталогами, создается объединенный каталог.
Во время монтирования два каталога, указанные как параметры монтирования «lowerdir» и «upperdir», объединяются в объединенный каталог:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
«Workdir» должен быть пустым каталогом в той же файловой системе, что и upperdir.
Может быть SVN или другой инструмент для управления версиями (git, cvs)?