EPIAのmicroSDにdebianをインストールするが失敗
EPIA-ME6000Gに使用していない新品のmicroSDカード(KINGMAX microSD 4GB Class4)を付けてdebianをインストールしてみる
先に結果となるが残念ながらEPIAではmicroSDカードをUSBで読む際に問題があるようでdebianを起動することができなかった
つまり以下は失敗の記録となる
インストール
まずは通常のHDDと同じ手順でインストール
microSDカードとDVDドライブをUSB接続し、作成したDVDからインストールしていたら途中でDVDの読み込みエラーが発生、ディスクを精査すると問題ありと出たので媒体をCDで作りやり直し(幸先が悪い、出鼻を挫かれた)
これが非常に時間が掛かり4時間で終わらなかったのでそのままにして寝る
翌日起きたらgrubの確認で停止していた
grubを設定して早速再起動すると「out of disk」で起動せず
GRUB loading.
Welcome to GRUB!
error: out of disk.
Entering resuce mode...
grub rescue>
CDからレスキュを起動して、/ を mount するとファイルシステムは正常にみえる
grubの設定ミスなのか再度grubを登録したが結果は同様
エラーの意味がまったく判らないのでググる
同様の例がなく収集できたのはパーティションテーブルの異常
再度CDからのレスキュでfdisk
# fdisk -l /dev/sda
Disk /dev/sda: 3930 MB, 3930062848 bytes
121 heads, 62 sectors/track, 1023 cylinders
Units = cylinders of 7502 * 512 = 3841024 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004a79a
Device Boot Start End Blocks Id System
/dev/sda1 890 1023 498688 82 Linux swap / Solaris
Partition 1 has different physical/logical beginnings (non-Linux?):
phys=(827, 119, 56) logical=(889, 116, 11)
Partition 1 has different physical/logical endings:
phys=(951, 79, 15) logical=(1022, 109, 54)
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 1 890 3337216 83 Linux
Partition 2 has different physical/logical beginnings (non-Linux?):
phys=(0, 32, 33) logical=(0, 33, 3)
Partition 2 has different physical/logical endings:
phys=(827, 119, 55) logical=(889, 116, 10)
Partition 2 does not end on cylinder boundary.
Partition table entries are not in disk order
別PCのubuntuで見たfdisk
$ sudo fdisk -l /dev/sdd
ディスク /dev/sdd: 3930 MB, 3930062848 バイト
ヘッド 121, セクタ 62, シリンダ 1023, 合計 7675904 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x0004a79a
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 6676480 7673855 498688 82 Linux スワップ / Solaris
/dev/sdd2 * 2048 6676479 3337216 83 Linux
パーティションテーブル項目がディスクの順序と一致しません
インストール時に最初にスワップの指定を行い位置を後ろにするとこの様にになる
パーティションテーブルがディスク位置順になっていないから「out of disk」になるのかなと思い修正
$ sudo fdisk /dev/sdd
x ← エキスパートモード
f ← 最適化
p ← 確認(やらなくても良いが書き込む前に確認すべき)
w ← 書き込み&終了する
$ sudo fdisk -l /dev/sdd
ディスク /dev/sdd: 3930 MB, 3930062848 バイト
ヘッド 121, セクタ 62, シリンダ 1023, 合計 7675904 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x0004a79a
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 * 2048 6676479 3337216 83 Linux
/dev/sdd2 6676480 7673855 498688 82 Linux スワップ / Solaris
始点が2048になっているのはSDカードにext3でフォーマットしたためと思われる(debianで見ると1なのはドライバーが異なる?)
結果は変わらず「out of disk」となる(がっかり)
再インストール
インストール中のどこかでエラーがあったのかも知れないと思い再度インストールを行うが散々な目にあう
2回目:途中でSDカードのエラーとなり中止
3回目:grubの登録ができず中止
CDレスキュでgrubの登録しようとしたが書き込み不可
/ のマウントもできない
4回目:懲りずに・・・今度はCDが読めなくなって中止
DVDドライブが妙な動きしているようだったので壊れたと思ったが別PCでは問題なかった
CDレスキュでSDカードをmountしようとするとエラー発生
syslogを見るとsuper blockが読めないらしい
SDカードが壊れてしまったのか?EPIAが問題なのか?
試しに20GBの2.5インチHDDを接続してインストールすると30分もかからず終了し正常に起動する
SDカードだと4時間はかかるので「嘘だろ!」って思った
ubuntuでSDカードをddで全体をreadしてみたがエラーは発生せず
fdiskでパーティションをクリアしてWindowsXPでSDフォーマッタを使い上書きによる初期化をしてみたが正常に終了した
再々インストール
microSDカードにHDDと同じ手段でインストールすると時間がかかるので20GB HDDにインストールしたdebianからシステムをコピーすることにした
HDDからシステムをコピー
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 * 2048 6836223 3417088 83 Linux
/dev/sdd2 6838270 39069695 16115713 5 拡張領域
/dev/sdd5 6838272 7835647 498688 82 Linux スワップ / Solaris
/dev/sdd6 7837696 39069695 15616000 83 Linux
$ sudo dd if=/dev/sdd1 of=sdd1.dat
6834176+0 レコード入力
6834176+0 レコード出力
3499098112 バイト (3.5 GB) コピーされました、 129.613 秒、 27.0 MB/秒
SDカードに同じようにパーティションを作りHDDからコピーしたシステムを書き込む
$ sudo fdisk -l /dev/sdd
ディスク /dev/sdd: 3930 MB, 3930062848 バイト
ヘッド 121, セクタ 62, シリンダ 1023, 合計 7675904 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0xdda47987
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 2048 6836223 3417088 83 Linux
/dev/sdd2 6836224 7675903 419840 5 拡張領域
/dev/sdd5 6838272 7675903 418816 82 Linux スワップ / Solaris
$ sudo dd if=sdd1.dat of=/dev/sdd1
6834176+0 レコード入力
6834176+0 レコード出力
3499098112 バイト (3.5 GB) コピーされました、 1493.04 秒、 2.3 MB/秒
$ sudo mount /dev/sdd1 /mnt
これで後はgrubをインストールするだけ
$ sudo mount /dev/sdd1 /mnt
$ sudo mount --bind /dev /mnt/dev
$ sudo chroot /mnt
# grub-install /dev/sdd
Installation finished. No error reported.
# update-grub
Found linux image: /boot/vmlinuz-2.6.32-5-486
Found initrd image: /boot/initrd.img-2.6.32-5-486
done
# vi /etc/fstab
(修正)
$ sudo umount /mnt/dev
$ sudo umount /mnt
結果は「out of disk」で起動せず(もう見たくないエラー)
GRUB loading.
Welcome to GRUB!
error: out of disk.
Entering resuce mode...
grub rescue>
ここで(いまさらながら)落ち着いて考える
どこで止まっているのか?grubのstage1かstage2(もしくはstage1.5)で対応を変えないといけない
GRUB - Wikipedia によると、やはりstage1で/boot/grub/がbiosで参照できていないと推測
grub rescue モードで確認
grub rescue> ls
(hd0) (hd0,msdos1) (fd0)
grub rescue> ls (hd0,1)/
./ ../ lost+found/ var/ opt/ etc/ media/ initrd.img sbin/ usr/ lib/ selinux/ bin/ home/ dev/
proc/ boot/ mnt/ root/ tmp/ sys/ srv/ vmlinuz
grub rescue> ls (hd0,1)/boot/
error: out of disk.
grub rescue>
(尚、初期にmkfsで生成されるlost+foundは見えた)
そうか!LBAの問題か、最初に気付いていればよかった
512bytesのプログラムで適切なメッセージを出せるとは思ってなくて「out of disk」というメッセージに惑わされてしまった
再々々インストール
先頭192MBをbootパーティションにしてgrubとカーネルを置く
$ sudo fdisk /dev/sdd
ディスク /dev/sdd: 3930 MB, 3930062848 バイト
ヘッド 121, セクタ 62, シリンダ 1023, 合計 7675904 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0xdda47987
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 * 2048 395263 196608 83 Linux
/dev/sdd2 395264 7675903 3640320 5 拡張領域
/dev/sdd5 397312 7231488 3417088+ 83 Linux
/dev/sdd6 7233537 7675903 221183+ 82 Linux スワップ / Solaris
コマンド (m でヘルプ): v
パーティション 1: 前のセクタ 395263 は合計 391760 と一致しません
パーティション 5: 前のセクタ 7231488 は合計 7231315 と一致しません
パーティション 6: シリンダ 1024 は最大値 1023 よりも大きいです
パーティション 6: 前のセクタ 7675903 は合計 7681222 と一致しません
6141 未確保 512 バイトセクタが残っています
$ sudo dd if=sys3.5G.dat of=/dev/sdd5 bs=1M ← sys3.5G.datはsdd1.datをmvしたもの
3337+0 レコード入力
3337+0 レコード出力
3499098112 バイト (3.5 GB) コピーされました、 830.274 秒、 4.2 MB/秒
(バッファ指定で少しは早く書き込めた)
$ sudo mkfs -t ext3 /dev/sdd1
$ sudo e2label /dev/sdd1 boot
$ sudo mount /dev/sdd5 /mnt
$ sudo mv /mnt/boot /mnt/boot.bak
$ sudo mkdir /mnt/boot
$ sudo mount /dev/sdd1 /mnt/boot
$ (cd /mnt/boot.bak; sudo tar cf - . | (cd /mnt/boot; sudo tar xf -))
$ sudo rm -rf /mnt/boot.bak
$ sudo mkswap /dev/sdd6
スワップ空間バージョン1を設定します、サイズ = 221176 KiB
ラベルはありません, UUID=dd0784d0-d4fc-4661-8fbc-fab24adce7a9
$ sudo mount --bind /dev /mnt/dev
$ sudo chroot /mnt
# grub-install --root-directory=/ /dev/sdd
Installation finished. No error reported.
# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-486
Found initrd image: /boot/initrd.img-2.6.32-5-486
done
# vi /etc/fstab
(編集)
$ sudo blkid
/dev/sdd1: LABEL="boot" UUID="1575e3a5-ac09-4815-92f6-1a4584dbd7d7" TYPE="ext3"
/dev/sdd5: UUID="99ae2575-7585-45e0-8dfd-732fabdd794e" TYPE="ext3"
/dev/sdd6: UUID="dd0784d0-d4fc-4661-8fbc-fab24adce7a9" TYPE="swap"
$ sudo umount /mnt/dev
$ sudo umount /mnt/boot
$ sudo umount /mnt
結果
GRUB loading.
Welcome to GRUB!
error: no such device: 99ae2575-7585-45e0-8dfd-732fabdd794e.
error: no such disk.
error: no suitable mode found.
error: no such device: 1575e3a5-ac09-4815-92f6-1a4584dbd7d7.
ここまで表示されるのに20分・・・
約30分待ったが変化がないのでリセット(あまりにも遅い)
「out of disk」は回避したが、次は / がないとは・・・
コマンドモードにもならないループ状態なので手が出せない
USBアダプタを換えてみたりEPIA-ME6000GをEPIA-CL10000にしてみたが同様の結果であった
試しにubuntuを使っているPCで同じmicroSDカードとアダプタを付けてみると正常起動した
この古いEPIAではUSB経由のSDカードの読み込みはハード的に問題があるのではないかと思われる
しかしUSB経由でのHDDを含め他の機器は正常動作しているのでSDカードだけ駄目というのは納得できない