それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Raspberry pi はGPTを扱えるのか。

疑問に思ったので試してみました。

結論としては。使えた。です。

rpi のディスク構成を GPTに変えてみます。

GPTディスクでも問題なく扱えるのか試してみます。

最初に今の構成を確認しておきます。

lsblkMicroSDを確認します。

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.7G  0 disk
├─mmcblk0p1 179:1    0 41.8M  0 part /boot
└─mmcblk0p2 179:2    0 29.7G  0 part /

USBメモリを用意します。

lsblkUSBメモリを確認します。

sdb                  8:16   1  14.3G  0 disk

適当な手持ちの、USBメモリが16GBで、マイクロSDが32GBです。dd コマンドでまるっとコピーするのはめんどくさそうです。

今回は、rsync --one-file-system を使おうと思います。

USBメモリパーティションを作成する

既存のパーティションを消去します。

sudo sgdisk -Z /deb/sdc

sgdisk でGPTパーティションを作成するには次のようにします。

sudo sgdisk -n "${パーティション番号}:${開始セクタ}:${終了セクタ}" /dev/sdc

パーティションを作成します。

sudo sgdisk -n "0::+250M" -t 0:0700 -c 0:"boot" /dev/sdc
sudo sgdisk -n "1::" -t 1:8300 -c 1:"root" /dev/sdc

gdisk コマンドでインタラクティブにやってもいいと思います。

sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.8

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

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sdb: 30031872 sectors, 14.3 GiB
Model:  SanDisk 3.2Gen1
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): BBBB17B5-7447-4F58-A8CC-8C012946858F
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30031838
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          526335   256.0 MiB   0700  Microsoft basic data
   2          526336        30031838   14.1 GiB    8300  Linux filesystem

protectiv MBR のGPTになりました。

ファイルシステムを初期化します。

sudo mkfs.vfat /dev/sdb1
sudo mkfs.ext4 /dev/sdb2

ついでにラベルもつけておきます。

sudo fatlabel /dev/sdb1 boot
sudo tune2fs /dev/sdb2 root

ラベルを付けておくと、fstab や cmdline.txt でUUID記述より簡潔に完結するので好きです。

ファイルシステムをコピーします。

マウントポイントを作って、コピーしてUSBメモリを複製します。

ルートファイルシステムのコピー

sudo mkdir /mnt/work
sudo mount /sdb2 /mnt/work
sudo rsync -av --progress --one-file-system / /mnt/work
sudo rsync -av --progress --one-file-system / /mnt/work # チェック

bootもコピーします。

sudo mkdir /mnt2
sudo mount /sdb1 /mnt2
sudo rsync -av --progress --one-file-system /boot/firmware/cmdline.txt /mnt2
sudo rsync -av --progress --one-file-system /boot/firmware/cmdline.txt /mnt2

rsync を2回起動しているのは、転送終了のチェックのためです。

わたしの環境では、/boot ではなく、/boot/firmware になっていました。arm64(aarch64) のrpi4 でubuntuだからかもしれません、

cmdline.txt と fstab の確認

cat cmdline.txt
cat fstab.txt

わたしは、UUIDで指定せず、LABEL指定( root=LABEL=root)ですので、特に変える必要はありませんした。

うっかりミスを防ぐために、確認しておきます。UUIDであればディスクのUUIDを指定するべきでしょう。

起動してみます。

レインボーが表示されました。ブートの読み込みが終わったようです。

起動が始まりました。

GPTディスクでも問題なく扱えた

これでGPTディスクは、RaspberryPi で問題なく扱えることがわかりました。

追記

メモを見直してみると、純粋GPTじゃなくてMBR protectiveになっていた。。