Montando uma partição em uma 'caixa de areia'

9

Eu estou querendo saber se isso é possível. Quero configurar um sistema Linux que monta /uma máquina Linux remota /na máquina local. No entanto, quero que todas as alterações na máquina local sejam salvas no ram, para que não afetem a máquina remota. Idealmente, as alterações NUNCA seriam gravadas, para que, quando eu reiniciar, monte /novamente a partição original, desconsiderando todas as alterações feitas durante a sessão anterior.

É algo assim possível?

Falmarri
fonte
Não testei nenhuma das respostas de seus colegas, por isso é difícil escolher 1 para selecionar como solução. Então, eu vou apenas
votar em

Respostas:

7

Use unionfs , aufs (ambos são patches externos para o kernel) ou unionfsfuse / funionfs (usa FUSE) e crie union marcando externo / como RO e sistema de arquivos interno (montado como tmpfs / ramfs / partição adicional que é limpa a cada vez).

Alternativamente, você pode usar o sistema de arquivos ou o LVM com capturas instantâneas. Em seguida, as alterações são gravadas, mas você pode limpar os instantâneos a cada inicialização.

Maciej Piechotka
fonte
ou pode-se usar o recurso de propagação do btrfs (apontado em < en.wikipedia.org/wiki/Btrfs#cite_ref-16> ) - para propagar um fs de leitura e gravação com uma base somente leitura. Se os fs de base é btrfs ...
IMZ - Ivan Zakharyaschev
5

Existem várias maneiras de fazer isso. A configuração mais fácil seria usar um sistema de arquivos union, que apresenta uma única visualização de duas árvores de diretório A e B, de modo que todas as alterações sejam salvas em B. No seu caso, A seria um ponto de montagem NFS / Samba / sshfs /…, e B seria um diretório inicialmente vazio em um sistema de arquivos tmpfs.

O Linux não possui um sistema de arquivos de união no kernel, mas existem várias implementações do FUSE : funionfs , Unionfs-fuse .

Gilles 'SO- parar de ser mau'
fonte
3

Se / se encaixar na RAM da máquina local e deixar espaço suficiente para a execução de aplicativos, a idéia básica provavelmente seria inicializar um sistema Linux mínimo na máquina de destino e criar automaticamente um disco virtual ramfs, copiar / remotamente para ele e chroot para este novo /. Se a RAM não for suficiente, você poderá basicamente seguir o mesmo procedimento, mas não usar ramfs, mas uma partição de disco real, cujo conteúdo você precisará limpar antes de copiar. Em vez de limpar e copiar completamente, você também pode usar o rsync com as opções apropriadas.

fschmitt
fonte
1

Você pode usar o Btrfsrecurso Copy-on-Write (CoW).

O que você pode estar procurando é descrito no Btrfs Wiki como dispositivo Seed :

A idéia básica é criar uma partição com dados originais somente leitura, do que "adicionar uma camada adicional em cima dela", que é outra partição gravável (você sempre pode configurá-la na RAM, por exemplo /dev/shm) e montá-la:

btrfstune -S 1 /dev/RO #make it read-only
mount /dev/RO /mnt/temp
btrfs device add /dev/RW /mnt/temp
umount /mnt/temp

e a partir desse momento, toda vez que você monta

mount /dev/RW /mnt/test

as alterações são salvas em / dev / RW, enquanto / dev / RO permanece intocado.

(exemplos são baseados nos do wiki )

Grzegorz Wierzowiecki
fonte
0

Isso pode ser muito fácil com a inicialização do PXE. Estou executando um sistema xbmc ao vivo sobre inicialização pxe tftp nfs. as alterações são gravadas com o compartilhamento COW to NFS.


fonte