5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi 4 Model B で USB ブート(2) パーティション作成編

Last updated at Posted at 2020-09-28

Raspberry Pi 4 Model B で USB ブート(1)」では microSD 用のイメージを USB マスストレージにそのまま書き込んで、その後でパーティションのサイズを変更する手順を記した。
しかし実のところ、USB マスストレージにはシステムのファイルが配置されてさえいればよく、Raspberry Pi Imager や dd コマンドを使って厳密にコピーを行わなければならないわけではない。
ここでは最初にパーティションを作成し、次にファイルをコピーする手順を紹介する。

パーティションの作成

インストールイメージのパーティションを確認する

Raspberry Pi OS (64bit) のインストールイメージのパーティションは gdisk コマンドで調べることができる。

$ unzip 2020-08-20-raspios-buster-arm64.zip
$ gdisk -l 2020-08-20-raspios-buster-arm64.img
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************
:
Number  Start (sector)    End (sector)  Size       Code  Name
   1            8192          532479   256.0 MiB   0700  Microsoft basic data
   2          532480         7380991   3.3 GiB     8300  Linux filesystem

インストールイメージでは MBR によるパーティション管理がされていることがわかる。
なお1つ目のパーティションは /boot、2つ目のパーティションは / に割り当てられる。

パーティションを作成する

gdisk コマンドで以下のようなパーティションを作成する。

$ sudo gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
:
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          526335   256.0 MiB   0700  Microsoft basic data
   2          526336      5860533134   2.7 TiB     8300  Linux filesystem

使用した USB マスストレージの容量は 3TB なので、GPT を選択した。2TB 未満(かつ 1 sector が 512 bytes 以下)なら MBR でも問題ないだろう。
USB マスストレージが HDD なら、ここで swap パーティションを作成してもいい。

パーティションのフォーマット

/bootvfat/ext4 でフォーマットする。

$ sudo mkfs -t vfat /dev/sdb1
$ sudo mkfs -t ext4 /dev/sdb2

ファイルのコピー

インストールイメージ、USB マスストレージをマウントし、内容をコピーする。

$ mkdir img_boot img_root

# イメージ内の /boot, / パーティションを loop デバイスに割り当てる
$ sudo losetup -Pr --show -f 2020-08-20-raspios-buster-arm64.img /dev/loop20
$ sudo mount /dev/loop20p1 img_boot
$ sudo mount /dev/loop20p2 img_root

# ファイルをコピーするため、USB マスストレージのパーティションをマウント
$ mkdir boot root
$ sudo mount /dev/sdb1 boot
$ sudo mount /dev/sdb2 root

# ファイルコピー
$ sudo cp -a img_boot/* boot/
$ sudo cp -a img_root/* root/

# インストールイメージの後片付け
$ sudo umount img_boot img_root
$ sudo losetup -d /dev/loop20
$ rmdir img_boot img_root

設定変更

cmdline.txtfstab のパーティション情報を更新する。

# パーティションの PARTUUID を確認する
$ sudo blkid /dev/sdb?
/dev/sdb1: SEC_TYPE="msdos" UUID="C7EE-35DE" TYPE="vfat" PARTLABEL="Microsoft basic data" PARTUUID="09468d30-111e-4028-8f37-16f65e497c25"
/dev/sdb2: UUID="8aff8673-0851-45af-a8cd-8c31614b9632" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="9522d40d-e6df-422a-a5f6-26195aa7e074"

# root=PARTUUID= の値を上記の /dev/sdb2 の PARTUUID に書き換える
$ cat boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=9522d40d-e6df-422a-a5f6-26195aa7e074 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles

# /boot と / の PARTUUID= に /dev/sdb1 と /dev/sdb2 のものをセットする
# swap など他のパーティションも作成した場合はここで追加しておく
$ cat root/etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=ee96d62f-2fe6-44c0-abcf-f70569772297  /boot           vfat    defaults          0       2
PARTUUID=035df15c-ccbe-45c0-9e9a-f97096bd3ee9  /               ext4    defaults,noatime  0       1

# 後片付け
$ sudo umount boot root
$ rmdir boot root

あとはこの USB マスストレージを Raspberry Pi 4 に接続すれば起動できる。


5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?