AUFS: Como criar uma ramificação de leitura / gravação de apenas parte de uma árvore de diretórios?

1

AuFS (outro sistema de arquivos de união) nos permite mesclar duas árvores em uma, mesmo quando essas árvores se sobrepõem. Podemos então direcionar as gravações para a árvore mesclada em direção a um dos ramos e ler para outro.

O uso clássico disso é com um sistema de arquivos em flash e um disco RAM, como this (ref 1) para crie um sistema de arquivos raiz somente leitura que não quebre o Linux. Todas as gravações de arquivos vão para o RAM. Após a reinicialização, o sistema se restaura para a configuração de envio.

  • /dir1 = somente leitura
  • /dir2 = ler / escrever
  • /aufs = mesclagem de /dir1 e /dir2

/aufs é então montado novamente com --move para torná-lo / (raiz)

Simplificado, o exemplo em (ref 1) faz isso apenas

mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /

No entanto, eu quero usá-lo de tal forma que o gravável ( /dir2 ) esteja em um disco real, não em um ramdisk. Dessa forma, após uma reinicialização, ele reterá seus dados.

Mas preciso garantir que determinados arquivos no dir2 não sejam preservados e sejam restaurados para seus padrões ( /dir1 ). Isso garante que os futuros carregamentos sempre usem os arquivos enviados. Sem perder dados de usuário e registro.

por exemplo. Arquivos alterados em /etc , /bin , /boot , /usr não devem sobreviver a uma reinicialização.

A página web do AUFS (ref 2) tem poucos exemplos.

Então, para a pergunta: qual é a maneira correta de fazer isso usando o AuFS?

Eu posso pensar no seguinte:

  1. Modifique o primeiro comando de montagem de alguma forma
  2. Adicione mais comandos de montagem usando o aufs add / del antes da segunda montagem
  3. Basta excluir as árvores que não devem ser preservadas de /dir2 no momento da inicialização
  4. Árvore parcial ( etc, bin, boot, lib, etc ) em tmpfs

Ref 1: link
Ref 2: link

    
por Jason Morgan 22.05.2015 / 11:10

1 resposta

1

Opção nº 1 : auFS por si só não oferece suporte a essa opção de montagem, por isso a opção nº 1 está inativa. Você tem que contornar isso.

Opção # 3 : Claro, você pode simplesmente excluir a cada inicialização desses diretórios. Pode ser a maneira mais simples que vejo aqui.

Opção nº 2 : você pode trabalhar com tmpfs . Então, primeiro crie um tmpfs , digamos, de 500 MB:

mount -t tmpfs -o rw,size=500M tmpfs /tmpfs

Temos agora:

  • /dir1 : somente leitura
  • /dir2 : leitura / gravação
  • /tmpfs : leitura / gravação na RAM
  • /aufs : a sobreposição de /dir1 e /dir2

Dentro de /tmpfs , criamos esses dirs que você deseja preservar:

mkdir -p /tmpfs/{etc,usr,boot,bin}

Observe que fazemos isso quando já mesclamos os dois diretórios. Então, quando a árvore de diretórios em /aufs já existe. No entanto, agora fazemos uma montagem aufs por diretório que deve ser preservada:

mount -t aufs -o dirs=/tmpfs/etc=rw:/dir2/etc=ro none /aufs/etc
mount -t aufs -o dirs=/tmpfs/usr=rw:/dir2/usr=ro none /aufs/usr
mount -t aufs -o dirs=/tmpfs/boot=rw:/dir2/boot=ro none /aufs/boot
mount -t aufs -o dirs=/tmpfs/bin=rw:/dir2/bin=ro none /aufs/bin

Agora você tem uma árvore de diretórios em /aufs . Você pode gravar arquivos em todos os lugares, mas quando escreve em /etc , por exemplo, ela será gravada em /tmpfs/etc , que está na RAM e não sobrevive uma reinicialização. Outros arquivos em /home , por exemplo, são gravados em /dir2/home , que é um sistema de arquivos de leitura-gravável e, portanto, sobrevive a uma reinicialização.

Outra solução : também uso o sistema do cliente que usa um sistema de arquivos de sobreposição e preserva os dados do usuário. Aqui está como eu resolvi isso: simplesmente um sistema de arquivos somente leitura e um tmpfs que é montado sobre ele. Mais tarde, quando o usuário faz o login, eu montei seu diretório home a partir de um servidor samba de leitura-gravável. Assim, todos os seus dados de usuário são armazenados e preservados em /home , e o restante não sobrevive a uma reinicialização. No seu caso, você poderia simplesmente colocar /home em outra partição física que seja gravável e montá-la posteriormente em /aufs/home .

    
por 22.05.2015 / 12:00