Como obtenho instantâneos ou versões transparentes e eficientes do sistema de arquivos no ext3 / 4?

11

Há muito tempo penso em versionar sistemas de arquivos. Este é um recurso matador e eu olhei para Wayback, ext3cow, zfs, soluções de fusíveis ou apenas sobreposições cvs / svn / git.

Considero ext3cow o modelo para minhas necessidades. Transparente, eficiente, mas posso fazer sem o ls abc@timestamprecurso extra . Desde que, de alguma forma, eu obtenha versões automatizadas e transparentes dos meus arquivos.

Pode ser instantâneo ou basear-se em instantâneos em intervalos de 10s, 30s, 1m, 5m, 15m, etc. Apenas algo que lidará eficientemente com milhares de arquivos em um determinado diretório, de vários tamanhos, dos mais pequenos, mas alguns acima de 100m a 1gb.

O ZFS não é realmente uma opção, pois estou no linux (e preferiria não usá-lo através do fusível, pois já tenho uma configuração ext3 que quero versão, não algo novo).

Que soluções existem?

Dale Forester
fonte

Respostas:

7

Se você agrupar seus sistemas de arquivos usando o LVM, poderá criar um volume de captura instantânea usando a camada de volume lógico subjacente. É um processo bastante simples e surpreendentemente eficaz para coisas "instantâneas" padrão, como backup e rm -frremoção de oopsies.

McJeff
fonte
Obrigado pela resposta. Infelizmente, estou procurando algo que possa ser aplicado em um sistema de arquivos existente.
Dale Forester
6

Após 8 anos de pesquisa , encontrei o SVNFS de Marco R. Gazzetta (que é diferente do projeto antigo com o mesmo nome de John Madden [que faz coisas diferentes]). Este SVNFS usa svn de forma transparente em operações r / w:

Em vez de criar um sistema de arquivos que possui seu próprio controle de versão, usei uma ferramenta de controle de versão existente, o subversion, e tornei seu uso transparente. A vantagem é que este sistema de arquivos não exige que você aprenda uma nova ferramenta, se você conhece o subversion

Está escrito em Python e usa o FUSE:

Agora você inicia o sistema de arquivos de versão chamando o script anexado:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

Quando tudo estiver bem, você poderá obter uma lista dos dois diretórios e verificar se o conteúdo é o mesmo.

Agora, se você criar (quase) qualquer arquivo em qualquer diretório, ele também aparecerá no outro lado da cerca. A grande diferença é que, se você criar um arquivo no diretório myfiles, ele será automaticamente colocado sob controle de versão (o oposto não é verdadeiro).

No exemplo, o SVNFS usa um diretório separado para o repositório. Embora eu não tenha testado. Para minhas necessidades, eu gostaria de ter um repositório direto no meu diretório de trabalho.


Também encontrei referência aos recursos de versão do Reiser4 há 4 anos:

Consulte Reiser 4. Os arquivos são diretórios.

por exemplo: diff -u main.C main.C/r/123

Ou para acessar propriedades

cat main.C/p/svn-eolstyle

echo "foobar" > main.C/p/my-property 

Parece que seria melhor seguir esse modelo, pois um grande sistema de arquivos já está seguindo esse caminho.

-Paul Querna

Mas eu também não verifiquei.


Há dois anos, procurei mais, encontrei o projeto FiST para gerar sistemas de arquivos empilháveis ​​e entrei em contato com o prof. Erez Zadok, da Universidade Stony Brook, que foi consultor / mentor do projeto chamado versionfs há muito tempo. Citação:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

permite que os usuários gerenciem suas próprias versões com facilidade e eficiência. O Versionfs fornece essa funcionalidade com no máximo 4% de sobrecarga para cargas de trabalho típicas do usuário. Versionfs permite que os usuários selecionem quais versões são mantidas e como elas são armazenadas por meio de políticas de retenção e políticas de armazenamento, respectivamente. Os usuários podem selecionar a troca entre espaço e desempenho que melhor atenda às suas necessidades individuais: cópias completas, cópias compactadas ou deltas de bloco. Embora os usuários possam controlar suas versões, o administrador pode aplicar valores mínimos e máximos e fornecer aos usuários padrões adequados.

