Raspberry Pi 3向けに、SDカード以外のブート方法を提供するための機能が追加されています。現在はベータ版の扱いなので、不具合があるかもしれませんが、試す手順なども掲載されています。
現在はUSBブート、PXEブートの2種類が紹介されています。
https://www.raspberrypi.org/blog/pi-3-booting-part-i-usb-mass-storage-boot/
https://www.raspberrypi.org/blog/pi-3-booting-part-ii-ethernet-all-the-awesome/
PXEブートに関しては私の個人ブログでも紹介していますので、興味がありましたらこちらも見てみてください。
さて、本記事ではPi Driveを使用してUSBブートをしてみたいと思います。
Pi Driveとは?
Pi Driveは、Western DigialがRaspberry Pi向けにリリースした2.5インチハードディスクです。容量はPi==πにかけて314GBになっています(フォーマットすると……314GBではなくなります)。特徴的なのはインターフェイスで、SATAではなくUSBポートが搭載されています。なので、USBケーブル1本でRaspberry Piと接続できるわけです。
http://store.wdc.com/promo/97047600
正規の購入経路としてはWestern Digitalの通販サイトがあるものの、日本への輸入には対応していないようです。しかし、おおたさんがなぜか入手されたのをお借りしたので、ぺろぺろなめまわしています(なめまわしていません)。
その他謎の入手経路としては、dx.com(中国のガジェット系通販サイト)がありました。ぶっちゃけ容量単価的にはおいしくないですけども。
http://www.dx.com/p/2-5-314gb-usb-hard-drive-for-raspberry-pi-3b-2b-b-silver-black-437594
パッケージはこのような感じです。
側面には円周率も……!
Pi Driveはberrybootを使用したHDDブートモードが用意されています。ただ、berrybootがMicroSDカードから起動するようなので完全にSDカードレスにできるわけではないようです。また、Raspberry Pi3リリース前にリリースされたパッケージでしたので、そもそもRaspberry Pi 3には対応していないようでした。
USBブートをしてみよう
USBブートをするためには以下の手順が必要になります。
Raspberry Pi側の準備
- MicroSDカードでブートする
- rpi-updateで最新のファームウェアにアップデート
- USBブートを有効にする設定を記述して再起動
- USBブートが有効になったことを確認してシャットダウン
HDDの用意
- パーティションを切る
- 切ったパーティションをそれぞれフォーマット
- Raspberry PiのOSイメージからファイルコピー
- SDカードからbootcode.binとstart.elfをコピー
作業は以下のページを参考に進めました。
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md
Raspberry Pi側の準備
USBブートを有効にするには、最新のファームウェアにアップデートした環境で特定のオプションを有効にした状態でブートする必要があります。この作業は1度実行すれば、以降は不要のようです。
MicroSDカードに最新のRaspbianを用意して起動した後、以下のコマンドを実行します。
sudo BRANCH=next rpi-update
/boot/config.txtをエディターで開き、以下の一文を追記します。
program_usb_boot_mode=1
Raspbianを再起動したら以下のコマンドを実行して、出力が「17:3020000a」であることを確認します。
$ vcgencmd otp_dump | grep 17:
17:3020000a
HDDの用意
Raspberry PiにPi Driveを接続します。まずはpartedコマンドでパーティションを作成します。
$ sudo parted /dev/sda
(parted) mktable msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print
Model: WD My Passport 07BA (scsi)
Disk /dev/sda: 314GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary fat32 lba
2 99.6MB 314GB 314GB primary ext4 lba
(parted) quit
パーティションをそれぞれmkfsコマンドでフォーマットします。
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2
フォーマットしたパーティションをそれぞれ以下のようにマウントします。
sudo mount /dev/sda2 /mnt
sudo mkdir /mnt/boot
sudo mount /dev/sda1 /mnt/boot/
SDカードの中のRaspbianを、rsyncコマンドでHDDにコピーします。rsyncコマンドは別途インストールする必要があります。
sudo apt-get install rsync
sudo rsync -ax / /boot /mnt
コピーしたあとは、HDD内のいくつかのファイルでブート用のパラメータをHDD用に書き換えます。SDカードのデバイス名はmmcblk0ですが、HDDの場合はデバイス名がsdaになるためです。参考ページのようにコマンドで実行すると、一括で置き換えてくれます。
$ sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/boot/cmdline.txt
$ sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/etc/fstab
最後にSSHホスト鍵を再生成します。こちらも基本的には参考ページの通り実行します。
cd /mnt
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc
最後にRaspberry Piをシャットダウンします。
$ sudo poweroff
HDDブート!
Raspberry Piの電源ケーブルを抜いたら、MicroSDカードを抜き取り、HDDは接続したまま電源を再投入します。少しするとHDDがスピンアップして、(一度スピンダウンしながら)Raspberry Piが起動します。
HDDから起動していることを確認するには以下のようなコマンドを実行してみると良いでしょう。
pi@raspberrypi:~ $ cat /proc/partitions
major minor #blocks name
(中略)
8 0 306677760 sda
8 1 96256 sda1
8 2 306580480 sda2
pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 288G 1.2G 272G 1% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 6.2M 457M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/sda1 93M 20M 73M 22% /boot
pi@raspberrypi:~ $ mount | grep sda
/dev/sda2 on / type ext4 (rw,noatime,data=ordered)
/dev/sda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
まとめ
Pi Driveを使用して、Raspberry Pi 3でUSB-HDDブートする方法を紹介しました。MicroSDカードが不要になるので、書き換え寿命を気にする必要がなくなるのは便利かもしれません。
あと、Pi Driveについて、一つ気なるところをあげるとすると、アクセスランプの白色LEDがまぶしすぎる点でしょうか……。目に跡が残るくらい明るいんですよね……w
fstab 書き換えコマンドを誤記述されてる様です。
ご指摘ありがとうございました。修正いたしました。