🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

854閲覧

while Loopをbreakするとsdcardが損傷

Gammodler

総合スコア9

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2019/10/21 04:43

while Loopをbreakするとsdcardが損傷

Hardware :Microzed Microsdcard ドライブ付き
起動されるOSはlinuxです。

sdcardからFileを読み出し、Task実行終了、Command Prompt受け付け状態でsdcardをunmountすると、次回の起動時

FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
がでます。

sdcardの内容をチェックすると、File類の一つが存在はするがsizeがゼロになっていることがあります。
多くの場合は上記のErrorが表示されても使用できます。
しかし放置はできません。

詳細process:

root@usr:# mount /dev/mmcblk0p1 /mnt
root@usr:
# /mnt/startup.sh
myproc Started
Device Driver Open No fd= 3

これによりmyproc内で無限Loop開始

Windows10マシンからTCP/IP接続が行われ、終了時はその回線を切ります。
これによりTarget側はLoopがbreakしCommand Promtに復帰します。

root@usr:# umount /mnt
root@usr:
# ls -l /mnt
によりなにも表示されないのでunmountは成功していると思います。

Resetにより再起動。
これでError発生、となります。

sdcardからの読出しは開始のわずかな時間に終了しています。
ですからmyprocのloop中に
umount -l /mnt
としても差し支えはないと思いますが、それはしていません。

sdcardからの読出し後に行われた動作は、sdcardの損傷に関係ないと思います。
それでも上記の不具合、何かの誤認あるいは誤操作があるのかもしれません。
ご示唆いただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nandymak

2019/10/21 07:25 編集

>root@usr:~# umount /mnt >root@usr:~# ls -l /mnt >によりなにも表示されないのでunmountは成功していると思います。 思い込みだけではなく、ログなどにも何か出ていないか確認されましたか? /var/log/messagesとか。。。 あとは、 $ umount --verbose /mnt とか
Gammodler

2019/10/21 08:47

nandymak様 コメントありがとうございます。 /var/log/messages このFileは存在しませんでした。 $ umount --verbose /mntについては root@usr:/var/ftp# umount --verbose /mnt umount: unrecognized option '--verbose' BusyBox v1.23.2 (2016-06-09 05:55:53 MDT) multi-call binary. となってしまいました。 実行側におけるumountのoptionが判明しました: Unmount file systems -a Unmount all file systems -r Try to remount devices as read-only if mount is busy -l Lazy umount (detach filesystem) -f Force umount (i.e., unreachable NFS server) -D Don't free loop device even if it has been used この最後のーDが本件に関与する可能性があります。 root@usr:/var/ftp# umount -D /mnt umount: can't umount /mnt: Invalid argument となってしまいます。
dodox86

2019/10/21 11:50 編集

一応確認なのですが、fsckでエラーが発生したあと、fsckなりWindowsマシンでSDカードのエラーを解消するなりしているのですよね。あくまで当該スクリプトを実行した場合のみ、次のlinux起動でfsckエラーが報告される、と言うことで合っていますでしょうか。
Gammodler

2019/10/21 12:55

dodox86様 コメントありがとうございます。 ええそうです。 Windowsマシンに戻して修正後、Microzedで起動します。 初回はErrorが出ないのが確認されています。 myproc実行に問題がある可能性も考え、./myprocでloopを回り始めたところでctrl-cによるbreakも試みたのですが、実現できませんでした。 これについては再度トライしてみます。
guest

回答2

0

自己解決

y_waiwai様 皆様
まだ未解決ですが、
mount -r /mnt
に関して別スレッドで質問します。

ありがとうございました。

投稿2019/10/23 09:42

Gammodler

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回線を切り、breakしたときにそのファイルのアクセスのCloseはきちんと行われてるでしょうか。
Closeが行われないまま強制終了すると、あなたの述べたような現象になります

投稿2019/10/21 07:04

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gammodler

2019/10/21 08:15

y_waiwai様 回答ありがとうございます。 startup.shの内容: #!/bin/sh ifconfig eth0 192.168.1.5 cd /var/ftp cp /mnt/myproc ./ cp /mnt/mydev.ko ./ mknod mydev c 245 0 chmod 755 * insmod mydev.ko ./myproc Binaryのmyproc,mydev.koはメモリーにCopyされ、その上で実行中ですから乱暴に切っても問題はないと思われます。 最後のmyprocはstartup.shの中で指令されたもの、従ってScript File自身はCloseしていないものと考えられます。 Script FileはCommandすれば起動、Scriptをすべて実行したところで自身をcloseしてくれるもの、明示的にcloseの必要はないと考えていました。 Linux超素人、明示的にCloseする方法が分かりません。 恥ずかしくはありますがその方法、あるいはこのような事態を回避する方法がありましたら、お教え願えませんでしょうか。
y_waiwai

2019/10/21 08:35

そのコードは質問に追記しときましょう で、そのSDカードは、そのstart.sh だけしか入れてないんでしょうか また、そのmydeb.ko及びmuprocはその起動中にSDカードにアクセスは全く行ってないんでしょうか。 これは、カードの信号ラインをオシロなどで観測して確認ください
Gammodler

2019/10/21 10:51

Script Fileはこれだけです。 他はFSBL用boot.bin、image.ubなどすべてBinaryです。 それからmydev.ko,myprocは2個ともwork dirである/var/ftp/にコピーが終了してから実行され、実行途中にsdcardにアクセスすることはありません。 start.shの最後に指令した./myprocが異常終了したため、それの実行終了が検出できずstart.shがCloseできないという仮説を検証するため、start.shからmyprocを除外しました。 これなら直ちに終了する insmod mydev.ko 以外の実行はなく、Script FileのCloseを妨害しないはずです。 この後に umount /mnt を実行、sdcardを無関係にします。 さらにその後で ./myproc を指令、loopが開始されます。 回線断でloopを抜けた後、Reset、再起動します。 これでもダメでした。script FileはCloseしているはずです。 仮説は否定されました。 それでもsdcardはunmountされていない、これをHard的に実証する方法は考えてみます。
y_waiwai

2019/10/21 11:03

うーん、なんかソフト的というよりも、ハード的なトラブルなんじゃないかという気がしますね SDカードの実装がなんかおかしいんじゃないかという気がしますが。 そこらへんはオシロとかロジアナもってきて、SDの信号ライン見ていくしかないでしょうねえ
Y.H.

2019/10/21 11:09

sdcardへの書き込みが無いのであれば読み出しのみでmountしてみるとか。 mount -r /dev/mmcblk0p1 /mnt
dodox86

2019/10/21 11:34

Y.H.さんの案(readonly mount)に一票投じます。
Gammodler

2019/10/21 13:06

Y.H.様 コメントありがとうございます。 root@usr:~# mount -r /dev/mmcblk0p1 /mnt mount: mounting /dev/mmcblk0p1 on /mnt failed: Device or resource busy root@usr:~# ls -l /mnt root@usr:~# mount /dev/mmcblk0p1 /mnt root@usr:~# ls -l /mnt -rwxrwxrwx 1 root root 2553436 Oct 17 2019 BOOT.BIN つまり -rがつくとmountできません。 これがなければmountは問題ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問