File system simile a UnionFS per Windows


12

Sto cercando qualcosa che funzioni come UnionFS in Windows 7. Il mio caso d'uso: avere una directory di lavoro con codice pulito in una directory di sola lettura e compilarla in un filesystem union che memorizzerebbe i binari compilati logicamente nello stesso posto, ma fisicamente in directory diversa.

Le librerie non funzionano in questo modo, anche se sono state accettate come risposta in UnionFS allo stesso modo su Windows, uniscono virtualmente le cartelle : mostrano solo le directory di livello superiore in un unico posto.

Il codice stesso è enorme (2 GB di dati) e vorrei evitare di copiarlo per ogni build nel mio server di build.


Oh, oops. : - / Sto provando a risolvere lo stesso identico problema e non ho letto abbastanza attentamente. Eliminerò il mio commento. Non ho praticamente familiarità con la piattaforma Windows. : - /
Onnipotente il

Risposte:


2

Potresti usare collegamenti simbolici per simulare questo? http://it.wikipedia.org/wiki/NTFS_symbolic_link Non sta rispondendo alla domanda esatta, ma penso che risolverà il caso d'uso che hai fornito.


Non vedo come potrebbe ... potresti spiegare?
liori,

Non so come sia strutturato il tuo albero di compilazione, ma supponendo che sia qualcosa di simile a src, src / bin, src / obj, allora puoi avere bin e obj come collegamenti simbolici dove vuoi che sia il codice. Assicurati solo che la tua build non elimini completamente quelle cartelle. In alternativa, src deve essere il collegamento simbolico al "sola lettura", quindi i collegamenti in sola lettura tornano indietro. In entrambi i casi dovresti essere in grado di farlo funzionare. A meno che non mi manchi completamente il tuo scenario.
MikeBaz - MSFT

Non controllo la procedura di compilazione e può scrivere ovunque.
liori,

@liori: per questo caso d'uso, è possibile riprodurre le directory e creare collegamenti simbolici per ogni file (qualcosa di simile cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;o qualche equivalente di Windows).
Gilles 'SO- smetti di essere malvagio' il

@Gilles: mi fai pensare che copiare non sia una cattiva soluzione ... (inoltre, potresti farne una risposta?)
liori,

2

Puoi creare unionfs di un uomo povero con collegamenti simbolici: riproduci la struttura delle directory del sorgente, ma crea collegamenti (simbolici o duri) per i file. Questo dovrebbe essere adatto al tuo scopo purché il sistema di generazione non tenti di modificare i file di origine.

Con GNU cp, è facile come cp -alo cp -as. Ma non so se esiste una porta di strumenti GNU che comprende i collegamenti di Windows.

Se devi chiamare il comando mklink, puoi farlo con gli strumenti POSIX (avviso, digitato direttamente nel browser):

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

Suppongo che ci sia un modo nativo di Windows che coinvolge Powershell, ma non ho idea di come sia. Potrebbe valere la pena indagare se l'albero delle directory è grande e i dischi sono veloci perché il fork in Windows tende ad essere lento e i comandi sopra devono essere molto forati.


Il modo nativo sarebbe qualcosa di simile for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, usando lo junctionstrumento di sysinternals.
Saluti

@MSalters I collegamenti simbolici ora sono nativi di Windows. E le giunzioni NTFS non sono la stessa cosa.
Nick Whaley,

@NickWhaley: in effetti, le giunzioni sono essenzialmente collegamenti duri.
Salterio


1

Ho trovato questo, ma non so davvero quanto funzioni bene:


I progetti archiviati su Google Code non sono mantenuti. Potresti voler cercare una versione aggiornata da qualche parte. Forse una forchetta.
Robert Wm Ruedisueli,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.