Posso usar uma imagem de disco do sistema de arquivos raiz de leitura-gravação como um upperdir de OverlayFS?

5

É possível unir uma imagem de disco existente que contém um sistema de arquivos raiz à montagem upperdir de overlayfs para acesso de leitura / gravação?

Estou tentando unir algumas imagens de disco antigas em um diretório /tmp/ em uma máquina Ubuntu 16.04 usando scripts pré-existentes (originalmente gravados no Ubuntu 12.04 e portados para 14.04).

Os scripts de automação antigos usavam overlayfs para criar e unir imagens de disco ext2/3 graváveis em cima de squashfs images - algo assim:

cd /tmp
mkdir lower upper union
losetup /dev/loop1 /tmp/image.sfs
losetup /dev/loop2 /tmp/image.ext2
mount -t squashfs -o ro /dev/loop1 /tmp/lower
mount -t ext2 -o rw /dev/loop2 /tmp/upper
mount -t overlayfs -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper overlayfs /tmp/union

Eles foram usados pela última vez em um kernel 3.x (provavelmente pré-3.18), e esse método parece não funcionar mais. Agora, a sobreposição exige uma opção workdir , por exemplo:

mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper,workdir=/tmp/work overlay /tmp/union

P: É possível ajustar os scripts de automação para montar e usar as imagens existentes em um estado gravável em um kernel 4.x? Posso evitar reformulá-los para conter algo como root e work diretórios? Em alguns casos, isso pode prejudicar seu uso em outros lugares.

De acordo com a documentação, o workdir deve ser um diretório vazio no mesmo sistema de arquivos que o upperdir para permitir gravações atômicas. Isso soa como se fosse impossível unir as imagens do sistema de arquivos raiz como leitura-gravação. O workdir teria que existir dentro das imagens (separado do diretório de dados), o que não é possível em uma imagem do sistema de arquivos raiz.

Eu considerei carregar o Ubuntu 14.04 em uma VM para um casal, mas não é uma solução de longo prazo.

Melhor tentativa até agora:

A única solução que evite gravar duplamente os mesmos dados no disco é montar as duas imagens como valores lowerdir , com os diretórios upperdir e workdir instalados em tmpfs mount. Então, posso usar rsync para copiar as alterações do local tmpfs para a imagem ext2/3 montada depois que as gravações automatizadas forem concluídas e a união de sobreposição tiver sido desmontada, por exemplo:

mount -t overlay -o rw,lowerdir=/tmp/upper:/tmp/lower,upperdir=/tmp/tmpfs/root,workdir=/tmp/tmpfs/work overlay /tmp/union

...perform automated reads/writes...

umount /tmp/union

...rsync contents from /tmp/tmpfs/root to /tmp/upper...

É estritamente limitado à RAM disponível, e é um truque feio para adicionar a todos os scripts de automação.

    
por codewithmichael 10.09.2016 / 03:28

1 resposta

0

Crie um nível adicional de aninhamento no arquivo de imagem:

mkdir   /tmp/upper/upper
mkdir   /tmp/upper/work
mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper/upper,workdir=/tmp/upper/work overlay /tmp/union
    
por 03.05.2018 / 17:34