転んでも泣かない! (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カードができたので良しとしよう。起動しない原因は不明ですが、今日はここまで。


続く...