Torna readonly / etc gravável

10

Estou lidando com um dispositivo incorporado executando o Linux. Os fabricantes deste dispositivo o configuram para que ele carregue o sistema de arquivos raiz como somente leitura.

De / etc / mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

Isso significa que não posso modificar nenhum arquivo em / etc, como adicionar um novo usuário.

Eu tentei remontar o diretório raiz:

mount -o remount,rw -t squashfs /dev/root /

mas acabei de receber um erro

mount: cannot remount block device /dev/root read-write, is write-protected

Eu procurei esse erro e as pessoas estavam dizendo para usar o blockdev. O sistema não tem o blockdev instalado, então eu o compilei e copiei. Então eu corri

blockdev --setrw rootfs

mas novamente recebi um erro:

blockdev: cannot open rootfs: No such file or directory

É possível tornar o / etc gravável se ainda não estiver? Tenho acesso root ao sistema, mas não consigo acessar o sistema de arquivos 'offline', todas as alterações precisam ser feitas por meio de comandos Bash.

    
por Joshua Walsh 29.09.2016 / 09:57

1 resposta

19

squashfs é um sistema de arquivos compactados somente leitura. Ele não tem nenhuma disposição para fazer modificações, uma vez que tenha sido criado. Então você não poderia escrever nele mesmo se o dispositivo de bloco subjacente pudesse ser feito gravável. Você precisaria criar uma nova imagem de squashfs de todo o sistema de arquivos com suas modificações e gravá-la no dispositivo de armazenamento onde o sistema de arquivos está armazenado, o que seria problemático no sistema ativo. / p>

Outra opção é montar um sistema de arquivos diferente em /etc . Poderia ser por meio de uma montagem de união se fosse suportada pelo kernel, que mescla dois sistemas de arquivos normalmente com um sistema de arquivos registrando apenas as alterações em um sistema de arquivos somente leitura base .

Verifique se há suporte para AUFS_FS ou OVERLAY_FS na configuração do kernel.

Por exemplo, para unir um diretório em /tmp (provavelmente gravável, embora possivelmente em tmpfs na memória (portanto, não persistente em uma reinicialização) no seu caso, se o sistema não tiver armazenamento permanente gravável)

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

Em seguida, /etc será gravável e as modificações feitas a ele serão realmente armazenadas em /tmp/etc/upper .

Como alternativa, se for apenas um pequeno arquivo que você deseja modificar, você poderá ligá-los (sim, você pode montar em qualquer arquivo, não apenas diretórios) de uma versão armazenada em um sistema de arquivos gravável:

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

Então /etc/passwd seria gravável. Claro que você também pode fazer isso para todo o /etc . ( cp -a /etc /tmp && mount --bind /tmp/etc /etc ).

    
por 29.09.2016 / 10:24