「(エラー)RESETボタンでの初期化中、INFO LEDが点滅して作業が中断する」の編集履歴(バックアップ)一覧はこちら
(エラー)RESETボタンでの初期化中、INFO LEDが点滅して作業が中断する - (2008/02/03 (日) 03:58:27) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
RESETボタンを押しHDDに開発用Linux(あるいは何らかのディストリビューション導入キット)を導入しようとした際、コンソール上では何も進まなくなりINFO LEDもオレンジの点滅が止まる気配がない、といったエラーが起こることがある。
この時[[mountコマンド]]で確認してもHDDはマウントされておらず、ただ[[fdiskコマンド]]で確認すると4つの[[パーティション]]に切られていることがわかっている。
そして開発用Linuxのhddrootfs.tar.gzも展開されていないはずだ。
*原因
一度、開発用Linuxを導入し何らかの事情で再度開発用Linuxを導入する際によく見受けられるエラーだ。
この時、共通して見られる行為は
+標準Linuxからのブートになっている
+HDDは[[fdiskコマンド]]で[[パーティション]]を解放している
+dd if=/dev/zero /dev/sda bs=1M count=1と実行している場合もある
などだろう。
ここで玄箱PROのHDDがどのように処理されているのか追ってみる。
**HDDの取り付け後
まずは未フォーマットのHDDがある。
#image(p1-1.jpg)
もちろんこのままではHDDとして機能はしない。(必要に応じて)[[パーティション]]を切り、[[ファイルシステム]]を導入(フォーマット)しないと役に立たない。
**パーティションを切る
/usr/local/bin/[[InitDisk1.sh]]内の処理で、
>fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
を実行し[[パーティション]]を4つに切る。
#image(p1-2.jpg)
HDDの先頭512バイトにパーティションテーブルを含むMBRが確保される。
**各パーティションをフォーマットし、開発用Linux導入完了
続けて/usr/local/bin/[[InitDisk1.sh]]が呼び出した/usr/local/bin/[[kuro_lib]]内のFormat_EXT3関数、Format_XFS関数、そして[[mkswapコマンド]]でそれぞれの[[パーティション]]を適宜フォーマットしていく。
#image(p1-3.jpg)
この際に重要なのは、各[[パーティション]]の先頭512バイトにブートセクターが置かれることだ。
ext3形式のブートセクターには何も記録されていないが、xfs形式のブートセクターの先頭3バイトには「XFS」という文字列が入る(余談だが、このためxfs形式の上からext3形式をフォーマットしても先頭の「XFS」という文字列が残る)。
この後、各種ファイルの展開などがあり開発用Linuxの導入も終わる。
**fdiskコマンドでパーティション解放
HDDのマウントをはずし、[[fdiskコマンド]]でHDD先頭のパーティションテーブルを書き換え(消去し)、各[[パーティション]]の「壁」を取り払う。
しかしこのままであれば、基本領域であった[[パーティション]]の中のデータそのものはフォーマットされない限り消えることはない。
#image(p1-4.jpg)
ここで重要なのは「[[パーティション]]は存在しないがsda2とsda4の先頭領域だった場所には「XFS」という文字列はそのまま残っている」という点だ。
そしてこの状態で再度の開発用Linuxの導入をするため、[[RESETボタン]]を押すとどうなるか続けてみる。
**InitDisk1.shのチェックを抜ける
/usr/local/bin/[[InitDisk1.sh]]のXFSフォーマットチェックの方法は以下だ。
>XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
>XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
>XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
つまり、/dev/sda、/dev/sda1、/dev/sda4の先頭に「XFS」という文字列がなければ「フォーマットされていない」と見なされる。
この時のHDDの状態は下のようになっている。
#image(p1-4.jpg)
/dev/sdaは存在するが先頭に「XFS」という文字列はなく、/dev/sda1、/dev/sda4に関してはそもそもそのようなデバイスが存在しない。
よってこの状態のHDDは/usr/local/bin/[[InitDisk1.sh]]の初期チェックを通過してしまう。
**パーティションを切る
その次に待っているのは[[パーティション]]を切る処理だ。
>fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
この処理後、HDDは以下のようになる。
#image(p1-3.jpg)
/usr/local/bin/PartitionDefinitionを変更して実行しない限り、以前とまったく同じ[[パーティション]]の切り方になるはずだ。
**各パーティションをフォーマットする
次に/usr/local/bin/[[InitDisk1.sh]]はFormat_EXT3関数とFormat_XFS関数を呼び、それぞれext3形式とxfs形式にフォーマットを始める。
Format_EXT3関数にはチェック項目はないため、/dev/sda1は問題なくext3形式でのフォーマットが完了する。
しかしFormat_XFS関数は再度ここでxfs形式フォーマットのチェックを行う。
>KEY=`dd if=$1 bs=1 count=3`
>if [ "${KEY}" = "XFS" ] ; then
チェック対象デバイスの先頭3バイトを読み込み、それが「XFS」であれば別の処理が待っている。
この時、HDDは以下のようになっている。
#image(p1-5.jpg)
/dev/sda1、/dev/sda3はフォーマットする、という意味で空白にしている。
/dev/sda2、/dev/sda4は、ちょうど先頭3バイトに「XFS」が入る形になっている。
よって次の処理を実行する。
>. /etc/melco/info
/etc/melco/infoというファイルを開く、という意味だが、このファイルは標準では存在しない。
製品仕様書にもあるが、
>内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、 force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。
とのことで、任意のファイルだ。
このファイルがないため、多くは内部的にここで止まっている。
これが処理が止まり、INFO LEDが点滅しつづける原因だ。点滅を止める[[miconaplコマンド]]に到達していないのだ。
この図のような状態に、実際は/dev/sda1のext3形式でのフォーマットが済んでいるため、/dev/sda3以外の[[パーティション]]はすべて手動でマウントできる。
その後で、INFO LEDを止めるため
>miconapl -a led_set_code_information clear
とすればいい。
/dev/sda3は
>mkswap /dev/sda3
>swapon /dev/sda3
でswapを有効にできる。
ただし、開発環境はHDDに一切展開されていないので注意が必要だ。
**/etc/melco/infoを用意する
これを回避するため/etc/melco/infoを用意した場合、次の処理を通る。
>if [ "${force_format}" = "yes" ] ; then
>確認のため10秒間のタイマーが始動
>else
>return 0
>fi
>(略)
>dd if=/dev/zero of=$1 bs=512 count=1
>mkfs.xfs $1 -f
/etc/melco/infoに「force_format=yes」と記述していれば、先頭の512バイト(つまりブートセクター)を消去しxfs形式でのフォーマットが始まる。
しかし、/etc/melco/infoが「force_format=no」あるいは記述がない場合、elseを通りreturn 0、つまりFormat_XFS関数を抜けさせられ、あとに続くmkfs.xfsコマンドは実行されない。
つまり、/dev/sda2、/dev/sda4にフォーマットは施されないのだ。
この時のHDDは以下。
#image(p1-6.jpg)
[[パーティション]]を切る前の[[ファイルシステム]]がそのまま使えてしまうため、一見mkfs.xfsが処理されたように思えるためわかりにくいが、/dev/sda2と/dev/sda4は実は前回の開発用Linuxのままなのだ。
そこにデータが残っていれば扱うことができる。
*対処
/etc/melco/infoを用意し、force_format=yesと記述しておけばいい。
>~ # mkdir /etc/melco
>~ # echo force_format=yes > /etc/melco/info
これでFormat_XFS関数を通過できる。
現時点でINFO LEDが点滅している場合、[[fdiskコマンド]]で全[[パーティション]]を解放し、上の/etc/melco/infoを用意して一度再起動し、再度RESETボタンを押せば開発用Linuxを導入できるだろう。
また各種Debian化キットなどもシリアルコンソールの世話になることなく導入できるのではないだろうか。
----
RESETボタンを押しHDDに開発用Linux(あるいは何らかのディストリビューション導入キット)を導入しようとした際、コンソール上では何も進まなくなりINFO LEDもオレンジの点滅が止まる気配がない、といったエラーが起こることがある。
この時[[mountコマンド]]で確認してもHDDはマウントされておらず、ただ[[fdiskコマンド]]で確認すると4つの[[パーティション]]に切られていることがわかっている。
そして開発用Linuxのhddrootfs.tar.gzも展開されていないはずだ。
#contents()
*原因
一度、開発用Linuxを導入し何らかの事情で再度開発用Linuxを導入する際によく見受けられるエラーだ。
この時、共通して見られる行為は
+標準Linuxからのブートになっている
+HDDは[[fdiskコマンド]]で[[パーティション]]を解放している
+dd if=/dev/zero /dev/sda bs=1M count=1と実行している場合もある
などだろう。
ここで玄箱PROのHDDがどのように処理されているのか追ってみる。
**HDDの取り付け後
まずは未フォーマットのHDDがある。
#image(p1-1.jpg)
もちろんこのままではHDDとして機能はしない。(必要に応じて)[[パーティション]]を切り、[[ファイルシステム]]を導入(フォーマット)しないと役に立たない。
**パーティションを切る
/usr/local/bin/[[InitDisk1.sh]]内の処理で、
>fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
を実行し[[パーティション]]を4つに切る。
#image(p1-2.jpg)
HDDの先頭512バイトにパーティションテーブルを含むMBRが確保される。
**各パーティションをフォーマットし、開発用Linux導入完了
続けて/usr/local/bin/[[InitDisk1.sh]]が呼び出した/usr/local/bin/[[kuro_lib]]内のFormat_EXT3関数、Format_XFS関数、そして[[mkswapコマンド]]でそれぞれの[[パーティション]]を適宜フォーマットしていく。
#image(p1-3.jpg)
この際に重要なのは、各[[パーティション]]の先頭512バイトにブートセクターが置かれることだ。
ext3形式のブートセクターには何も記録されていないが、xfs形式のブートセクターの先頭3バイトには「XFS」という文字列が入る(余談だが、このためxfs形式の上からext3形式をフォーマットしても先頭の「XFS」という文字列が残る)。
この後、各種ファイルの展開などがあり開発用Linuxの導入も終わる。
**fdiskコマンドでパーティション解放
HDDのマウントをはずし、[[fdiskコマンド]]でHDD先頭のパーティションテーブルを書き換え(消去し)、各[[パーティション]]の「壁」を取り払う。
しかしこのままであれば、基本領域であった[[パーティション]]の中のデータそのものはフォーマットされない限り消えることはない。
#image(p1-4.jpg)
ここで重要なのは「[[パーティション]]は存在しないがsda2とsda4の先頭領域だった場所には「XFS」という文字列はそのまま残っている」という点だ。
そしてこの状態で再度の開発用Linuxの導入をするため、[[RESETボタン]]を押すとどうなるか続けてみる。
**InitDisk1.shのチェックを抜ける
/usr/local/bin/[[InitDisk1.sh]]のXFSフォーマットチェックの方法は以下だ。
>XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
>XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
>XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
つまり、/dev/sda、/dev/sda1、/dev/sda4の先頭に「XFS」という文字列がなければ「フォーマットされていない」と見なされる。
この時のHDDの状態は下のようになっている。
#image(p1-4.jpg)
/dev/sdaは存在するが先頭に「XFS」という文字列はなく、/dev/sda1、/dev/sda4に関してはそもそもそのようなデバイスが存在しない。
よってこの状態のHDDは/usr/local/bin/[[InitDisk1.sh]]の初期チェックを通過してしまう。
**パーティションを切る
その次に待っているのは[[パーティション]]を切る処理だ。
>fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
この処理後、HDDは以下のようになる。
#image(p1-3.jpg)
/usr/local/bin/PartitionDefinitionを変更して実行しない限り、以前とまったく同じ[[パーティション]]の切り方になるはずだ。
**各パーティションをフォーマットする
次に/usr/local/bin/[[InitDisk1.sh]]はFormat_EXT3関数とFormat_XFS関数を呼び、それぞれext3形式とxfs形式にフォーマットを始める。
Format_EXT3関数にはチェック項目はないため、/dev/sda1は問題なくext3形式でのフォーマットが完了する。
しかしFormat_XFS関数は再度ここでxfs形式フォーマットのチェックを行う。
>KEY=`dd if=$1 bs=1 count=3`
>if [ "${KEY}" = "XFS" ] ; then
チェック対象デバイスの先頭3バイトを読み込み、それが「XFS」であれば別の処理が待っている。
この時、HDDは以下のようになっている。
#image(p1-5.jpg)
/dev/sda1、/dev/sda3はフォーマットする、という意味で空白にしている。
/dev/sda2、/dev/sda4は、ちょうど先頭3バイトに「XFS」が入る形になっている。
よって次の処理を実行する。
>. /etc/melco/info
/etc/melco/infoというファイルを開く、という意味だが、このファイルは標準では存在しない。
製品仕様書にもあるが、
>内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、 force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。
とのことで、任意のファイルだ。
このファイルがないため、多くは内部的にここで止まっている。
これが処理が止まり、INFO LEDが点滅しつづける原因だ。点滅を止める[[miconaplコマンド]]に到達していないのだ。
この図のような状態に、実際は/dev/sda1のext3形式でのフォーマットが済んでいるため、/dev/sda3以外の[[パーティション]]はすべて手動でマウントできる。
その後で、INFO LEDを止めるため
>miconapl -a led_set_code_information clear
とすればいい。
/dev/sda3は
>mkswap /dev/sda3
>swapon /dev/sda3
でswapを有効にできる。
ただし、開発環境はHDDに一切展開されていないので注意が必要だ。
**/etc/melco/infoを用意する
これを回避するため/etc/melco/infoを用意した場合、次の処理を通る。
>if [ "${force_format}" = "yes" ] ; then
>確認のため10秒間のタイマーが始動
>else
>return 0
>fi
>(略)
>dd if=/dev/zero of=$1 bs=512 count=1
>mkfs.xfs $1 -f
/etc/melco/infoに「force_format=yes」と記述していれば、先頭の512バイト(つまりブートセクター)を消去しxfs形式でのフォーマットが始まる。
しかし、/etc/melco/infoが「force_format=no」あるいは記述がない場合、elseを通りreturn 0、つまりFormat_XFS関数を抜けさせられ、あとに続くmkfs.xfsコマンドは実行されない。
つまり、/dev/sda2、/dev/sda4にフォーマットは施されないのだ。
この時のHDDは以下。
#image(p1-6.jpg)
[[パーティション]]を切る前の[[ファイルシステム]]がそのまま使えてしまうため、一見mkfs.xfsが処理されたように思えるためわかりにくいが、/dev/sda2と/dev/sda4は実は前回の開発用Linuxのままなのだ。
そこにデータが残っていれば扱うことができる。
*対処
/etc/melco/infoを用意し、force_format=yesと記述しておけばいい。
>~ # mkdir /etc/melco
>~ # echo force_format=yes > /etc/melco/info
これでFormat_XFS関数を通過できる。
現時点でINFO LEDが点滅している場合、[[fdiskコマンド]]で全[[パーティション]]を解放し、上の/etc/melco/infoを用意して一度再起動し、再度RESETボタンを押せば開発用Linuxを導入できるだろう。
また各種Debian化キットなどもシリアルコンソールの世話になることなく導入できるのではないだろうか。
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: