NOOBSのインストールとブートについて

ラズパイを購入したので、気になった点を書きとめます。

購入した機器

今回購入した「Raspberry Pi 3 Model B+ スターターセット」の内容は以下のとおりです。

  • Raspberry Pi 3 Model B+ 本体(有線・無線LAN接続、USBポート x4)
  • ケース
  • ACアダプタ
  • HDMIケーブル
  • MicroSDHCカード16GB(NOOBSプリインストール)

手元に届くまでの時間や保障を気にしないのであれば、中華サイトの方が安く購入できるかもしれません。

ラズパイのセットアップ

ラズパイをセットアップするのに以下の機器を用意しました。

  • HDMI接続可能なモニタ
  • SDカードリーダー・ライター
  • キーボードとマウス(USB接続)
  • LANケーブル(有線接続の場合)

NOOBSプリインストールモデルを購入したので、電源投入後は画面の指示に従ってセットアップをおこないます。

セットアップ中の画面については、こちらで紹介されています。

NOOBSのインストール

NOOBSは、ラズパイにRaspbianやLibreELECなどのOSをインストールするためのソフトです。

NOOBSの動作を確認したいので、こちらを参考に現在使用しているSDカードを初期化して、NOOBSを再インストールします。

作業に必要なものは以下のとおりです。

NOOBSは「NOOBS」と「NOOBS Lite」の2種類のイメージが提供されています。ここでは「NOOBS」(v3.0.1 / 2019年4月現在)をダウンロードしてインストールします。

SDカードの構成情報の消去

ラズパイで使用していたSDカードを「ディスクの管理」で確認すると、下図のパーティション構成が確認できるので、SDカードを初期化する前に構成情報を消去します。新品のSDカードを使用する場合は、この手順は必要ありません。

f:id:uso59634:20190501150259p:plain
ラズパイで使用していたSDカード(16GB)

以下は、Windowsでの構成情報消去の手順です。

  1. SDカードリーダー・ライターにSDカード(上図の16GB SDカード)をセットします。
  2. コマンドプロンプト(管理者)」を実行します。
  3. diskpartコマンドでディスク(SDカード)の構成情報を消去します。SDカードのデータは全て消去されるので注意してください。
C:\Windows\system32>diskpart

Microsoft DiskPart バージョン 10.0.17763.1

Copyright (C) Microsoft Corporation.
コンピューター: UNKO

DISKPART> list disk         # SDカードのディスク番号を確認します。

  ディスク       状態            サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0     オンライン           1863 GB      0 B        *
  ディスク 1     オンライン            465 GB      0 B        *
  ディスク 2     オンライン            465 GB      0 B        *
  ディスク 3     オンライン           1863 GB      0 B        *
  ディスク 4     オンライン             14 GB  7168 KB

DISKPART> select disk 4     # この環境ではSDカードはディスク 4です。ディスク 4を選択します。

ディスク 4 が選択されました。

DISKPART> list disk         # 選択したディスクを確認します。

  ディスク       状態            サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0     オンライン           1863 GB      0 B        *
  ディスク 1     オンライン            465 GB      0 B        *
  ディスク 2     オンライン            465 GB      0 B        *
  ディスク 3     オンライン           1863 GB      0 B        *
* ディスク 4     オンライン             14 GB  7168 KB

DISKPART> list partition    # ディスク 4のパーティション構成を確認します。

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ             1821 MB  4096 KB
  Partition 0    拡張                  13 GB  1825 MB
  Partition 2    論理                  31 MB  1828 MB
  Partition 3    論理                  66 MB  1860 MB
  Partition 4    論理                  12 GB  1928 MB

# 次のコマンドで選択したディスク上のデータは、すべて消去されます。

DISKPART> clean             # ディスク 4の構成情報を消去します。

DiskPart はディスクを正常にクリーンな状態にしました。

DISKPART> exit              # diskpartコマンドを終了します。

DiskPart を終了しています...

パーティション構成情報が「ディスクの管理」と異なりますが、diskpartコマンドで確認した「プライマリ x1、論理 x3」が正しい構成情報になります。

SDカードの初期化

SDメモリカードフォーマッター」で、SDカードを初期化(クイックフォーマット)します。

f:id:uso59634:20190505000804p:plain
SDカードの初期化

NOOBSのインストール

初期化したSDカード(ここでは、Hドライブ)に、展開したNOOBSをコピーします。

f:id:uso59634:20190505002948p:plain
展開したNOOBSをSDカードにコピー

以上で、NOOBSのインストールは完了です。

NOOBSのブートについて

少し古い情報(2016年3月)ですが、NOOBSのブートについては、こちらが参考になりました。

低レベルモード

NOOBSをインストールしたSDカードを挿入した状態で電源を入れると、ラズパイは「低レベルモード」で起動します。

  1. ラズパイのROMは、SDカードの/dev/mmcblk0p1(FAT32フォーマットの基本パーティション)のbootcode.binを読み込んで実行します。
  2. bootcode.binはstart.elfを読み込んで実行します。start.elfが存在しない場合(NOOBSには存在しません)は、recovery.elfを読み込んで実行します。
  3. recovery.elfはrecovery.cmdlineを読み込み、recovery.img(Linux kernel)に引き渡してルートファイルシステムとしてrecovery.rfsを読み込みます。
  4. recovery.cmdlineにruninstallerが設定されている場合は「セットアップモード」に移行します。runinstallerが設定されていない場合は「リカバリモード」または「ブートモード」に移行します。初回起動時は、runinstallerが設定されているので「セットアップモード」に移行します。

セットアップモード

「セットアップモード」では、SDカードのパーティション構成を変更します。

  1. /dev/mmcblk0p1(FAT32フォーマットの基本パーティション)に含まれるファイルを保持できる大きさにパーティションのサイズを自動的に縮小して「RECOVERY」とラベルを付けます。
  2. パーティションサイズ縮小後にできた空き領域から/dev/mmcblk0p2(拡張パーティション)を作成します。
  3. 拡張パーティションに/dev/mmcblk0p5(サイズ32MBのext4フォーマットの論理パーティション)を作成して、「SETTINGS」とラベルを付けます。「SETTINGS」パーティションにはNOOBSの設定(どのOSがインストールされているのか、どのパーティションにインストールされているのか、どのOSがデフォルトでロードされるべきかなどの情報や、NOOBSの言語/キーボード設定などの情報)が保存されます。
  4. recovery.cmdlineからruninstallerを削除して、次回起動時に「セットアップモード」に移行しないようにします。「セットアップモード」が再度実行されると、拡張パーティションは初期化されます。
  5. リカバリーモード」に移行します。

リカバリーモード

OSがまだインストールされていないことをNOOBSが検出した場合、またはユーザーがShiftキーを押している場合(または他のトリガー操作が有効な場合)NOOBSは「リカバリーモード」に移行します。

  1. メニューからラズパイにインストールするOSを選択します。
  2. インストールするOSのpartitions.jsonを読み込み、論理パーティションを作成します。
  3. 作成した論理パーティションにインストールするOSを展開します。
  4. OSの展開が完了すると再起動します。

ブートモード

  1. NOOBSは「SETTINGS」パーティションに保存されている情報を使用して、OSのブートパーティションを決定して「ソフトリブート」を実行します。
  2. ブートパーティション/dev/mmcblk0p6からstart.elfを読み込んで実行します。
  3. start.elfはcmdline.txtを読み込み、kernel.img(Linux kernel)に引き渡して、インストールしたOSを起動します。