Como eu uso o OverlayFS?

47

Esta resposta e mensagem de e-mail indica que algo chamado" OverlayFS "está disponível no Ubuntu 11.10 e irá forçar a substituição de aufs no Ubuntu 12.04.

Como eu uso? Onde está sua documentação?

    
por ændrük 02.03.2012 / 16:05

3 respostas

56

Editar: Desde que escrevi esta resposta, algumas coisas mudaram em overlayfs, a saber, a adição de um parâmetro obrigatório workdir , veja totti's responda abaixo para uma descrição detalhada deste novo parâmetro.

Eu finalmente consegui encontrá-lo. Eu encontrei referências a ele no código fonte do kernel, mas por alguma razão ele não aparece na árvore 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á-lo em 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 atual é 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 ser:

  • lowerdir = somedir: lowerdir é o diretório no qual você colocará seu novo sistema de arquivos, se houver duplicatas, elas serão sobrescritas por (na verdade, ocultas em favor de) a versão do upperdir
  • upperdir = somedir: upperdir é o diretório com o qual deseja sobrepor o lowerdir. Se nomes de arquivos duplicados existirem em lowerdir e upperdir, a versão de upperdir terá precedência.
  • opções de montagem padrão. O único que eu vi do código é o ro / rw, mas você pode experimentar.

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. Primeiro você deve montar o sistema de arquivos (no meu caso squashfs) em um diretório arbitrário e usar o 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) pode realmente ser o diretório upperdir =). O diretório terciário é onde você verá os sistemas de arquivos mesclados (ou as árvores de diretório - é flexível).

Exemplo 1, sobrepondo o sistema de arquivos raiz

Eu tenho trabalhado em um disco de boot híbrido Ubuntu onde o sistema Ubuntu existe como filesystem.squashfs e eu tenho arquivos chamados ubuntu.overlay kubuntu.overlay xubuntu.overlay e lubuntu.overlay. Os arquivos .overlay são instalações básicas dos sistemas mencionados com o conteúdo do filesystem.squashfs podado (para economizar espaço). Então modifiquei os scripts init para sobrepor o arquivo .overlay da distro correta (a partir de um parâmetro de boot) usando overlayfs e as opções acima e funciona como um encanto!

Estas são as linhas que usei em meus scripts de inicialização (uma vez que todas as variáveis são traduzidas):

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

Note que o filesystem.squashfs acima é um diretório criado pelo casper, não um arquivo.

Essas três instruções criam um diretório /overlay , montam um sistema de arquivos squashfs no diretório /overlay e usam OverlayFS para mesclar essencialmente o conteúdo de /overlay over / .

Exemplo 2, fusão transparente de dois diretórios

No processo de reconstrução do meu USB ao vivo para cada versão, eu uso o OverlayFS para economizar um monte de 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. Eu irei criar diretórios chamados ubuntu, kubuntu, lubuntu e xubuntu.

Então, eu uso o OverlayFS para fazer os arquivos da base do Ubuntu aparecerem nos diretórios individuais. Eu usaria algo assim:

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

Isso faz com que os arquivos do Ubuntu sejam exibidos na pasta kubuntu. Então, eu posso chroot para a pasta kubuntu e fazer algo como apt-get install kubuntu-desktop . Quaisquer alterações feitas durante a montagem do OverlayFS permanecerão no diretório superior, neste caso a pasta kubuntu. Então, uma vez desmontada a montagem do OverlayFS, os arquivos que realmente existem no Ubuntu base, mas 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, enquanto ainda é capaz de usá-las como se elas existissem fisicamente em cada local.

    
por Chuck R 02.03.2012 / 17:32
17

De link :

  

Superior e Inferior

     

Um sistema de arquivos de sobreposição combina dois sistemas de arquivos - um sistema de arquivos 'superior'   e um sistema de arquivos 'inferior'. Quando um nome existe em ambos os sistemas de arquivos, o   objeto no sistema de arquivos 'superior' é visível enquanto o objeto no   sistema de arquivos 'inferior' está oculto ou, no caso de diretórios,   fundido com o objeto 'superior'.

     

Seria mais correto se referir a um diretório superior e inferior   árvore 'em vez de' sistema de arquivos ', pois é bem possível para ambos   árvores de diretório para estar no mesmo sistema de arquivos e não há   exigência de que a raiz de um sistema de arquivos seja fornecida para   menor.

     

O sistema de arquivos inferior pode ser qualquer sistema de arquivos suportado pelo Linux e não   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   é necessário suportar a criação de atributos estendidos confiáveis *.   deve fornecer d_type válido em respostas readdir, portanto, o NFS não é adequado.

     

Uma sobreposição somente leitura de dois sistemas de arquivos somente leitura pode usar qualquer   tipo de sistema de arquivos.

     

Diretórios

     

Sobreposição envolve principalmente diretórios. Se um dado nome aparece em ambos   sistemas de arquivos superior e inferior e refere-se a um diretório não   então o objeto inferior está oculto - o nome refere-se apenas à parte superior   objeto.

     

Onde os objetos superiores e inferiores são diretórios, um diretório mesclado   é formado.

     

No momento da montagem, os dois diretórios dados 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   como upperdir.

     

Então, sempre que uma pesquisa é solicitada em um diretório mesclado, o   a pesquisa é executada em cada diretório real e o resultado combinado   é armazenado em cache no dentry pertencente ao sistema de arquivos de sobreposição. Se ambos   pesquisas reais encontram diretórios, ambos são armazenados e uma mesclagem   diretório é criado, caso contrário, apenas um é armazenado: o superior se   existe, mais o menor.

     

Apenas as listas de nomes dos diretórios são mescladas. Outro conteúdo   como metadados e atributos estendidos são relatados para o   apenas diretório. Esses atributos do diretório inferior estão ocultos.

    
por totti 23.06.2014 / 12:07
7

Eu estendi esses artikels para incluir um Script para overlayfs que configura um fs de raiz somente leitura.

Espero que ajude.

    
por Floyd42 22.03.2012 / 16:30