前提と注意事項
以下が前提と注意事項になります。
- Raspberry Pi 4 Model B 8GB RAM を使用しています。
- Raspberry Pi 用に使っていた SD カードにインストールしている Ubuntu は 22.04 です。
- この記事では、遭遇したエラーやなぜそのコマンドを実行したかについて詳しく解説していません。
- 必ずバックアップを取得してから作業を行ってください。それぞれの環境によって異なる要素が多いため、この記事の作業によって現在動いているものが全く動かなくなる可能性が高いです。
- この記事では、SD カードのバックアッ作成に macOS を使用しています。
この記事のゴール
SD カードにインストールした Ubuntu22.04 で動いている Raspberry Pi を、HDD にクローンした Ubuntu をブートして移行することがこの記事のゴールです。
なお、同じように USB 接続 SSD でも同じ手順で移行できると思います。
作業の流れ
以下の順番で作業を行います。
- SD カードのバックアップを作成する
- rpi-eeprom を使ってブートローダーをアップデートする
- raspi-config を使ってブートオーダーを変更する
- HDD にクローンする
SD カードのバックアップを作成する
まずはじめに SD カードにインストールした Ubuntu をバックアップします。ここでは macOS での作業を前提とします。
ターミナルを開いてdiskutil list
コマンドを実行して現在のディスク状況を確認します。
diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: Apple_APFS_ISC Container disk1 524.3 MB disk0s1
2: Apple_APFS Container disk3 994.7 GB disk0s2
3: Apple_APFS_Recovery Container disk2 5.4 GB disk0s3
/dev/disk3 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +994.7 GB disk3
Physical Store disk0s2
1: APFS Volume Macintosh HD 13.4 GB disk3s1
2: APFS Snapshot com.apple.os.update-... 13.4 GB disk3s1s1
3: APFS Volume Preboot 11.2 GB disk3s2
4: APFS Volume Recovery 1.8 GB disk3s3
5: APFS Volume Data 935.9 GB disk3s5
6: APFS Volume VM 24.6 KB disk3s6
/dev/disk4 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +17.1 GB disk4
1: Apple_APFS Container disk5 17.1 GB disk4s1
/dev/disk5 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +17.1 GB disk5
Physical Store disk4s1
1: APFS Volume iOS 17.0.1 21A342 Si... 16.6 GB disk5s1
/dev/disk6 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +1.0 TB disk6
1: EFI EFI 209.7 MB disk6s1
2: Apple_APFS Container disk7 1.0 TB disk6s2
/dev/disk7 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +1.0 TB disk7
Physical Store disk6s2
1: APFS Volume myuserのMacBook P... 952.6 GB disk7s1
/dev/disk8 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *128.2 GB disk8
1: Windows_FAT_32 system-boot 268.4 MB disk8s1
2: Linux 127.9 GB disk8s2
上記から、macOS に接続している SD カードのパスを確認します。上記の場合は、/dev/disk8
が Raspberry Pi 用に使っていた SD カードになります。
この/dev/disk8
をdd
コマンドを使って丸ごとコピー、バックアップします。
$ sudo dd if=/dev/disk8 of=pi_disk_backup status=progress
以下が実行結果です。SD カード内の容量にもよりますが、数 10GB 以上はあると思うのでそれなりに時間がかかります。
$ sudo dd if=/dev/disk8 of=raspberrypi_sd_backup status=progress
Password:
dd: pi_disk_backup: No space left on devicerred 1064.006s, 34 MB/s
70175625+0 records in
70175624+0 records out
35929919488 bytes transferred in 1064.175993 secs (33763137 bytes/sec)
上記を実行すると、現在のディレクトリにraspberrypi_sd_backup
という名前で SD カードのコピーが作成されます。
もし万が一この後の作業で SD カードが壊れてしまった場合は、このコピーから復旧することができます。
rpi-eeprom を使ってブートローダーをアップデートする
これ以降は Raspberry Pi での作業になります。SD カードを Raspberry Pi に戻して通常通り SD カードから起動します。
起動後、apt
コマンドを使ってrpi-eeprom
をインストールします。rpi-eeprom
は RaspberryPi 公式のツールで、ブートローダーをアップデートするためのものです。
$ sudo apt install rpi-eeprom
インストール後、以下でブートローダーをアップデートします。
$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: 2023年 1月 11日 水曜日 17:40:52 UTC (1673458852)
LATEST: 2022年 1月 25日 火曜日 14:30:41 UTC (1643121041)
RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
Use raspi-config to change the release.
VL805_FW: Using bootloader EEPROM
VL805: up to date
CURRENT: 000138c0
LATEST: 000138c0
上記のようにBOOTLOADER: up to date
となっている場合は最新のためアップデートしなくて OK です。
もし以下のようにBOOTLOADER: update available
となっている場合は、利用可能なアップデートがあります。
$ sudo rpi-eeprom-update
BOOTLOADER: update available
CURRENT: 2023年 1月 11日 水曜日 17:40:52 UTC (1673458852)
LATEST: 2022年 1月 25日 火曜日 14:30:41 UTC (1643121041)
RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
Use raspi-config to change the release.
VL805_FW: Using bootloader EEPROM
VL805: up to date
CURRENT: 000138c0
LATEST: 000138c0
BOOTLOADER: update available
となっている場合は、以下を実行してブートローダーをアップデートします。
$ sudo rpi-eeprom-update -a
再度sudo rpi-eeprom-update
を実行してBOOTLOADER: up to date
となることを確認してください。
以下がrpi-eeprom
の公式リポジトリです。
rpi-eeprom
This repository contains the scripts and pre-compiled binaries used to create the rpi-eeprom package which is used to update the Raspberry Pi 4 and Raspberry Pi 5 bootloaders EEPROM images.
github.com
raspi-config を使ってブートオーダーを変更する
Raspberry Pi が SD カードではなく、USB 接続した外付けの HDD から起動できるようにするためにブートオーダーを変更します。
そのためにraspi-config
をインストールします。
$ sudo apt install raspi-config
このインストールにはそれなりに時間がかかります。
インストールが完了したら、以下でraspi-config
を実行します。
$ sudo raspi-config
上記を実行すると、以下のような画面がターミナル内に表示されます。

