読み取り専用/ etcを書き込み可能にする


11

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コマンドを介して行う必要があります。

回答:


19

squashfs読み取り専用の圧縮ファイルシステムです。いったん作成されると、変更を加えることはできません。そのため、基盤となるブロックデバイスを書き込み可能にしたとしても、それに書き込むことはできません。変更を加えたファイルシステム全体の新しいsquashfsイメージを作成し、そのファイルシステムが格納されているストレージデバイスに書き込む必要があります。これは、ライブシステムから行うには問題があります。

別のオプションは、別のファイルシステムをにマウントすることです/etc。カーネルでサポートされている場合は、ユニオンマウントを介している可能性があります。これは、2つのファイルシステムを1つのファイルシステムとマージし、通常は変更のみをベースの読み取り専用ファイルシステムに記録します。

カーネル構成で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)。


一部の組み込みシステムは/etc、nvramの特定の設定に基づいて、ブート時にファイルをオーバーライドできます。したがって、/etc「マジック」システム変数を設定してファイルを変更するには、そのファイルをnvramにコミットしてから、設定をリロードするか再起動します。ほとんどのホームルーターはそのように機能します。ただし、正確なメカニズムとコマンドはシステム固有です。
佐藤桂2016

パーフェクト!デバイスはオーバーレイマウントをサポートしていませんが、/ etc内のファイルへのカスタムファイルのバインドは非常にうまくいきました!ご協力いただきありがとうございます。
ジョシュアウォルシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.