75889


ext3ファイルシステムを組み込みLinuxで使用しています。  
ジャーナリングモードはorderdモードを使用。  
突然の電源遮断でファイルがディスク(CFを利用)に残らない現象を確認しており、Linuxの仕組みを調査しています。  
私の認識が合っているのかご指摘をお願いします。

  1. C言語でfopen->fwrite->fcloseの手順でファイルに書き込む(この時はまだメモリ上)
  2. Linuxがext3に書き込む(30秒周期、この時はまだext3の一時ファイル？)
  3. ext3がディスクにコミット(5秒周期、これでやっとディスクに残る)

2はLinuxのシステムコールsyncを呼ぶことで即座に行うことが可能。  
しかし3があるので2が終わったあとでも書き込まれないこともある。

このような認識です。  
また、2や3の周期は調整可能でしょうか？可能であれば設定方法も教えて頂けると幸いです。

よろしくお願いします。


CC BY-SA 4.0
2021-05-17T00:23:33.750
75881
2021-05-17T05:40:38.800
2021-05-17T01:36:03.083
23880
23880
question
linux c filesystems
ext3ファイルシステムにおいてディスクに書き込まれるタイミング・周期について


なんだか XY 問題のような気もしなくはない

[ext3とトランザクション処理：Linuxファイルシステム技術解説（4） -
＠IT](https://www.atmarkit.co.jp/ait/articles/0309/17/news002_2.html)

で解説されているけどだいたいそんなもん（カーネル・デーモンバージョンが違うと違う動きをするかもしれない）

ディスク内容を壊したくない性能は落ちてもよいなら journal モードにするだけのような気がする（その手の実書き込みタイミングを気にしなくても済むはず =
XY 問題かもしんまい）

CF ってことは NAND Flash が採用されているわけなんだけど、カード側ハードウエアによってウエアレベリングが実装されていないと PE
サイクル超過で特定セクタだけぶっ壊れる＝製品寿命。 journal
にするってことはメタデータ領域の書き込み回数が激増するので製品寿命に直結するからまずいかもしれない。なので journal / ordered
のどっちが良いかってのはあなたなり上司なりの判断ってことになるっス。


CC BY-SA 4.0
2021-05-17T01:07:07.107
75882
2021-05-17T05:40:38.800
2021-05-17T05:40:38.800
3060
8589
75881
answer


知りたい情報がmetropolis様のコメントで得られました。

### ext3がディスクにコミット について

man の `ext4(5)` にある `Mount options for ext3` には `commit=nrsec: Start a journal
commit every nrsec seconds. The default value is 5 seconds.` と書かれています。

### Linuxがext3に書き込む について

`/proc/sys/vm/dirty_expire_centisecs` になります(`pdflush` スレッドの実行間隔)。今回の件では
`vm.dirty_ratio` と `vm.dirty_background_ratio` を調整する(値を下げる)方が良いかもしれません。


CC BY-SA 4.0
2021-05-17T05:34:12.183
75889
2021-05-17T05:39:45.353
2021-05-17T05:39:45.353
3060
23880
75881
answer