Como construir um sistema de arquivos modular comprimido somente leitura

4

Estou projetando uma distribuição Linux e estava brincando com a idéia de criar bits compactados pré-empacotados do sistema de arquivos que são mesclados com um sistema de arquivos somente leitura, e a partir daí empilhado sob um ramdisk via ponto de montagem do UnionFS. Os bits seriam como pacotes em um sentido, exceto que em vez de serem instalados, eles seriam montados como parte do sistema de arquivos na RAM e são lidos diretamente do disco somente leitura (vs. copiado para a memória). ).

Eu queria saber como isso pode ser feito sem criar uma tonelada de pontos de montagem, copiando mais do que o necessário na RAM, ou criando muita sobrecarga, empilhando um monte de minúsculos sistemas de arquivos.

... ou se é possível.

Estou usando UnionFS-FUSE e Cloop .

    
por amphetamachine 15.08.2011 / 13:12

2 respostas

2

Você deve definitivamente tentar aufs , que é descrito como "Um Unionfs reprojetado e reimplementado" . Pelo que tenho visto, muitas distribuições "ao vivo" usam para sistemas de arquivos em memória com várias partes, assim como você parece estar mirando.

    
por 15.08.2011 / 14:32
3

Como sugerido, você pode usar uma combinação de squashfs (para compactação) e AUFS (para empilhar e mesclar camadas do sistema de arquivos juntas). Onde AUFS representa ainda outro sistema de arquivos da União. Mas como isso é implementado? Eu ofereço aqui um script de exemplo simples para implementar o squashfs / aufs ...

Mas primeiro, eu acho que aufs é suportado para o kernel da Debian, mas não para o Ubuntu :-( Assim, desde que sua distro seja apropriada para o Debian, podemos instalar algumas ferramentas básicas, assim

apt-get install squashfs-tools aufs-tools

E agora para os comandos. O comando mksquashfs é usado para compactar diretório (s) em módulos compactados. Dois módulos squashfs são criados aqui e montados para tornar seus arquivos acessíveis. Em seguida, criamos um aufs, com um ramo gravável, e dois branch readonly (ou seja, o squashfs). As opções fornecidas para o comando mount especificam as ramificações (consulte man aufs). Finalmente, criamos um arquivo, para testar se as mudanças no arquivo realmente são gravadas na camada gravável.

Então, espero que isso seja útil.

#!/bin/bash 

# apt-get install squashfs-tools aufs-tools

# The aim:- to create an aufs/squashfs that merges the file contents of /etc and /sbin 

mkdir -p temp/{ro1,ro2,changes-dir,aufs-dir}  &&  cd temp

# compress the files of etc and sbin into squashfs modules
# using /etc and /sbin only becos they are handy
mksquashfs /etc  etc.sqsh -b 65536
mksquashfs /sbin  sbin.sqsh -b 65536

# now mount the squashfs modules to make their files accessible
mount -o ro,loop etc.sqsh ro1
mount -o ro,loop sbin.sqsh ro2

# AUFS is the acronym for Another Union FileSystem
# mount aufs with 3 branches -  a writable branch, and two readonly branchs
mount -t aufs -o br:$PWD/changes-dir=rw,br:$PWD/ro1=ro,br:$PWD/ro2=ro none $PWD/aufs-dir

cd aufs-dir
echo " make some file changes here, to prove the aufs filesystem is writable"
touch rofl
cd -

umount aufs-dir
umount ro1
umount ro2

# and finally we look into changes-dir, to see the stored file changes 
ls changes-dir
    
por 22.08.2011 / 00:47