組み込み設定に読み取り専用ルートファイルシステムを使用するのは良い考えですか?

組み込み設定に読み取り専用ルートファイルシステムを使用するのは良い考えですか?

私の使命は、組み込みデバイスでLinuxをオペレーティングシステムとして実行することです。

ターゲットには、x86プロセッサと8GB CompactFlashストレージデバイスがあります。

私はカーネルイメージとクロスコンパイルツールを生成するためにbuildrootを正常に使用しました。 CFデバイスをカーネルイメージとブートsyslinux構成、ext3ファイルシステムを含む小さなFATパーティションに分割し、そこにbuildrootによって生成されたルートファイルシステムを抽出しました。

syslinuxビルドルートファイルシステムを含むCF ext3パーティションにルートディレクトリを設定すると、システムは正常に起動します。

私の質問は、停電後にデバイスが正常に起動することが重要であるため、即時で頻繁な停電が発生した場合の堅牢性の必要性に焦点を当てています。ルートファイルシステムを読み取り専用でマウントすることがデータの整合性を保証する1つの方法であることがわかりました。続行するのが賢明な方法ですか?

また、同じ目的を達成するためにルートファイルシステムをRAMにロードする可能性についても読みましたが、まだこれを行う方法がわかりません。

これを達成するための好ましい方法はありますか?それでは、私が前に進むための最良の方法は何ですか?

ベストアンサー1

新しい回答(2015-03-22)

メモ:この回答は以前よりも簡単ですが、より安全ではありません。ファイルを保存できるので、最初の答えはより強力です。読み取り専用渡すファイルシステムのマウントオプション 今後許可フラグ。だから許可なくファイルに書き込むことはまったく機能しません。 )

うん、降りてダーバン、パッケージがあります:FS保護ホームページ)。

aufs(デフォルトでは他のunionfsツールを使用することもできます)を使用して許可します。ライブセッションの変更ただし、デフォルトではRAMにあるため、再起動時にすべての内容が消去されます。

次のコマンドを実行して簡単にインストールできます。

apt-get install fsprotect

完了したら、オンラインマニュアルで次の操作を行います。

以来:

  • /boot/grub/menu.lstまたは、編集して/etc/default/grub2カーネルパラメータに/etc/lilo.conf""を追加します。fsprotect=1G
  • 必要に応じて1Gを修正してください。
  • 変更を適用する(例:run update-grub
  • /etc/default/fsprotect保護したい場合/
  • 再起動

grubブートローダをパスワードで保護したり、変更を無効にしたりすることもできます。

ここで特定のファイルが変更されないように保護されている場合(例:

chmod ugo-w myfile

例を使用しvi myfileてコマンドを使用して作成しようとすると、これが機能し、:w!内容が myfile変更されます。未修正を検索するには、再起動できますmyfile

以下の最初の解決策では不可能です。

前(最初)の答え:

はい、これは強力なソリューションであり、うまく動作します!

r/o を有効にする

いくつかのディレクトリをインストールする必要があります。読み書き、おそらく、/varこれは次のように行うことができます。/etc/homeオブまたは同盟。私はこれが好きです他の方法、使用、/dev/shmおよびmount --bind

cp -a /var /dev/shm/
mount --bind /dev/shm/var /var

static-var/ varにシンボリックリンクを作成する代わりに、以前は通常の操作中に変更する必要がなかったすべてのディレクトリを次のディレクトリに移動できました。

mkdir /static-var
mkdir /static-var/cache
mkdir /static-var/lib
mv /var/lib/dpkg /static-var/lib/dpkg
ln -s /static-var/lib/dpkg /var/lib/dpkg
mv /var/cache/apt /static-var/cache/apt
ln -s /static-var/cache/apt /var/cache/apt
... # an so on

したがって、roから再マウントすると、ほとんどのファイルがRAMに移動され、シンボリックリンクのみがコピーされるため、コピーが大量のスペースを占有しません/var/dev/shm/static-var

これを詳細に実行するより良い方法は、フルパワーサイクル、一日中作業を実行し、次のコマンドを詳細に実行することです。

find / -type f -o -type f -mtime -1

したがって、読み取り/書き込みパーティションにどのファイルが必要かを確認できます。

記録

このホストには書き込み可能な静的メモリがないため、履歴やその他のログを保存するにはリモートサーバーを設定する必要がありますsyslog

echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'

これにより、何らかの理由でシステムがクラッシュした場合に以前の内容がすべて記録されます。

アップグレード中

使用中のアイテムを実行するときにシステムが使用中mount --bind(ダウンタイムを減らすために実行せず)、これらのアップグレードを実行するには、init 1きれいなシステムを再構築する方が簡単です。、アップグレード可能:

「/」を再度マウントした後読み書きモデル:

mount -o remount,rw /

for mpnt in /{,proc,sys,dev{,/pts}};do
    mount --bind $mnpt /$mnt$mpnt;
    done

chroot /mnt

apt-get update && apt-get dist-upgrade

exit

umount /mnt/{dev{/pts,},proc,sys,}

sync
mount -o remount,ro /

今:

shutdown -r now

おすすめ記事