上記はraspi-config
のデフォルトユーザーの指定です。それぞれのユーザー名が表示されていると思いますので特に問題なければそのままで Enter します。
続いて以下のように表示されるので、6 Advanced Options
を選択して Enter を押下します。

次はA6 Boot Order
を選択して Enterを押下します。

B2 USB Boot
を選択して Enter

以下のように表示されるのでOK
で Enter します。

以下のように最初の画面に戻るので、矢印キーで移動してFinish
を選択して Enter を押下して終了します。

最後に以下のように再起動するか確認されるため、Yes
のまま Enter を押下して再起動してください。

以上で USB 接続のドライブから起動できるようになり、ブートオーダーの変更が完了しました。
No EEPROM bin file found for version が出る場合
前節の手順で、B2 USB Boot
を選択した場合に以下のようにNo EEPROM bin file found for version 2023-01-11
というエラーが表示される場合があります。

OK
を選択して Enter を押下すると以下も表示されると思います。

このような場合は、再度sudo raspi-config
を実行し、6 Advanced Options
を選択して Enter を押下します。
続いてA7 Bootloader Version
を選択して Enter を押下します。

E1 Latest Use the latest version boot ROM software
を選択して Enter を押下します。

以下のように表示されるので、Yes
を選択して Enter を押下します。

以下のように表示されて完了します。

