Armadilloフォーラム

SDの不整合を確認したい

n.yamamoto

2016年4月5日 9時43分

Yamamotoです。

SDカードを使用して、シャットダウン時に使用中のRAM-DiskファイルをSDにバックアップして、再起動時に戻して前回状態から実行するようにしています。
また、FTP受け渡し用に大きなファイルになる可能性のあるものもSD経由で受け渡すようにしています。(注意:サイズを小さくするためにtar圧縮もしています)

で問題なのですが、数日運転後にシャットダウンして再起動すると、ファイル不整合でSDからRAM-Diskへ戻せないファイルが発生します。(ほとんどが、実行状態を書き込んでいるログファイルなのですが)

以前発生した時にsync等を入れて同期を取ってからシャットダウンするようにして、ほぼ発生していなかったのですが、別の処理用に改造してから再発し始めました。

推測として、RAM-DiskのバックアップをSDに行った際に完全同期が取れていない状態でリセットしてSD内のファイルに不整合があるのではないかと思っており、シャットダウン前にSDが既に異常になっていないか確認してからシャットダウンして確認したと思っているのですが、験しにfsckでチェックしようとしたところ下記のようにスーパーブロックが無いと言われチェックできません。

何か方法は有りますでしょうか?
ちなみにSDは購入時のFAT32フォーマットのままです。

----------------------------------------------------------------
[root@armadillo460-0 (ttyp0) /home/guest]# fsck -r /dev/mmcblk0p1
fsck 1.25 (20-Sep-2001)
e2fsck 1.25 (20-Sep-2001)
/dev/mmcblk0p1 is mounted.

WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? yes

Couldn't find ext2 superblock, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/mmcblk0p1

The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193

----------------------------------------------------------------

コメント

KES)小西です。

fsck.ext2が動いているので、EXT2でチェックされていると思います。
対象のSDはFAT32なので、fsck.vfatでチェックされたらいかがでしょうか?

Yamamotoです。

コメント有難うございます。
教えていただいた内容で確認しました。
これで正常と思われますが、合ってますでしょうか。

--------------------------------------------------------------
[root@armadillo460-0 (ttyp0) /usr/bin/zm]# fsck.vfat /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/mmcblk0p1: 687 files, 3536/59992 clusters
--------------------------------------------------------------

Yamamotoです。

追加で教えていただきたいのですが。

SDへのバックアップ時に各キャッシュを考慮して同期を完了しないといけないとの記載が色々なところで見受けられます。
Armadilloでも確実なのはumountだと記載がありましたが、umountで正常に返ってくれば確実に同期が完了しており、ファイルの不整合は発生しないはずなのでしょうか?

H/W担当者に聞くと、確実な時間(数分)まつか、バックアップファイルを読み込みモードでオープンして読み込んでクローズしていくかしないと確実では無いといわれたのですが。

如何でしょうか?

株式会社ACCESS 三原と申します。

ニュースグループ comp.os.linux.development.apps では "It will call sync then detach the filesystem from the OS in a safe way so there's no lost data. ... Umount is definitive." と記されています。
https://groups.google.com/forum/#!topic/comp.os.linux.development.apps/…

あくまで "はず" なのですが、実際にトラブルが起きましたでしょうか?

Yamamotoです。

syncを追加しただけで、umountを入れていなかったので、umountすればOKなのではと思っていたのですが、H/W担当から前コメントのような意見をもらったので、気になりご存知の方が居ないかと思い投稿しました。

リンクから見ましたが英文で、得意ではないので翻訳文で見たのですがumout後ではこれまで異常はないと言う様な内容と思われました。
絶対ではないが、ほぼ安全かと思われます内容と理解しました。

at_daisuke.sasaki

2016年4月5日 11時15分

佐々木大輔です

H/W担当の方のコメントはおそらく、SDのバス上の通信が完了しても、
実際にNAND Flashへの書き込みが完了していない可能性があるから、
時間を置いたり それなりの処理をする必要があるという事ではないかと推測します。

A460のSDドライバは、書き込みコマンドの終了時に、
SDカードの内部ステータスのチェックをしており、NAND Flashへの書き込みが完了するまで
書き込み終了と判断しません。

最近別件で、umountを行うと(見たのはシャットダウン時に実行されるumountなのですが)、
この書き込みの完全な終了までは待たされている事をSD Analyzerでも確認しています。

現在おきている問題は、umountを実施しておく事で解決すると思います。
試してみてください。

Yamamotoです。

もう一点確認がありました。

同じような装置で開発環境を変えて使用しています。
でfsck.vfatをそれぞれで試したのですが、以下のように結果が変わっており、ドライバーも変わっているのでしょうか?

また、装置1側ではfsck.vfatも正常に実行してくれていないように見えます。

現在、SD不良状態が発生しやすいのが装置2側です。(SDへのアクセス条件が違うので、一概に発生頻度は比較できませんが)

装置1:結果
atmark-dist v1.28.2 (AtmarkTechno/Armadillo-460)
Linux 2.6.26-at15 [armv5tejl arch]

armadillo420-0 login: guest
Password:
[guest@armadillo420-0 (ttyp0) ~]$ su
Password:
[root@armadillo420-0 (ttyp0) /home/guest]# fsck.vfat /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
Seek to -273678848:Invalid argument

装置2:結果
atmark-dist v1.35.0 (AtmarkTechno/Armadillo-460)
Linux 2.6.26-at20 [armv5tejl arch]