Além disso, através do uso de libversionfs, aplicativos não modificados podem examinar, manipular e recuperar versões. Os usuários podem simplesmente executar ferramentas familiares para acessar versões de arquivos anteriores, em vez de exigir que os usuários aprendam comandos separados ou solicitar ao administrador do sistema que remonte um sistema de arquivos. Sem a libversionfs, as versões anteriores são completamente ocultas dos usuários.

Finalmente, o Versionfs vai além da simples cópia na gravação empregada pelos sistemas anteriores: implementamos a cópia na alteração. Embora inicialmente esperássemos que a comparação entre páginas antigas e novas fosse muito cara, descobrimos que o aumento no tempo do sistema é mais do que compensado pelo tempo reduzido de E / S e CPU associado à gravação de blocos inalterados. Quando políticas de armazenamento mais caras são usadas (por exemplo, compactação), a cópia na alteração é ainda mais útil.

Pareceu-me muito interessante, mas entrar em contato com os caras que trabalharam no projeto revelou que threre não é um lugar conhecido do seu código-fonte. O próprio professor declarou no correio:

O código do Versionfs é muito antigo agora e só funcionou no kernel 2.4. Se você ainda deseja um controle de versão empilhável f / s, seria necessário escrevê-lo do zero - possivelmente com base no wrapfs (consulte wrapfs.filesystems.org/).

Portanto, não há nenhum projeto em funcionamento aqui, embora o conceito de sistema de arquivos empilhável me pareça muito agradável. Alguém gostaria de iniciar o projeto com base em wrapfs , avise-me, por favor :)

saulius2
fonte
3

Você pode verificar o gitfs . É um sistema de arquivos FUSE baseado em git, bastante estável e super fácil de usar.

Basicamente, é uma sobreposição sobre o git. Sempre que você atualiza um arquivo ou diretório, ele cria uma confirmação com essa alteração (sabe como corrigir as confirmações para que você não termine com 100 confirmações ao descompactar um arquivo morto). Também sabe sincronizar seu controle remoto e mesclar os conflitos usando a estratégia 'sempre aceite o meu'.

Quando você o monta, ele traz dois diretórios: atual e histórico . ├── current │   ├── test1.md │   ├── test2.md │   ├── test3.md -> current/test2.md │   ├── test4.md │   └── test_directory └── history ├── 2014-11-23 │   ├── 20-00-21-d71d1579a7 │   │   └── testing.md │   └── 20-42-32-7d09611d83 │   ├── test2.md │   └── testing.md ├── 2014-12-08 │   ├── 16-38-30-6d6e71fe47 │   │   ├── test2.md │   │   └── test1.md

Mais informações podem ser encontradas nesta página .

vtemian
fonte
Adicionar mais informações melhoraria esta resposta.
Dave M
2

bup parece promissor.

Discussões anteriores sobre isso aqui: http://lwn.net/Articles/380983/

Shane Geiger
fonte
Há uma ressalva em usar algo baseado no git, as modificações no git não são tratadas como deltas desde a origem - toda confirmação é o arquivo completo, mesmo que você altere apenas um byte.
sintetizador
0

Experimente o rsnapshot - eu não o usei, mas me deparei com ele enquanto olhava nos sistemas de deduplicação no nível de arquivo @.

Jason
fonte
Isso é interessante. Eu definitivamente irei olhar para isto. Minha preocupação é que sua carga io cause gagueira no meu sistema (não fiz algo parecido com o rsync há um tempo atrás e parei de usá-lo por causa de problemas / comportamento gaguejante em outros consoles quando ele era executado).
Dale Forester
Dei uma olhada no rsnapshot e gosto da ideia, mas é muito, muito lamentável que exija uma cópia duplicada do que quer que seja o snapshot. Infelizmente, e por necessidade, estou trabalhando com unidades no limite delas e quero capturar instantâneos de conteúdo um pouco maiores que o espaço livre restante.
Dale Forester
1
A dificuldade está em suas necessidades. além de algo como rsnapshot, ou LVM, o ext2 / ext3 não possui um recurso de captura de imagem embutido. Você indica o ext3cow, mas precisaria alterar o sistema de arquivos subjacente. Observe que parece que você pode usar o rsnapshot e armazenar seus dados em OUTRA máquina. Não sei que tipo de espaço você está falando, mas pode fazer sentido manter suas fotos em outra máquina? Lembre-se também de que instantâneos de qualquer tipo exigirão espaço em disco. Se suas unidades estiverem com quase capacidade, quanto espaço resta para os instantâneos?
Jason