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
É 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.
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