tomo_stoneのメモ帳

ついったーに収まらないやつはこちら

Raspberry PiにHDDを繋いで、OSをインストール

USBブートは上手くいきませんでした......(;-ω-)

やったこと

  • USB接続したHDDにOS(Raspbian)をインストール
  • microSDカード内のブートローダから、HDD内のRaspbianを起動する設定

今回は環境を一新&USBブート化したいと思って、 microSDカードにddコマンドでイメージファイルを書き込む操作を、 HDDに対してやってみました。

とりあえず"環境を一新"するほうはできたのでメモ。

環境

  • ハードウェア
    • Raspberry Pi 3B ("+"じゃないほう)
    • microSDカード(16GB, class10)
    • HDD (2TB, 3.5inch)
    • SATA USB 3.0 変換アダプタ(ACアダプタ付き)

  • OS

HDDにOSをインストール

今回はmicroSDカードに入っているRaspbianから操作しています。

  • HDDの接続を行う
  • バイスファイルを確認(今回はsdaがHDD、mmcblk0はSDカード)
    • 以下はblkidを使った例
user@raspberrypi:~$ blkid
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1.8T  0 disk
mmcblk0     179:0    0 14.7G  0 disk
├─mmcblk0p1 179:1    0 43.1M  0 part /boot
└─mmcblk0p2 179:2    0 14.6G  0 part /
  • OSのイメージファイルを用意する
    • 私はPCで公式サイトからDLして、それからラズパイに転送しました
    • 今回は2018-11-13-raspbian-stretch-lite.zip

  • ファイルを解凍する
    • $ unzip 2018-11-13-raspbian-stretch-lite.zip

  • HDDにイメージファイルを書き込む(危険なコマンドなので慎重に)
    • # dd bs=4M if=2018-11-13-raspbian-stretch.img of=/dev/sda conv=fsync

  • パーティションの拡大
    • 注: この段階ではUSBブートしようとしていたのでブート領域をそのままにしています
root@raspberrypi /home/user# parted /dev/sda

(parted) print

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  50.2MB  46.0MB  primary  fat32        lba
 2      50.3MB  1866MB  1816MB  primary  ext4

(parted) resizepart 2 100%
(parted) print

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  50.2MB  46.0MB  primary  fat32        lba
 2      50.3MB  2000GB  2000GB  primary  ext4

(parted) quit

ブートローダの設定

※USBのみでブートしたい場合はやることが異なるので注意

  • ブートローダとルートパーティションのPARTUUIDを確認する
    • $ blkid
    • 今回はmmcblk0p1sda2の項を確認

  • /boot/cmdline.txtの変更 (追記しました)
    • ex. # vi /boot/cmdline.txt
    • XXXXXXXXsda2のPARTUUIDに読み替えてください
    • また、自動でパーティションを拡張するスクリプトを無効化します(init=/usr/lib/raspi-config/init_resize.shという部分を削除)
... console=tty1 root=PARTUUID=XXXXXXXX rootfstype=ext4 ...

書き込んだRaspbianの設定

  • sda2をマウントする
    • # mount /mnt/ /dev/sda2

  • fstabのPARTUUIDを書き換える
    • ex. # vi /mnt/etc/fstab
    • YYYYYYYYmmcblk0p1のPARTUUIDに読み替えてください
proc            /proc           proc    defaults          0       0
PARTUUID=YYYYYYYY  /boot           vfat    defaults          0       2
PARTUUID=XXXXXXXX  /               ext4    defaults,noatime  0       1
  • sda2をアンマウントする
    • # umount /mnt

結果

うまく設定できていれば、

  1. 電源を投入
  2. microSDカードのブートローダが起動
  3. ブートローダがHDDのルートパーティションを読み込み、ブートする

みたいな流れでRaspbianが起動します。

上手くいかなかった場合は他のPCを使って設定を直しましょう。

ディスクIOのベンチマーク

hdparmはAPTのパッケージが使えます。 - # apt install hdparm

user@raspberrypi:~$ sudo hdparm -t /dev/mmcblk0 

/dev/mmcblk0:
 Timing buffered disk reads:  30 MB in  3.09 seconds =   9.71 MB/sec

user@raspberrypi:~$ sudo hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads: 102 MB in  3.02 seconds =  33.77 MB/sec

およそ270Mbps。 USB2.0の理論値(480Mbps)には届かず。

USBブートできなかった原因

$ dmesg | less

...
[    2.551665] usb 1-1: New USB device found, idVendor=0424, idProduct=9514
[    2.563530] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.576437] hub 1-1:1.0: USB hub found
[    2.585444] hub 1-1:1.0: 5 ports detected
...
[   11.301430] usb 1-1.2: new high-speed USB device number 5 using dwc_otg
[   11.442967] usb 1-1.2: New USB device found, idVendor=174c, idProduct=55aa
[   11.455298] usb 1-1.2: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[   11.468045] usb 1-1.2: Product: 3.0
[   11.476864] usb 1-1.2: Manufacturer: USB
[   11.486118] usb 1-1.2: SerialNumber: 000000000001
[   11.496730] usb-storage 1-1.2:1.0: USB Mass Storage device detected
...

おそらくHDDがスピンアップする前にタイムアウトしたのでしょうね... (program_usb_boot_timeoutでも5秒でタイムアウト)

まとめ

ひとまずラズパイで大きなストレージが扱えるようになったので、良しとします。

USBブートしたい方は、ちょっと奮発してSSDとかにするのもアリなのかもしれませんね。

参考にしたページ

https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
https://www.raspberrypi.org/forums/viewtopic.php?t=209416
https://wiki.archlinux.jp/index.php/GNU_Parted
https://www.raspberrypi.org/forums/viewtopic.php?t=164500