Montando um sistema de arquivos squashfs em leitura e gravação

45

Eu tenho uma instalação do Clonezilla em um pendrive e gostaria de fazer algumas modificações no sistema operacional. Especificamente, gostaria de inserir um script executável /usr/sbinpara facilitar a execução do meu próprio comando de backup para tornar os backups menos dolorosos.

O sistema de arquivos principal está localizado /live/filesystem.squashfsna partição USB FAT-32.

Como montar esta leitura / gravação na minha máquina Linux para poder adicionar / remover / alterar arquivos? Estou executando um derivado do Ubuntu 12.04.

Naftuli Kay
fonte

Respostas:

38

Como root, copie filesystem.squashfspara algum diretório vazio, por exemplo:

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

Descompacte o arquivo e mova-o para outro lugar (para que você ainda o tenha como backup):

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

Entre squashfs-root, adicione / modifique conforme seu gosto e recrie filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

copie o recém-criado filesystem.squashfssobre o existente na sua unidade USB, por exemplo:

cp filesystem.squashfs /mnt/clonezilla/live/

depois reinicie e use seu LIVE USB.

Nota: os comandos acima fazem parte squashfs-tools.

don_crissti
fonte
Isso funciona muito bem, mas, infelizmente, recebo uma mensagem para todos os diretórios raiz informando Source directory entry bin already used! - trying bin_1. O suficiente certeza, no meu sistema de arquivos de saída, eu tenho um /bine um /bin_1, em vez de fundir a pasta. Alguma ideia? Se eu correr com -noappend,o sistema de arquivos simplesmente não funcionará.
Naftuli Kay
1
@TKKocheran - Eu não estou recebendo nenhum desses erros aqui depois de adicionar um script personalizado /usr/bine reembalar mksquashfs. A unidade USB é inicializada corretamente e eu posso usar meu script na sessão ao vivo. Verifique se você não possui mais o antigo filesystem.squashfsno mesmo diretório que o modificado squashfs-rootantes de executar mksquashfs.
23413 Don_crissti
@Naftuli: Você parece ter pulado a etapa "mv ... backup /".
Joachim Wagner
Este trabalho não está na raiz (falsa)? Apenas a partir extrair eu recebo o errocreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf
@ Wilf - você não pode criar arquivos de dispositivo ( squashfs-root/dev/*) como usuário comum, precisa de privilégios de root.
don_crissti
5

Se o seu sistema suportar algum sistema de arquivos uion, como aufs ou overlayfs , você não precisará extrair o arquivo squashfs original.

Por exemplo, o overlayfs é usado (uma opção do kernel para habilitá-lo): Você pode montar seu arquivo squashfs.file em / fm ou em outro lugar primeiro. Prepare um sistema de arquivos gravável com 2 diretórios, digamos / to e / temp . prepare outro diretório / fin gravável para os resultados mesclados. Monte-os juntos como um overlayfs no seu sistema ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

Agora você pode adicionar / modificar arquivos em / fin . Quando tudo estiver pronto, você pode mksquashfs / fin para um novo arquivo squashfs,

mksquashfs /fin newfile; umount /fin

, limpe / desmonte todos os outros diretórios usados ​​como desejar.

Os squashfs e alguns unionfs são comumente usados ​​para um live-cd .

Zhi-Ming Chen
fonte
Se você excluir um arquivo do montado / aleta, ele será removido dos squashfs finais que você criar?
localhost
2

Aqui , encontrei outra resposta:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Do utilizador
fonte
7
O comando acima montará somente leitura, o que é melhor do que não montá-lo; infelizmente, não é uma resposta completa para a pergunta em questão.
harperville
Concordo que não é uma resposta completa. Juntamente com unix.stackexchange.com/a/377269/27328, você pode criar uma resposta na qual não é necessário descompactar o sistema de arquivos para modificá-lo - menos espaço, menos tempo.
Utilizador
Método mais simples, trabalhado no CentOS 7
Seff 11/04
0

Usar overlayfs como mostrado é a melhor maneira de ter pseudo "squashfs rw"; No entanto, é necessário executar no kernel> 4.x (ou no ubuntu> 14.x confiável).

Uma solução alternativa quando se está sentado em um CD ao vivo antigo sem overlayfs / aufs / unionfs é usar os recursos do squashfs'own

importante:

 without unsquashfs, so this can be done on low storage system

exemplo:

modifique o diretório "usr" do squashfs

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

a linha 3 cria temporariamente squashfsfile, excluindo olddir_usr

a linha 4 anexa modificado-usr-dir em new_squashfsfile

veja aqui anexar squashfs Anexar ao subdiretório dentro do arquivo squashfs

user3477652
fonte