armadillo460-0 login: guest
Password:
[guest@armadillo460-0 (ttyp0) ~]$ su
Password:
[root@armadillo460-0 (ttyp0) /home/guest]# fsck.vfat /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/mmcblk0p1: 267 files, 620/120752 clusters

株式会社ACCESS 三原と申します。

極めて基礎的なことですが、SD カードはマウント解除された(最初からマウントされていない、あるいは umount でマウント解除された)状態ですか?

fsck.vfat (dosfsck) はマウントされた FAT パーティションには使用できません。

株式会社ACCESS 三原と申します。

> 装置1:結果
> atmark-dist v1.28.2 (AtmarkTechno/Armadillo-460)
> Linux 2.6.26-at15 [armv5tejl arch]
>
> armadillo420-0 login: guest
> Password:
> [guest@armadillo420-0 (ttyp0) ~]$ su
> Password:
> [root@armadillo420-0 (ttyp0) /home/guest]# fsck.vfat /dev/mmcblk0p1
> dosfsck 2.11, 12 Mar 2005, FAT32, LFN
> Seek to -273678848:Invalid argument

いま気づきましたが、atmark-dist は Armadillo-460 向けとのことですが、プロンプトに "armadillo420-0" と表示されていますよね。

装置1 のボードは A460 と A420 のどちらですか? Linux カーネル・ユーザランドはボードに対応したものですか?

株式会社ACCESS 三原と申します。

> 株式会社ACCESS 三原と申します。

> 装置1 のボードは A460 と A420 のどちらですか? Linux カーネル・ユーザランドはボードに対応したものですか?

失礼しました。A460 と A420 は SoC が共通(NXP i.MX25)なので、ドライバが共通なのですか。

Yamamotoです。

情報不足でした。済みません。
使用しているのは460です。

Yamamotoです。

頂いたコメントを全てはみていませんでした。

指摘事項でLinux カーネル・ユーザランドが420になっているとの事ですが、初期に別の担当者構築(評価用で当初420を使用していたかも)してそのまま使用してしまったために420のままで、作成したimagesは460で使用しています。

何か大きな問題がありますでしょうか?

指摘されるまで気づきませんでした。

株式会社ACCESS 三原と申します。

SoC が同じ(NXP i.MX25)なので SD カードドライバが同じだと思われますから問題ないかもしれませんが、できる限りのことを試すという方針なら 460 の Linux カーネルにして万全を期したほうがいいです。

それと、SD カードがマウントされた状態で fsck.vfat (dosfsck) を動かしていないかという点についてはどうですか?

Yamamotoです。

再度、装置1側でumountしてからfsck.vfatを実行してみましたが結果は同じでした。

KES)小西です。

SDのサイズ大丈夫でしょうか?
fsck.vfatの上限超えてませんか?
Seek to -273678848:Invalid argument
でSeekできていないので、まず、SDを装置1、2で入れ替えてチェックしてみてください。
多分SDの問題かと。。。

もしかして4GのSD使ってませんか?

Yamamotoです。

どちらも4GのSDを使用しています。

SDの問題かと思い、双方で入れ替えて確認してみましたが結果は同じでした。

KES)小西です。

追加でですが、
fdisk -l
でSDがどのようなセクタ配置でフォーマットされているか確認してみてください。

KES)小西です。

SDの件了解しました。

装置1:atmark-dist v1.28.2
装置2:atmark-dist v1.35.0
なので、切り分けのため、装置2からfsck.vfatを
一旦ローカルに持ってきて使用してみてはいかがでしょうか?

Yamamotoです。

装置2からfsck.vfatを持ってきて、装置1のローカルで実行したところ装置2と同じ結果になりましたのでバージョンの違いで起きているようです。
atmark-dist v1.28.2では正常に実行できないか、容量の制限があるのでしょうか?

Yamamotoです。

追加で教えてください。
Armadillo-460内のsbinは以下にfsck.vfatはあったのですが、装置1のimages作成時に装置2のfsck.vfatを登録しておきたいのですが、開発環境では何処に登録されているのでしょうか?
色々と探してみたのですが登録されているフォルダが見つかりませんでした。

ローカルで動作確認したので、装置1に入れておいて実行したいのですが。(臨時対応なのでソースとかまでを持ってきてとは思っておりません)

Yamamotoです。

済みません。
再確認したところ/sbin/dosfsckにリンクされているのが見つかりました。

Yamamotoです。

"armadillo420-0" と表示されている件で、configを間違えているのかと思い.configファイルを確認したところ、460選択になっていました。
460選択なのに "armadillo420-0" と表示される事があるのでしょうか?

念のため.configを添付しておきます。

あと、初期に評価用で420を使用しその後460に変更したかもしれないので、初期のconfigは420で実施したかもしれません。

ファイル ファイルの説明
config.txt

at_yuma.arakawa

2016年4月8日 10時40分

> "armadillo420-0" と表示されている件で、configを間違えているのかと思い.configファイルを確認したところ、460選択になっていました。
> 460選択なのに "armadillo420-0" と表示される事があるのでしょうか?

"armadillo420-0"はコンフィグ領域のHOSTNAMEファイル(/etc/config/HOSTNAME)の内容を表示しています。

コンフィグ領域がArmadillo-420のユーザーランドでflatfsd -wしてしまった時のままなのではないでしょうか?
添付のコンフィギュレーションの状態でビルドしたユーザーランドで起動し、
flatfsd -sを実行し直し、再起動すると、"armadillo460-0"の表示になりませんか?

Yamamotoです。

有難うございます。

おそらく420用の開発で420が使用できなかったので、一時的に460を使用した事があり、その時にやってしまったかもしれません。