Esta resposta e mensagem de email indicam que algo chamado "OverlayFS" está disponível no Ubuntu 11.10 e substituirá forçosamente os aufs no Ubuntu 12.04.
Como eu uso isso? Onde está a documentação?
Esta resposta e mensagem de email indicam que algo chamado "OverlayFS" está disponível no Ubuntu 11.10 e substituirá forçosamente os aufs no Ubuntu 12.04.
Como eu uso isso? Onde está a documentação?
Respostas:
Edit: Desde que escrevemos esta resposta, algumas coisas mudaram em overlayfs, a saber, a adição de um parâmetro necessário workdir
, consulte a resposta de totti abaixo para obter uma descrição detalhada desse novo parâmetro.
Eu finalmente consegui encontrar. Encontrei referências a ele no código-fonte do kernel, mas por algum motivo ele não aparece na árvore do git no kernel.org. Mas! Se você puxar a fonte do kernel do Ubuntu assim: apt-get source linux-image-3.0.0-16-generic
você pode encontrá-la linux-3.0.0/Documentation/overlayfs.txt
. Também está disponível no pacote linux-doc em /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Como a documentação de ajuda real é mais "como funciona" em vez de "como montar com ela", aqui está um breve resumo (há um exemplo na documentação do kernel):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Onde [opções de montagem] podem estar:
Uma coisa que me confundiu no começo, então eu provavelmente deveria esclarecer, é que montar um overlayfs na verdade não monta um sistema de arquivos. Eu estava tentando montar um sistema de arquivos squashfs usando uma montagem overlayfs, mas não é assim que funciona. Você deve primeiro montar o sistema de arquivos (no meu caso, squashfs) em um diretório arbitrário e depois usar overlayfs para mesclar o ponto de montagem (um diretório) e outro diretório em um diretório terciário (o ponto de montagem overlayfs) (editar: este diretório "terciário" pode realmente ser o diretório upperdir =). O diretório terciário é onde você verá os sistemas de arquivos mesclados (ou árvores de diretórios - é flexível).
Estou trabalhando em um disco de inicialização híbrido do Ubuntu, onde o sistema Ubuntu básico existe como filesystem.squashfs e tenho arquivos chamados ubuntu.overlay kubuntu.overlay xubuntu.overlay e lubuntu.overlay. Os arquivos .overlay são instalações básicas dos referidos sistemas com o conteúdo de filesystem.squashfs podado (para economizar espaço). Então eu modifiquei os scripts init para sobrepor o arquivo .overlay da distribuição correta (a partir de um parâmetro de inicialização) usando overlayfs e as opções acima e funciona como um encanto!
Estas são as linhas que eu usei nos meus scripts init (depois que todas as variáveis forem traduzidas):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Observe que o filesystem.squashfs acima é um diretório criado pelo casper, não um arquivo.
Essas três instruções criam um /overlay
diretório, montam um sistema de arquivos squashfs no /overlay
diretório e, em seguida, usam OverlayFS para mesclar essencialmente o conteúdo de /overlay
over /
.
No processo de reconstrução do meu USB ativo para cada versão, uso o OverlayFS para economizar muito tempo. Começo com um diretório chamado ubuntu-base, que contém o conteúdo da imagem do ubuntu-core, que é a instalação mais básica. Vou então criar diretórios chamados ubuntu, kubuntu, lubuntu e xubuntu.
Então, eu uso o OverlayFS para fazer com que os arquivos da base do ubuntu apareçam nos diretórios individuais. Eu usaria algo como isto:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Isso faz com que os arquivos do ubuntu-base apareçam na pasta kubuntu. Então, posso chroot
ir para a pasta do kubuntu e fazer algo parecido apt-get install kubuntu-desktop
. Quaisquer alterações feitas durante a montagem do OverlayFS permanecerão no diretório superior, neste caso, na pasta do kubuntu. Então, uma vez desmontado, o OverlayFS monta os arquivos que realmente existem no ubuntu-base, mas que são "espelhados" na pasta do kubuntu desaparecem, a menos que tenham sido alterados. Isso me impede de ter várias cópias dos arquivos no ubuntu-base e ainda poder usá-las como se elas existissem fisicamente em cada local.
overlay
não comoverlayfs
Em https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Alto e baixo
Um sistema de arquivos de sobreposição combina dois sistemas de arquivos - um sistema de arquivos 'superior' e um sistema de arquivos 'inferior'. Quando existe um nome nos dois sistemas de arquivos, o objeto no sistema de arquivos 'superior' fica visível enquanto o objeto no sistema de arquivos 'inferior' está oculto ou, no caso de diretórios, é mesclado com o objeto 'superior'.
Seria mais correto se referir a uma 'árvore de diretórios' superior e inferior do que a um 'sistema de arquivos', pois é possível que ambas as árvores de diretórios estejam no mesmo sistema de arquivos e não é necessário que a raiz de um sistema de arquivos seja fornecida para superior ou inferior.
O sistema de arquivos inferior pode ser qualquer sistema de arquivos suportado pelo Linux e não precisa ser gravável. O sistema de arquivos inferior pode até ser outro overlayfs. O sistema de arquivos superior normalmente será gravável e, se for, deve suportar a criação de atributos estendidos confiáveis. * E deve fornecer d_type válido nas respostas readdir, para que o NFS não seja adequado.
Uma sobreposição somente leitura de dois sistemas de arquivos somente leitura pode usar qualquer tipo de sistema de arquivos.
Diretórios
A sobreposição envolve principalmente diretórios. Se um determinado nome aparecer nos sistemas de arquivos superior e inferior e se referir a um não diretório em qualquer um deles, o objeto inferior ficará oculto - o nome se refere apenas ao objeto superior.
Onde os objetos superior e inferior são diretórios, um diretório mesclado é formado.
No momento da montagem, os dois diretórios fornecidos como opções de montagem "lowerdir" e "upperdir" são combinados em um diretório mesclado:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
O "workdir" precisa ser um diretório vazio no mesmo sistema de arquivos que o upperdir.
Então, sempre que uma pesquisa é solicitada em um diretório mesclado, a pesquisa é realizada em cada diretório real e o resultado combinado é armazenado em cache no dentry pertencente ao sistema de arquivos de sobreposição. Se as duas pesquisas reais encontrarem diretórios, ambos serão armazenados e um diretório mesclado será criado; caso contrário, apenas um será armazenado: o superior, se existir, e o inferior.
Somente as listas de nomes dos diretórios são mescladas. Outros conteúdos, como metadados e atributos estendidos, são relatados apenas para o diretório superior. Esses atributos do diretório inferior estão ocultos.
Estendi esses artigos para incluir um script para overlayfs que configura um fs raiz somente leitura.
Espero que ajude.
Exemplo mínimo executável
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
Saída do primeiro ls
com o suporte:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Saída do segundo ls
sem a montagem:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Interpretação:
work/
diretório) com o qual não devemos nos preocuparExemplo adaptado de: Exemplo de uso de OverlayFS
Aqui está um exemplo mais complexo com várias camadas inferiores: Overlayfs são recarregados com várias camadas (migração para longe de aufs)
Testado no Ubuntu 18.04, kernel do Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Além disso, eu não tenho noção. Estou mexendo com ele em um sistema ativo, mas ainda não consegui fazê-lo funcionar. Eu gostaria de descobrir exatamente o que "upperdir" e "lowerdir" significam. Não encontrei nada.