Подобная UnionFS файловая система для Windows

11

Я ищу что-то, что работает как UnionFS в Windows 7. Мой сценарий использования: наличие рабочего каталога с чистым кодом в каталоге, доступном только для чтения, и компиляция его в файловой системе объединения, которая будет логически хранить скомпилированные двоичные файлы в одном месте, но физически другой каталог.

Библиотеки не работают таким образом, даже если они были приняты в качестве ответа в UnionFS, как на окнах, практически объединить папки - они показывают только каталоги верхнего уровня в одном месте.

Сам по себе код огромен (2 ГБ данных), и я бы хотел не копировать его для каждой сборки на моем сервере сборки.

liori
источник
Ой, упс. : - / Я пытаюсь решить ту же самую проблему самостоятельно, и не читал почти достаточно внимательно. Я удалю свой комментарий. Я практически не знаком с платформой Windows. : - /
Omnifarious

Ответы:

2

Не могли бы вы использовать символические ссылки, чтобы подделать это? http://en.wikipedia.org/wiki/NTFS_symbolic_link Это не ответ на точный вопрос, но я думаю, что это решит вариант использования, который вы дали.

MikeBaz - MSFT
источник
Я не понимаю, как это могло ... не могли бы вы объяснить?
liori
Я не знаю, как структурировано ваше дерево сборки, но предполагая, что это что-то вроде src, src / bin, src / obj, тогда вы можете иметь bin и obj быть символическими ссылками там, где вы хотите, чтобы код был. Просто убедитесь, что ваша сборка не удаляет эти папки полностью. В качестве альтернативы пусть src будет символической ссылкой на «только для чтения», а затем ссылки в режиме «только для чтения» вернутся назад. В любом случае вы должны быть в состоянии заставить это работать. Если только я полностью не пропустил ваш сценарий.
MikeBaz - MSFT
Я не контролирую процедуру сборки, и она может писать везде.
liori
@liori: для этого варианта использования вы можете воспроизвести каталоги и создать символические ссылки для каждого файла (что-то вроде cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \; или какой-то аналог Windows).
Gilles
@ Жиль: ты заставляешь меня думать, что копирование - это не плохое решение ... (кроме того, ты мог бы превратить это в ответ?)
liori
2

Вы можете создать unionfs для бедняков с символическими ссылками: воспроизводить структуру каталогов источника, но создавать ссылки (символические или жесткие) для файлов. Это должно подходить для ваших целей, если система сборки не пытается изменять исходные файлы.

С GNU cp это так же просто, как cp -al или же cp -as, Но я не знаю, есть ли порт инструментов GNU, который понимает ссылки Windows.

Если вам нужно вызвать команду mklink, это можно сделать с помощью инструментов POSIX (предупреждение, введенное непосредственно в браузере):

cd SOURCE
find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +
find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;

Я предполагаю, что есть собственный способ Windows, включающий Powershell, но я понятия не имею, как он выглядит. Возможно, стоит исследовать, является ли ваше дерево каталогов большим и ваши диски быстрыми, потому что разветвление в Windows имеет тенденцию быть медленным, и приведенные выше команды должны много разветвляться.

Gilles
источник
Родной путь был бы что-то вроде for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, с использованием junction инструмент от sysinternals.
MSalters
@MSalters Символьные ссылки теперь являются родными для Windows. И NTFS соединения не тоже самое.
Nick Whaley
@NickWhaley: Действительно, соединения - это, по сути, жесткие ссылки.
MSalters
2

Да есть в последних версиях винды , но я не знаю, как его использовать.

Mehrdad
источник
«UWF - это новая функция для Standard 8, которая недоступна в составе Windows 8». Вряд ли это доступно в версиях Windows для конечного пользователя.
Daniel B
1

Я нашел это, но я не знаю, насколько хорошо это работает:

Omnifarious
источник