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.