Raspberry Pi 3とPi DriveでUSB HDDブートをしてみよう

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とは?

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

パッケージはこのような感じです。

IMG_4921

側面には円周率も……!

IMG_4922

Pi Driveはberrybootを使用したHDDブートモードが用意されています。ただ、berrybootがMicroSDカードから起動するようなので完全にSDカードレスにできるわけではないようです。また、Raspberry Pi3リリース前にリリースされたパッケージでしたので、そもそもRaspberry Pi 3には対応していないようでした。

IMG_4923

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


Raspberry Pi 3でCentOS

昨晩、CentOSのRaspberry Pi 3向けのイメージが公開されたようです(RPi2も同じイメージで起動するようです)。なお、Raspbian以外のディストリビューションでは、Ubuntu MATEもRPi2/3対応イメージが公開されています。

Ubuntu MATEはこっち: https://ubuntu-mate.org/raspberry-pi/

で、CentOSをひとまずインストールしてみました。上記ツイートのURLからディスクイメージをダウンロードして、xzコマンドで解凍後、ddコマンドでSDカードに書き込みます。

CchcuC-WAAAQ000

起動すればあとは普通にCentOSとして使えます。Raspbianの起動時に出るRainbowもCentOSでは出ない模様。Pidoraとかもそうなのかな(実は他のディストリビューションは普段触っていない……)。

無線LANとBluetoothに関しては、ドライバーが読み込まれていないので、ないようでした。まあ、CentOSを使いたい人にそこを求める人はそんなにいないような気はしますが……(?)