Mesclar alterações no sistema de arquivos superior para o sistema de arquivos inferior na montagem Overlay do Linux (OverlayFS)

2

Gostaria de poder mesclar as alterações do sistema de arquivos superior de uma montagem de sobreposição para um sistema de arquivos inferior.

Estou interessado tanto nas soluções online (ou seja, mesclar enquanto a sobreposição está montada) e offline (desmontar a sobreposição e depois mesclar).

Encontrei algumas soluções off-line, as quais adicionei como respostas.

Alguém sabe de alguma solução online ? Seria bom ter um comando do tipo "commit" que você poderia executar para mesclar as camadas enquanto a sobreposição ainda está montada.

Algo como isso foi solicitado nas seguintes perguntas, sem resposta:

Os comentários nessas postagens sugerem vários mergerfs e bcache , os quais resolvem casos de uso específicos, mas não o caso de uso genérico, em termos de arquivos, que as sobreposições fornecem.

Meu objetivo é ter um sandbox de sistema de arquivos seguro com snapshots que possa ser usado com qualquer aplicativo Linux em qualquer sistema de arquivos subjacente (onde prático), permitindo reverter alterações ou manualmente confirmá-las quando estiver pronto.

Eu tenho uma suspeita de que o Linux mainline moderno tem todos os recursos necessários para fazer isso embutido, graças a todas as inovações de sandboxing / virtualização dos últimos anos, se eu soubesse como usá-las.

    
por ejm 23.09.2017 / 04:45

3 respostas

1

Eu encontrei o projeto overlayfs-tools que implementa um conjunto útil de ferramentas (diff, merge e vacuum). Isso exige que a sobreposição seja desmontada, portanto, é uma solução somente offline .

É uma boa prova de conceito, mas eu não confiaria nela em seu estado atual, pois tem apenas um único mantenedor e nenhuma atividade por vários anos.

    
por 23.09.2017 / 04:45
1

Outra solução offline que eu criei é usar o rdiffdir para criar um patch com o overlay montado, desmonte e aplique-o. Essa solução requer a etapa intermediária de armazenar o patch em algum lugar nesse meio tempo (no disco ou em um ramdisk / tmpfs).

    
por 23.09.2017 / 04:47
1

Uma tentativa de uma solução on-line , mas não está exatamente lá.

A configuração (por exemplo, em /tmp directory, como root):

LOWER=$HOME mkdir u1 w1 o1 O mount -t overlay overlay -o lowerdir=$LOWER,upperdir=u1,workdir=w1 o1 mount --bind o1 O

Em seguida, você pode trabalhar no diretório O , que é uma sobreposição de $LOWER . Quando você quer fazer o instantâneo:

mkdir u2 w2 o2 mount -t overlay overlay -o lowerdir=o1,upperdir=u2,workdir=w2 o2 (Observe que as sobreposições aninhadas como essa não funcionarão em kernels mais antigos).

Mas, em seguida, quero mudar a montagem de ligação atomicamente em O para apontar para o2 em vez de o1 . Eu não sei como fazer isso além de: %código% ( Não atômico ; há uma janela onde umount O mount --bind o2 O é desmontado).

O ideal é que os processos em execução continuem sendo executados sem saber que o sistema de arquivos subjacente de O foi alterado de O para o1 . Eu não sei se isso é possível, ou se alterar o sistema de arquivos subjacente de o2 como este irá interromper demais os aplicativos abertos. Eu preciso investigar mais.

Em seguida, quando O tiver sido redirecionado para O , podemos remontar o2 somente leitura como precaução e, em seguida, realizar uma mesclagem off-line usando, por exemplo, rdiffdir ou overlayfs-tools.

Por fim, gostaríamos de remontar atomicamente o1 as o2 para que lowerdir=$HOME,upperdir=u2,workdir=w2 , o1 e u1 (todas agora dirs vazias) pudessem ser removidas. Mais uma vez, não sei se isso é possível.

Caso contrário, podemos obter snapshots apenas aninhando sobreposições mais e mais e deixando a sobreposição e dirs superiores para cada montado sem tentar mesclar ou limpar. Mas provavelmente há um limite para o número de sobreposições aninhadas que podem ser montadas. E, em algum momento, ainda precisamos mesclar as camadas se quisermos persistir as alterações.

    
por 23.09.2017 / 10:53