私は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がまだ書き込み可能でない場合は書き込み可能にすることはできますか?システムへのルートアクセス権がありますが、ファイルシステムへの「オフライン」アクセス権はありません。すべての変更は Bash コマンドで行う必要があります。
答え1
squashfs
読み取り専用圧縮ファイルシステムです。一度作成すると変更できません。したがって、基本ブロックデバイスが書き込み可能であっても、ここに書き込むことはできない。変更に基づいて、ファイルシステム全体の新しいsquashfsイメージを作成する必要があります。燃えるファイルシステムが保存されているストレージデバイスに転送すると、ライブシステムに問題が発生する可能性があります。
別のオプションは別のファイルシステムをインストールすることです/etc
。カーネルがサポートしている場合は、2つのファイルシステムを一緒にマージする統合マウントで実装できます。通常、1つのファイルシステムは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
)。