
AuFS (outro sistema de arquivos união) nos permite mesclar duas árvores em uma, mesmo quando essas árvores se sobrepõem. Podemos então direcionar as gravações na árvore mesclada para um dos ramos e as leituras para outro.
O uso clássico disso é com um sistema de arquivos flash e um disco RAM, comoesse(ref 1) para criar um sistema de arquivos raiz somente leitura que não interrompa o Linux. Todas as gravações de arquivos vão para a memória RAM. Após uma reinicialização, o sistema restaura a configuração original.
/dir1
= somente leitura/dir2
= ler/escrever/aufs
= fusão de/dir1
e/dir2
/aufs
é então remontado para --move
torná-lo /
(root)
Simplificado, o exemplo em (ref 1) apenas faz isso
mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /
No entanto, quero usá-lo de forma que o gravável ( /dir2
) esteja em um disco real, não em um disco RAM. Dessa forma, após uma reinicialização, ele reterá seus dados.
Mas preciso garantir que determinados arquivos em dir2 não sejam preservados e restaurados para seus /dir1
padrões (). Isso garante que inicializações futuras 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.
OPágina da AUFS(ref 2) tem muito poucos exemplos.
Então vamos à pergunta: Qual é a maneira correta de fazer isso usando AuFS?
Posso pensar no seguinte:
- Modifique o primeiro comando de montagem de alguma forma
- Adicione mais comandos de montagem usando aufs add/del antes da segunda montagem
- Simplesmente exclua as árvores que não devem ser preservadas
/dir2
no momento da inicialização - Árvore parcial (
etc, bin, boot, lib, etc
) emtmpfs
Referência 1:https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
Referência 2:http://aufs.sourceforge.net/aufs.html
Responder1
Opção 1: auFS
por si só não suporta essa opção de montagem, então a opção nº 1 está inoperante. Você tem que contornar isso.
Opção nº 3: Claro, você pode simplesmente excluir esses diretórios a cada inicialização. Pode ser a maneira mais simples que vejo aqui.
Opção 2: Você poderia trabalhar com um arquivo tmpfs
. Então primeiro crie um arquivo tmpfs
, digamos de 500 MB:
mount -t tmpfs -o rw,size=500M tmpfs /tmpfs
Temos agora:
/dir1
: somente leitura/dir2
: ler escrever/tmpfs
: leitura/gravação na RAM/aufs
: a sobreposição de/dir1
e/dir2
Dentro /tmpfs
, criamos os diretórios que você deseja preservar:
mkdir -p /tmpfs/{etc,usr,boot,bin}
Observe, fazemos isso quando já mesclamos os dois diretórios. Então, quando a árvore de diretórios /aufs
já existir. Porém, 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 /aufs
onde pode gravar arquivos em qualquer lugar, mas quando você escreve, /etc
por exemplo, ele será gravado /tmpfs/etc
, que está na RAM, portanto, não sobrevive a uma reinicialização. Outros arquivos, /home
por exemplo, são gravados em /dir2/home
, que é um sistema de arquivos gravável e de leitura e, portanto, sobrevive a uma reinicialização.
Outra solução: Eu também uso um sistema cliente que usa um sistema de arquivos de sobreposição e dados de usuário preservados. Aqui está como eu resolvi isso: Simplesmente um sistema de arquivos somente leitura e um tmpfs montado sobre ele. Mais tarde, quando o usuário fizer login, monto seu diretório inicial a partir de um servidor samba com leitura e gravação. Portanto, todos os dados do usuário são armazenados e preservados /home
e o restante não sobrevive a uma reinicialização. No seu caso, você pode simplesmente colocar /home
em outra partição física que seja legível e montá-la posteriormente em /aufs/home
.