web-dev-qa-db-ja.com

Raspberry Pi:ファイルシステムはファイルを書き込みますが、再起動後に古いデータが戻ります

さて、これはそれぞれの8GB SDメモリカードを搭載した2つのRaspberry Piシステムで発生する本当に奇妙な問題です。

簡単な例:ファイルをディスクに書き込むと、ファイルが書き込まれたように見えます。
ファイルvim test.datを編集し、テキストを入力して保存できます。
llはファイルをリストします。
catはファイルの内容を表示します。再起動後、ファイルは削除されます。

私が考えているのは、ubuntuがファイルをubuntuのディスクキャッシュに書き込むが、ファイルをディスクにコミットしないということです。ユーザースペースプログラムはファイルの読み取りと使用を続けることができますが、キャッシュはディレクトリリストとファイルの内容をディスクからではなく、ラムから返します。再起動後、ディスクには新しいデータがないためです。

もう一つの例:

dd if=/dev/zero of=testfile.dat bs=1M count=1000

1GBサイズのファイルを作成します。 llはファイルをリストします。 df -hは、ディスク上のデータでさらに1GBが使用されたことを示します。しかし、リブート後、ファイルはなくなり、df -hは古い使用可能なスペースを表示します。

おもしろい事実:SDカードの最大書き込み速度は9MB/secであることがわかっています。これは、ラップトップを使用してディスクイメージをddしたときに得られるものです。しかし、ラズベリーのSDカードでこのddコマンドを実行すると、ddは書き込み速度を110MB /秒と報告します。不可能な。これが、オペレーティングシステムがRAMに書き込みを行っているだけで、ディスクにコミットしていないと思う理由です。

3番目の例:interfacesという名前のファイルを編集し、rootとして/ etc/network/interfacesファイルにコピーして、デバイスのIPを変更するスクリプトがあります。その後、スクリプトが再起動します。

#!/bin/bash
cp /var/project/scripts/interfaces /etc/network/interfaces
/sbin/reboot

再起動後、デバイスは古いIPアドレスのままです...奇妙な...

4番目の例:ラズベリーはperconaデータベースを実行します。 186エントリを含むテーブルがあります。テーブルを切り捨てます。 phpコードとwebminを使用してデータを確認します-テーブルは本来のように空です。再起動後、データは元に戻ります。本当に... 186エントリ。これは私を驚かせる。

私は完全に間違っている可能性があります。何か案は?

私はこのubuntuのインストールに取り組んでおり、主要なソフトウェアのアップデートごとにディスクイメージのクローンを作成して定期的なバックアップを作成しています。私は奇妙なことに気づいていました(スクリプトの実行後にIPが変更されないなど)が、今日までこの問題を認識していませんでした。それはポイントまでうまく働いていたに違いありません、それから何かがpiでubuntuでうまくいきませんでした...

質問:ubuntuにSDカードへの書き込みを行わせるにはどうすればよいですか?

3
Francois Stark

私が役立つと思われたのは、syncコマンドを使用していたことです:

sync

ヘルプから:

変更されたブロックをディスクに強制し、スーパーブロックを更新します。

つまり、ファイルシステムのバッファーをフラッシュします。しかし、私とは違って適切なSudo rebootを実行すると、これは問題にならず、同期がうまくいかないことがあります。

Raspbian wheezyインストールでも同様の問題が発生していました。読み取り専用のファイルシステムを含むext4パーティションがあります。また、いくつかの構成ファイルを含むFAT32の小さな読み取り/書き込みパーティション。構成ファイルを変更し、電源プラグを抜いて再起動すると、変更は持続しませんでした。 (アドバイス:読み取り専用のPiがなければ、電源プラグを抜くことは賢明なことではありません)

2
Sebastian