raspi-config
の最初の画面に戻るのでFinish
を選択して Enter を押下し、再起動の確認が出たらYes
で再起動してください。
再起動後、改めてraspi-config
を実行して前節の作業を行ってみください。今度はNo EEPROM bin file found for version
が表示されずに完了できると思います。
HDD にクローンする
ブートオーダーを変更して再起動後、Raspberry Pi で以下を実行してクローン用のツールであるrpi-clone
を準備します。
以下のコマンドは、rpi-clone
の公式リポジトリにある手順に従っています。詳しくは公式リポジトリを見てみてください。
$ git clone https://github.com/billw2/rpi-clone.git
$ cd rpi-clone
$ sudo cp rpi-clone /usr/local/sbin/sys-clone
$ sudo cp rpi-clone-setup /usr/local/sbin/sys-clone-setup
続いてクローンする前にlsblk
を使って外付けの HDD が認識されているか確認します。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 59.2M 1 loop /snap/core20/1977
loop2 7:2 0 59.3M 1 loop /snap/core20/2019
loop3 7:3 0 68.5M 1 loop /snap/core22/861
loop4 7:4 0 68.5M 1 loop /snap/core22/867
loop5 7:5 0 228.2M 1 loop /snap/firefox/3357
loop6 7:6 0 230.8M 1 loop /snap/firefox/3415
loop7 7:7 0 334M 1 loop /snap/gnome-3-38-2004/141
loop8 7:8 0 334M 1 loop /snap/gnome-3-38-2004/145
loop9 7:9 0 465.4M 1 loop /snap/gnome-42-2204/133
loop10 7:10 0 475.1M 1 loop /snap/gnome-42-2204/143
loop11 7:11 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop12 7:12 0 44.4M 1 loop /snap/snap-store/639
loop13 7:13 0 35.5M 1 loop /snap/snapd/20102
loop14 7:14 0 11.7M 1 loop /snap/snap-store/963
loop15 7:15 0 35.5M 1 loop /snap/snapd/20298
loop16 7:16 0 292K 1 loop /snap/snapd-desktop-integration/50
loop17 7:17 0 416K 1 loop /snap/snapd-desktop-integration/85
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 260M 0 part
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 464.8G 0 part
└─sda4 8:4 0 675M 0 part
mmcblk0 179:0 0 119.4G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 119.1G 0 part /var/snap/firefox/common/host-hunspell
上記のように、私の環境だとsda
に 500GB の HDD が認識されています。Raspberry Pi に USB 接続している HDD ディスクです。
以下のようにsys-clone
コマンドを使ってsda
にクローンを実行します。
$ sudo sys-clone sda
以下が実行結果です。
$ sudo sys-clone sda
Booted disk: mmcblk0 128.2GB Destination disk: sda 500.1GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot/firmware 256.0M fat32 -- 1 260.0M fat32 --
2 root 119.1G ext4 writable 2 16.0M -- --
3 464.8G -- --
4 675.0M ntfs --
---------------------------------------------------------------------------
== Initialize: IMAGE partition table - FS types conflict ==
1 /boot/firmware (139.0M used) : MKFS SYNC to sda1
2 root (71.5G used) : RESIZE MKFS SYNC to sda2
---------------------------------------------------------------------------
Run setup script : no.
Verbose mode : no.
-----------------------:
** WARNING ** : All destination disk sda data will be overwritten!
-----------------------:
Initialize and clone to the destination disk sda? (yes/no):
sys-clone
を実行すると、
Initialize and clone to the destination disk sda? (yes/no):
と聞かれるので、yes
と入力して Enter を押下します。
さらに今度は
Optional destination ext type file system label (16 chars max):
と聞かれるので、writable
と入力して Enter を押下します。
ちなみに、ここのwritable
は上記の 7 行目に表示されているファイルシステムがext4
のパーティションのラベルと同じ値にしてください。
以下のように処理が開始されます。
$ sudo sys-clone sda
Booted disk: mmcblk0 128.2GB Destination disk: sda 500.1GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot/firmware 256.0M fat32 -- 1 260.0M fat32 --
2 root 119.1G ext4 writable 2 16.0M -- --
3 464.8G -- --
4 675.0M ntfs --
---------------------------------------------------------------------------
== Initialize: IMAGE partition table - FS types conflict ==
1 /boot/firmware (139.0M used) : MKFS SYNC to sda1
2 root (71.5G used) : RESIZE MKFS SYNC to sda2
---------------------------------------------------------------------------
Run setup script : no.
Verbose mode : no.
-----------------------:
** WARNING ** : All destination disk sda data will be overwritten!
-----------------------:
Initialize and clone to the destination disk sda? (yes/no): yes
Optional destination ext type file system label (16 chars max): writable
Initializing
Imaging past partition 1 start.
=> dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=5 ...
Resizing destination disk last partition ...
Resize success.
Changing destination Disk ID ...
=> mkfs -t vfat -F 32 /dev/sda1 ...
=> mkfs -t ext4 -L writable /dev/sda2 ...
容量にもよりますが、完了までに1時間から数時間かかると思います。
最終的に以下のようにCloned partitions are mounted on /mnt/clone for inspection or customizing.
と表示されて完了します。
最後に、Hit Enter when ready to unmount the /dev/sda partitions ...
と表示されているので、適当なキーを押下して終了します。
Initializing
Imaging past partition 1 start.
=> dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=5 ...
Resizing destination disk last partition ...
Resize success.
Changing destination Disk ID ...
=> mkfs -t vfat -F 32 /dev/sda1 ...
=> mkfs -t ext4 -L writable /dev/sda2 ...
Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sda2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sda1 on /mnt/clone/boot/firmware
=> rsync /boot/firmware/ /mnt/clone/boot/firmware ...
===============================
Done with clone to /dev/sda
Start - 23:08:35 End - 23:56:02 Elapsed Time - 47:27
Cloned partitions are mounted on /mnt/clone for inspection or customizing.
Hit Enter when ready to unmount the /dev/sda partitions ...
以下のように表示されて完了します。
Hit Enter when ready to unmount the /dev/sda partitions ...
unmounting /mnt/clone/boot/firmware
unmounting /mnt/clone
===============================
以上でクローンが完了です。Raspberry Pi をシャットダウンし、SD カードを抜いた状態で起動してみてください。問題なく起動できれば完了です。
まとめ
Raspberry Pi で SD カードにインストールした Ubuntu を HDD にクローンして移行する手順を解説しました。