転んでも泣かない! (2012/08/28)
Raspberry Piが起動しなくなりました。 apt-get upgrade 以外に変なことはしていないつもりです。ファームウェアのレベルでおかしくなったようで、HDMIに信号が送られずディスプレイには何も表示されません。下の動画(ブラウザがChromeとSafariで表示されることは確認しました)のように、「OK」の緑のLEDが6回点滅を繰り返す状態です。
Raspbian のディスクイメージを書き込んでいた予備のSDカードで起動確認して、Raspberry Pi自体が正常なのは確認できました。せっかくの機会なので、色々記録しておきます。
行き当たりばったりで無茶をすることは自分でも分かっていたので、同じSDカード を3枚購入して、こちらのメモに書いたように Raspbian の起動イメージを2枚作成していました。とにかく、raspi-configで「expand_rootfs」と「ssh」だけ実行して再起動しました。
ssh
Macからsshで接続しようとするとキーが違うといって、接続できません。「vi /Users/「自分のユーザID」/.ssh/known_hosts」で古いキーの行を削除したら接続できました。
壊れた? SDカードのマウント
起動しないsdカードをUSB接続マイクロSDカードリーダ経由で以下のように接続しました。まず、パーティションの情報を確認してみます。
root@raspberrypi:~# fdisk -l /dev/sda
Disk /dev/sda: 16.0 GB, 16021192704 bytes
64 heads, 32 sectors/track, 15279 cylinders, total 31291392 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000714e9
Device Boot Start End Blocks Id System
/dev/sda1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/sda2 122880 31291391 15584256 83 Linux
パーティションテーブルは正常に見えます。マウントしてSDカードの内容を確認してみることにします。
root@raspberrypi:~# mkdir /mnt/usb1 root@raspberrypi:~# mkdir /mnt/usb2 root@raspberrypi:~# mount /dev/sda1 /mnt/usb1 root@raspberrypi:~# mount /dev/sda2 /mnt/usb2 root@raspberrypi:~# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 15339512 1369020 13191548 10% / /dev/root 15339512 1369020 13191548 10% / tmpfs 18808 232 18576 2% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 37616 0 37616 0% /tmp tmpfs 10240 0 10240 0% /dev tmpfs 37616 0 37616 0% /run/shm /dev/mmcblk0p1 57288 34544 22744 61% /boot /dev/sda1 57288 36808 20480 65% /mnt/usb1 /dev/sda2 15339512 2024368 12535932 14% /mnt/usb2
ブート領域の比較
起動しているイメージのブート領域のファイルを確認します。
root@raspberrypi:/boot# ls -l
total 34512
-rwxr-xr-x 1 root root 2051056 Jul 15 18:10 arm128_start.elf
-rwxr-xr-x 1 root root 2051056 Jul 15 18:10 arm192_start.elf
-rwxr-xr-x 1 root root 2051056 Jul 15 18:10 arm224_start.elf
-rwxr-xr-x 1 root root 16536 Jul 15 18:10 bootcode.bin
-rwxr-xr-x 1 root root 142 Jul 15 20:06 cmdline.txt
-rwxr-xr-x 1 root root 1180 Jul 15 20:06 config.txt
-rwxr-xr-x 1 root root 137 Jul 15 20:44 issue.txt
-rwxr-xr-x 1 root root 4189540 Jul 15 18:10 kernel_cutdown.img
-rwxr-xr-x 1 root root 16321844 Jul 15 18:10 kernel_emergency.img
-rwxr-xr-x 1 root root 6263772 Jul 15 18:10 kernel.img
-rwxr-xr-x 1 root root 275235 Jul 15 18:10 loader.bin
-rwxr-xr-x 1 root root 2051056 Jul 15 18:10 start.elf
root@raspberrypi:/boot# cd /mnt/usb1
次に起動しなくなったブート領域のファイルを見てみます。
root@raspberrypi:/mnt/usb1# ls -l
total 36568
-rwxr-xr-x 1 root root 2458128 Aug 26 13:05 arm128_start.elf
-rwxr-xr-x 1 root root 2458128 Aug 26 13:06 arm192_start.elf
-rwxr-xr-x 1 root root 2458128 Aug 26 13:06 arm224_start.elf
-rwxr-xr-x 1 root root 631184 Aug 26 13:06 arm240_start.elf
-rwxr-xr-x 1 root root 16536 Aug 26 13:06 bootcode.bin
-rwxr-xr-x 1 root root 142 Jul 15 20:06 cmdline.txt
-rwxr-xr-x 1 root root 1026 Jul 21 17:38 config.txt
-rwxr-xr-x 1 root root 137 Jul 15 20:44 issue.txt
-rwxr-xr-x 1 root root 4115364 Aug 26 13:06 kernel_cutdown.img
-rwxr-xr-x 1 root root 16256148 Aug 26 13:07 kernel_emergency.img
-rwxr-xr-x 1 root root 6231036 Aug 26 13:06 kernel.img
-rwxr-xr-x 1 root root 275235 Aug 26 13:07 loader.bin
-rwxr-xr-x 1 root root 2458128 Aug 26 13:07 start.elf
サイズが結構違いますね。何が問題なんだか。今日のところはサイズの記録だけにしておきます。
ユーザ追加
ユーザを追加して使っていたので、追加しました。
pi@raspberrypi ~ $ sudo adduser jun Adding user `jun' ... Adding new group `jun' (1002) ... Adding new user `jun' (1001) with group `jun' ... Creating home directory `/home/jun' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for jun Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
sudo コマンドが使えるように /etc/sudoers に追加します。
pi@raspberrypi ~ $ sudo visudo
略 #includedir /etc/sudoers.d pi ALL=(ALL) NOPASSWD: ALL jun ALL=(ALL) PASSWD:ALL
ユーザデータの復帰
起動できないSDカードのデータを新しく用意した起動できるSDカードにコピーします。以上で無事終了です。
root@raspberrypi:~# cd /home/jun root@raspberrypi:/home/jun# su jun jun@raspberrypi ~ $ pwd /home/jun jun@raspberrypi ~ $ cp -a /mnt/usb2/home/jun/* . jun@raspberrypi ~ $
sambaのインストール
別マシンからファイルにアクセスできる方がバックアップなど何かと便利なので samba をインストールしました。Linuxに慣れていても、最初は「smbpasswd」コマンドが無くて途方に暮れたので、これも記録しておきます。SDカードイメージのパッケージ情報が古くなているため、最初に「apt-get update」が必要です。
root@raspberrypi:~# apt-get update root@raspberrypi:~# apt-get install samba root@raspberrypi:~# vi /etc/samba/smb.conf
sambaのユーザの追加にはこれまで「smbpasswd」コマンドを使っていましたが、wheezyでは「smbpasswd」コマンドは普通にsambaをインストールしても使えないので、代わりに「pdbedit」を使います。
root@raspberrypi:~# pdbedit -a -u pi root@raspberrypi:~# pdbedit -a -u jun
2012-08-16-wheezy-raspbian
起動できなくなった原因は不明ですが、ここで2012-07-15-wheezy-raspbianのイメージからapt-get upgrade するのも不安なので、先日公開された2012-08-16-wheezy-raspbian.zip でも同じように作業しました。今回は MacOS X Mountain Lion(10.8.1) での作業です。
SDカードイメージの確認
ダウンロードしたファイルのSHA-1 を求めて、公式サイトのSHA-1 の値と一致することを確認しました。
$ shasum 2012-08-16-wheezy-raspbian.zip
63d16fd28369b6e05bf97f2d1758d56df6ed0ba9 2012-08-16-wheezy-raspbian.zip
SDカードイメージのSDカードへの書き込み(MacOS X 編)
MacOS X ではデバイス名の指定方法が異なるだけで、Linuxと同じく dd コマンドを使ってSDカードに ディスクイメージを書き込みます。まずは SDカードのデバイス名を調べます。以下の例は、私のMacBookでの例です。適宜読み替えてください。
カードリーダ接続前
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s2 698Gi 93Gi 605Gi 14% 24327242 158606500 13% /
devfs 188Ki 188Ki 0Bi 100% 653 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
カードリーダ接続後
$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk0s2 698Gi 93Gi 605Gi 14% 24330330 158603412 13% / devfs 191Ki 191Ki 0Bi 100% 661 0 100% /dev map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home /dev/disk2s1 74Mi 35Mi 39Mi 47% 0 0 100% /Volumes/NO NAME
SDカードのデバイス名が /dev/disk2s1 であることを確認しました。 SDカードをアンマウントします。
$ diskutil unmount /dev/disk2s1
Volume NO NAME on disk2s1 unmounted
SDカードのデバイス名は /dev/disk2s1 でしたが、書き込みは同じデバイスでバッファリングしないrawデバイス(/dev/rdisk2)を指定して行いました。
$ sudo time dd bs=1m if=2012-08-16-wheezy-raspbian.img of=/dev/rdisk2
1850+0 records in
1850+0 records out
1939865600 bytes transferred in 103.270734 secs (18784272 bytes/sec)
マウント状況を確認します。
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s2 698Gi 95Gi 603Gi 14% 24853585 158080157 14% /
devfs 191Ki 191Ki 0Bi 100% 660 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk2s1 56Mi 36Mi 20Mi 64% 512 0 100% /Volumes/Untitled
ブート領域のファイルは?
$ ls -l
total 73136
-rwxrwxrwx 1 jun staff 2458128 8 13 21:38 arm128_start.elf
-rwxrwxrwx 1 jun staff 2458128 8 13 21:38 arm192_start.elf
-rwxrwxrwx 1 jun staff 2458128 8 13 21:38 arm224_start.elf
-rwxrwxrwx 1 jun staff 631184 8 13 21:38 arm240_start.elf
-rwxrwxrwx 1 jun staff 16536 8 13 21:38 bootcode.bin
-rwxrwxrwx 1 jun staff 142 8 16 01:22 cmdline.txt
-rwxrwxrwx 1 jun staff 1180 8 16 01:22 config.txt
-rwxrwxrwx 1 jun staff 137 8 16 02:02 issue.txt
-rwxrwxrwx 1 jun staff 6231036 8 13 21:38 kernel.img
-rwxrwxrwx 1 jun staff 4115364 8 13 21:38 kernel_cutdown.img
-rwxrwxrwx 1 jun staff 16256148 8 13 21:38 kernel_emergency.img
-rwxrwxrwx 1 jun staff 275235 8 13 21:38 loader.bin
-rwxrwxrwx 1 jun staff 2458128 8 13 21:38 start.elf
起動しなくなったSDカードのブート領域のファイルとサイズが一致していますね。2012-08-16-wheezy-raspbian.img の予備SDカードができたので良しとしよう。起動しない原因は不明ですが、今日はここまで。