はじめに
MicroSDカードが余っていたのでRaspberryPi Zero WH買ったのですが、
いつもMicroSDに書き込むまでの道のりを忘れてググっているので道標として投稿することにしました。
MacBookでとかタイトルにありますが、多分Mac全般に通用すると思います。
書き込むまでの道のり
公式からzipファイルをダウンロードする
https://www.raspberrypi.org/downloads/raspbian/
からダウンロードすればオッケー
とりあえずLite
の方を落とします。curl -OL https://downloads.raspberrypi.org/raspbian_lite_latest
とか、名前をつけたければcurl -o raspbian.zip -L https://downloads.raspberrypi.org/raspbian_lite_latest
などでもおそらく大丈夫。
デスクトップ版がいい場合は国内ミラーとかいうのがあるんでそちらから落としたほうが早いかも。
ダウンロードしたら念の為ハッシュ値の確認を行います。
今回ダウンロードしたのはStretchというバージョンのようです。
> openssl sha256 2018-11-13-raspbian-stretch-lite.zip
SHA256(2018-11-13-raspbian-stretch-lite.zip)= 47ef1b2501d0e5002675a50b6868074e693f78829822eef64f3878487953234d
openssl
入っていない場合は以下のコマンドでも確認できるようです。
> shasum -a 256 2018-11-13-raspbian-stretch-lite.zip
47ef1b2501d0e5002675a50b6868074e693f78829822eef64f3878487953234d 2018-11-13-raspbian-stretch-lite.zip
どっちがいいかは好みの問題でしょうね。
ホームページに記述されているハッシュ値と値が違った場合はダウンロードし直しましょう。
同じなら解凍します。
> unzip 2018-11-13-raspbian-stretch-lite.zip
Archive: 2018-11-13-raspbian-stretch-lite.zip
inflating: 2018-11-13-raspbian-stretch-lite.img
SDカードをフォーマット
(注)新品のMicroSDカードをお持ちで、容量が32GB以下ならばここの手順は不要と思われます。
32GBを超えている場合はRaspberryPiでサポートしていないexFAT形式の可能性があるため、その場合はこの手順が必要になります。
MicroSDカードをお手持ちのMacbookに挿し込み、ターミナルを開きます。
その後、**diskutil list
**と入力し、MicroSDカードが認識されているか確認します。
> diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *121.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 121.1 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +121.1 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 98.7 GB disk1s1
2: APFS Volume Preboot 46.7 MB disk1s2
3: APFS Volume Recovery 512.4 MB disk1s3
4: APFS Volume VM 3.2 GB disk1s4
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *63.9 GB disk2
1: Windows_FAT_32 BE340262 524.3 MB disk2s1
2: Linux_Swap 536.9 MB disk2s2
3: Linux 2.1 GB disk2s3
**/dev/disk2
**が該当のディスクの模様。
見て思い出したのですが、すでにLinuxイメージを書き込んだことがあるMicroSDのようですね。
次に**diskutil eraseDisk
**でMicroSDカードをフォーマットします。
RaspberryPiのブートローダーはFATファイルシステムのみをサポートしているとのことなのでFAT32
でフォーマットします。
> diskutil eraseDisk FAT32 RASPBIAN /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s2 as MS-DOS (FAT32) with name RASPBIAN
512 bytes per physical sector
/dev/rdisk2s2: 124334400 sectors in 1942725 FAT32 clusters (32768 bytes/cluster)
bps=512 spc=64 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=124364800 bspf=15178 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2
ddrescueを使い、MicroSDカードに書き込む
ここで普通はdd
コマンドで書き込むのですが、今まで使っていて、
- 進捗の確認がしづらい
- エラーからの復帰がきつい
などいろいろ感じることがありまして、単純にdd
コマンドよりも使いやすい**ddrescue
**をここで使うことにします。
入っていない場合はbrew install ddrescue
などで入れてしまいましょう。
まず、書き込む前にアンマウントする必要があるのでdiskutil unmountDisk
コマンドを使い、アンマウントしてしまいます。
> diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
その後、ddrescue
を使い、MicroSDカードにイメージを書き込みます。
> sudo ddrescue -f -v -r1 2018-11-13-raspbian-stretch-lite.img /dev/disk2 rescue.log
ここのオプションですが、
**-f, --force
は強制上書きで、-v, --varbose
は詳細表示、-r, --retry-passes
**はリトライ回数指定です。
こちらに詳細な説明ありますが、 まあだいたい上のやつを知っておけばいいと思います。
最後のrescue.log
はログファイルとなります。
> sudo ddrescue -f -v -r1 2018-11-13-raspbian-stretch-lite.img /dev/disk2 rescue.log
GNU ddrescue 1.23
About to copy 1866 MBytes from '2018-11-13-raspbian-stretch-lite.img' to '/dev/disk2'
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 sectors Initial skip size: 128 sectors
Sector size: 512 Bytes
Press Ctrl-C to interrupt
ipos: 1866 MB, non-trimmed: 0 B, current rate: 393 kB/s
opos: 1866 MB, non-scraped: 0 B, average rate: 587 kB/s
non-tried: 0 B, bad-sector: 0 B, error rate: 0 B/s
rescued: 1866 MB, bad areas: 0, run time: 52m 56s
pct rescued: 100.00%, read errors: 0, remaining time: n/a
time since last successful read: n/a
Finished
入力後しばらくして上のようにFinishedと出力されれば書き込み終了です。
終了が確認できたら、diskutil eject /dev/disk2
などしてMicroSDカードを取り出して終わりです。
おつかれさまでした。
さいごに
書いている途中で気づいたのだが、公式にすでに似たようなことやっているのページがあった。
のですが、そっちではdd
を使っているのでまあ投稿する意味あるだろうと思い投稿することにしました。
公式ページのリンクも含めた備忘録と思ってもらって構いません。