我正在处理运行Linux的嵌入式设备.此设备的制造商已将其设置为以只读方式加载根文件系统.
来自/ etc / mtab:
rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0
这意味着我无法修改/ etc中的任何文件,例如添加新用户.
我试过重新安装根目录:
mount -o remount,rw -t squashfs /dev/root /
但我只是得到一个错误
mount: cannot remount block device /dev/root read-write, is write-protected
我查了一下这个错误,人们说要使用blockdev.系统没有安装blockdev,所以我交叉编译并复制它.然后我跑了
blockdev --setrw rootfs
但我又得到一个错误:
blockdev: cannot open rootfs: No such file or directory
是否有可能使/ etc可写如果还没有?我有对系统的root访问权限,但是我无法“脱机”访问文件系统,所有更改都必须通过Bash命令完成.
解决方法:
squashfs是一个只读的压缩文件系统.它没有规定在创建后对其进行修改.因此,即使底层块设备可以写入,也无法写入.您需要使用您的修改创建整个文件系统的新squashfs映像,并将其刻录到存储该文件系统的存储设备,这将从实时系统中产生问题.
另一种选择是在/ etc上安装不同的文件系统.如果内核支持,它可以通过联合安装,通常将两个文件系统合并在一起,一个文件系统仅记录对基本只读文件系统的更改.
检查内核配置中对AUFS_FS或OVERLAY_FS的支持.
例如,在/ tmp中联合安装一个目录(如果系统没有永久可写存储,那么在你的情况下,希望可写在内存中的tmpfs可能是可写的(因此在重启时不会持久))
mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
-o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
overlay /etc
然后/ etc将是可写的,你对它做的修改实际上将存储在/ tmp / etc / upper中.
或者,如果您只想修改几个文件,则可以从存储在可写文件系统中的版本绑定它们(是的,您可以在任何文件上安装,而不仅仅是目录):
cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd
然后/ etc / passwd是可写的.当然你也可以为整个/ etc做这件事. (cp -a / etc / tmp&& mount –bind / tmp / etc / etc).
标签:linux,embedded,readonly,mount
来源: https://codeday.me/bug/20190809/1629396.html