やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

RaspberryPiOSをインストールする(RPI4B 2021-05-07)

 既存のラズパイを使って新しいSSDにOSをインストールする。

情報源

必要なもの

手順

  1. OSをダウンロードする
  2. SSDにOSをインストールする
  3. SSDを初回ブートする

1. OSをダウンロードする

項目
URL 2021-05-07-raspios-buster-armhf.zip
名前 Raspberry Pi OS with desktop
リリース日 2021-05-07
カーネル 5.10
サイズ 1180MB
SHA256 b6c04b34d231f522278fc822d913fed3828d0849e1e7d786db72f52c28036c62

 ブラウザからふつうにダウンロードしてもいいが、時間がかかるようならダウンローダaria2にて高速化できる。

sudo apt install -y aria2
time aria2c -x10 https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2021-05-28/2021-05-07-raspios-buster-armhf.zip

 12分かかった。

[#bb3045 1.1GiB/1.1GiB(99%) CN:1 DL:313KiB ETA:1s]                                                                                    
07/21 10:20:05 [NOTICE] ダウンロード完了: /tmp/work/2021-05-07-raspios-buster-armhf.zip

ダウンロード結果:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
bb3045|OK  |   1.7MiB/s|/tmp/work/2021-05-07-raspios-buster-armhf.zip

凡例:
(OK):ダウンロード完了しました

real    11m28.775s
user    1m17.096s
sys 0m30.790s

 SHA256でファイル破損チェックする。数十秒かかった。

IMG=2021-05-07-raspios-buster-armhf.zip
SHA256=b6c04b34d231f522278fc822d913fed3828d0849e1e7d786db72f52c28036c62
echo "$SHA256  $IMG" > expected.txt
time sha256sum $IMG > actual.txt
diff expected.txt actual.txt

 diffで何も表示されなければOK。

2. SSDにOSをインストールする

 既存のマシン(ラズパイ)を使ってSSDにOSを書き込む。

  1. ラズパイを起動する
  2. SSDとラズパイをUSB3.0で接続する
  3. 端末を起動してlsblk -pコマンドを実行する
  4. SSDのデバイスIDを確認する(ファイルサイズなどをヒントにして)
  5. アンマウントする
  6. ddコマンドを実行する
  7. 完了(数分くらいで完了予定)

 今回、書き込み先となるSSDのデバイスIDは/dev/sdbだった。

lsblk -p
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0 111.8G  0 disk 
├─/dev/sda1   8:1    0   256M  0 part /boot
└─/dev/sda2   8:2    0 111.5G  0 part /
/dev/sdb      8:16   0 223.6G  0 disk 

  /dev/sdbはマウントされていないため、アンマウントする必要はない。もしマウントされていたらumount /dev/sdXNのように対象デバイスの全パーティションをアンマウントすること。

 SSDにOSを書き込む。zipファイルを展開しつつ。

DEV=/dev/sdb
time unzip -p "$IMG" | sudo dd of=$DEV bs=4M conv=fsync

展開せず焼いてしまった場合ブートしない  zipファイルを展開せずに書き込んでしまった場合、ブートしない。ブート画面で「Unable to read partition as FAT」と怒られてしまう。忘れずunzipで展開すべし。

 1分ほどで完了。さすがUSB3.0。速い。展開後は4GBくらいになった。

0+60149 レコード入力
0+60149 レコード出力
3980394496 bytes (4.0 GB, 3.7 GiB) copied, 68.458 s, 58.1 MB/s

real    1m8.507s
user    0m58.401s
sys 0m23.028s

 lsblk -pでみてみるとパーティションが作られている。

$ lsblk -p
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0 111.8G  0 disk 
├─/dev/sda1   8:1    0   256M  0 part /boot
└─/dev/sda2   8:2    0 111.5G  0 part /
/dev/sdb      8:16   0 223.6G  0 disk 
├─/dev/sdb1   8:17   0   256M  0 part 
└─/dev/sdb2   8:18   0   3.5G  0 part 

 df -hでみるとマウントはされていなかった。なのでそのままUSBをぶっこ抜く。

2. SSDを初回ブートする

手順

 公式には以下コマンドで書き込むとある。

dd if=2021-05-07-raspios-buster-armhf.zip of=/dev/sdX bs=4M conv=fsync

 かつて私がラズパイ4過去記事を作ったときのコマンドは以下。

time sudo dd bs=4M if=2021-05-07-raspios-buster-armhf.zip of=/dev/sdb conv=fsync status=progress

 変更箇所を変数にする。ついでにSHA256でファイル破損チェックも加えると以下。

SHA256=b6c04b34d231f522278fc822d913fed3828d0849e1e7d786db72f52c28036c62
IMG=2021-05-07-raspios-buster-armhf.zip
DISK=/dev/sdb

echo "$SHA256  $IMG" > expect.txt
shasum -a 256 $IMG > actual.txt
diff expect.txt actual.txt

time sudo dd bs=4M if="$IMG" of="$DISK" conv=fsync status=progress

 1分で終わった。早っ! さすがUSB3.0

1207959552 bytes (1.2 GB, 1.1 GiB) copied, 66 s, 18.3 MB/s
295+1 レコード入力
295+1 レコード出力
1237837307 bytes (1.2 GB, 1.2 GiB) copied, 66.5108 s, 18.6 MB/s

real    1m6.720s
user    0m0.027s
sys 0m9.013s

3. SSDを初回ブートする

 作ったSSDを初回ブートする。初回ブートは、上記インストール後にはじめてブートするときのことである。このときディスク容量を拡張するなど特殊な処理を自動で行ってくれる。

 HDD/SSDケースのコントロールチップによってはブートしないことがある。そのときは/boot/cmdline.txtの先頭にusb-storage.quirks=152d:0578:uを追記してから再度ブートさせること。

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux