[Raspberry Pi4] SDカードからSSDに移行する

RaspberryPi

SDカードで動かしていたラズパイWebサーバをSSDに移行したときのメモ。以前にも同じようなことを書いていて、今回はデータコピーの方法が違うだけ。今回の手順のほうが楽かな。
Ubuntu での手順となっていますが、 Raspberry Pi OS でもほぼ同等の方法で実行できるかと思います。素人作業なので参考にする場合は自己責任でお願いいたします。

試した環境

Raspberry Pi 4 4GB Ubuntu 20.10
移行元: SDカード シリコンパワー microSD 64GB
移行先: ポータブルSSD: SanDisk SSD 480GB

移行前のディスクの情報を確認する

lsblk コマンドで現在のデバイスを確認します。
コンテナが動いているので、ループバックデバイス loopXX がたくさん見えてますが、mmcblk0 がSDカードです。

# 現在のブロックデバイスの状況
$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 88.1M  1 loop /snap/core/11996
loop1         7:1    0 37.5M  1 loop /snap/snapd/14296
loop2         7:2    0 41.3M  1 loop /snap/certbot/1671
loop3         7:3    0   49M  1 loop /snap/core18/2252
loop4         7:4    0 57.4M  1 loop /snap/core20/1244
loop5         7:5    0 65.7M  1 loop /snap/lxd/22151
loop6         7:6    0 88.1M  1 loop /snap/core/11803
loop7         7:7    0   49M  1 loop /snap/core18/2248
loop8         7:8    0 40.4M  1 loop /snap/certbot/1583
loop10        7:10   0 36.5M  1 loop /snap/snapd/14063
loop11        7:11   0 57.5M  1 loop /snap/core20/1274
loop12        7:12   0 65.9M  1 loop /snap/lxd/22116
mmcblk0     179:0    0 58.9G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0 58.7G  0 part /

# ループバックデバイスを非表示にするには -e 7 をつけて実行する
$ lsblk -e 7
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 58.9G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0 58.7G  0 part /

移行先のディスクの情報を確認する

ラズパイにSSDを接続してもう一度確認。sda というデバイスが増えているのがわかります。(※一度ラズパイを動かすのに使ったSSDなので、パーティションが切られていますが、これらのデータは上書きされます。)

$ lsblk -e 7
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 447.1G  0 disk
├─sda1        8:1    0   256M  0 part
└─sda2        8:2    0 446.9G  0 part
mmcblk0     179:0    0  58.9G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  58.7G  0 part /

rpi-clone をいれて データをコピーする

SDカードからSSDにデータをコピーします。データのコピーには rpi-clone を使いました。公式の手順に従いインストールします。

$ git clone https://github.com/billw2/rpi-clone.git 
$ cd rpi-clone
$ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin

インストールしたらクローンを実行します。事前にデーモン等は止めておきましょう。
引数には 移行先 sda (SSD) を指定します。逆のパターン、SSDからSDカードにコピーする場合は、引数には mmcblk0 を指定します。

$ sudo rpi-clone sda

Booted disk: mmcblk0 63.3GB                Destination disk: sda 480.1GB
---------------------------------------------------------------------------
Part               Size    FS     Label           Part   Size    FS     Label
1 /boot/firmware   256.0M  fat32  --              1      256.0M  fat32  --
2 root              58.7G  ext4   writable        2      446.9G  ext4   writable
---------------------------------------------------------------------------
== SYNC mmcblk0 file systems to sda ==
/boot/firmware        (153.5M used)  : SYNC to sda1 (256.0M size)
/                     (10.0G used)   : SYNC to sda2 (446.9G size)
---------------------------------------------------------------------------
Run setup script       : no.
Verbose mode           : no.
-----------------------:

# 実行してよいか? yes を入力
Ok to proceed with the clone?  (yes/no): yes


# 実行中・・・
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 - 15:34:37    End - 15:45:35    Elapsed Time - 10:58

Cloned partitions are mounted on /mnt/clone for inspection or customizing.

# Enterキーを押して、sda をアンマウントして終了。
Hit Enter when ready to unmount the /dev/sda partitions ...
  unmounting /mnt/clone/boot/firmware
  unmounting /mnt/clone
===============================

SSDから起動するように設定する

念の為、ファームウェアのバージョン、ブートローダーの設定を確認します。
Ubuntu には、デフォルトで rpi-eeprom-update が入っていないので、コマンドがない場合は、インストールします。

# rpi-eeprom-update でファームウェアのバージョンを確認する。
# 古いファームウェアだとUSBドライブからのブートに対応していないものがある。
# rpi-eeprom-update コマンドがない場合は sudo apt install -y rpi-eeprom でインストールする
$ sudo rpi-eeprom-update
BCM2711 detected
Dedicated VL805 EEPROM detected
BOOTLOADER: up-to-date
CURRENT: 2020年  9月  3日 木曜日 12:11:43 UTC (1599135103)
 LATEST: 2020年  9月  3日 木曜日 12:11:43 UTC (1599135103)
 FW DIR: /lib/firmware/raspberrypi/bootloader/default
VL805: up-to-date
CURRENT: 000138a1
 LATEST: 000138a1

rpi-eeprom-config コマンドで、SSD からブートするようになっているかを確認します。

# BOOT_ORDER の設定値を確認する
$ rpi-eeprom-config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
TFTP_IP=
TFTP_PREFIX=0
BOOT_ORDER=0x1
SD_BOOT_MAX_RETRIES=3
NET_BOOT_MAX_RETRIES=5
[none]
FREEZE_VERSION=0

BOOT_ORDER=0x1 なので、この設定ではSDカードからしか起動しません。
公式サイトの設定値を参考にしました。SDカードが刺さっていても、USBドライブから優先的に起動させる場合は、0xf14(Try USB first, followed by SD then repeat) とすれば良さそうです。SDカードを優先させる場合は、0xf41 と設定します。

# BOOT_ORDER の値を変更する
$ env EDITOR=vi sudo -E rpi-eeprom-config --edit

[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
TFTP_IP=
TFTP_PREFIX=0
BOOT_ORDER=0xf14 # この値を変更して保存。
SD_BOOT_MAX_RETRIES=3
NET_BOOT_MAX_RETRIES=5
[none]
FREEZE_VERSION=0

# 保存したらリブート
$ sudo reboot

再起動すると、USBドライブから起動するようになります。0xf41を設定した場合は、シャットダウン→SDカードを外して起動という手順になります。

Dockerで動かしていたWordpressやメールサーバーの移行も問題なく行えているようです。

わし
わし

コンテナの移行が面倒だったので、SDカードのまま動かしていましたが、この手順で簡単に移行できました🍣🐟

コメント

タイトルとURLをコピーしました