Estou lidando com um dispositivo embarcado rodando Linux. Os fabricantes deste dispositivo o configuraram para carregar o sistema de arquivos raiz como somente leitura.
Em /etc/mtab:
rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0
Isso significa que não consigo modificar nenhum arquivo em/etc, como para 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
Procurei esse erro e as pessoas estavam dizendo para usar o blockdev. O sistema não tem o blockdev instalado, então eu 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 /etc gravável se ainda não o for? Tenho acesso root ao sistema, mas não consigo acessar o sistema de arquivos 'offline', todas as alterações devem ser feitas através de comandos Bash.
Responder1
squashfs
é um sistema de arquivos compactado somente leitura. Não há nenhuma disposição para fazer modificações nele depois de criado. Portanto, você não poderia escrever nele, mesmo que o dispositivo de bloco subjacente pudesse ser gravável. Você precisaria criar uma nova imagem squashfs de todo o sistema de arquivos com suas modificações equeimarpara o dispositivo de armazenamento onde o sistema de arquivos está armazenado, o que seria problemático de fazer no sistema ativo.
Outra opção é montar um sistema de arquivos diferente no /etc
. Poderia ser através de uma montagem união se suportada pelo kernel, que mescla dois sistemas de arquivos normalmente com um sistema de arquivos gravando apenas as alterações em umbasesistema de arquivos somente leitura.
Verifique o suporte para AUFS_FS ou OVERLAY_FS na configuração do kernel.
Por exemplo, para montar um diretório em união /tmp
(esperançosamente gravável, embora possivelmente tmpfs
na memória (portanto, não persistente durante uma reinicialização) no seu caso, se o sistema não tiver armazenamento gravável permanente)
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 nele serão armazenadas no arquivo /tmp/etc/upper
.
Alternativamente, se houver apenas alguns arquivos que você deseja modificar, você pode montá-los por ligação (sim, você pode montar em qualquer arquivo, não apenas em diretórios) a partir de uma versão armazenada em sistemas de arquivos graváveis:
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 por completo /etc
. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc
).