やりたいこと

  • Ubuntu ServerをSDカードに焼いた状態で起動
  • Raspberry Pi上でSDカードをSSDにコピー
  • そのままSSDから起動

SSDを挿入する

今回購入したのはArgon ONE M.2ケース

M.2 SSDに関しては,MVNE接続には非対応で,SATA接続のみに対応しているので注意する.

Raspberry piを起動後,fdisk -lコマンドで,/dev/sdaが認識されていることを確認する

$ sudo fdisk -l
...
省略
...
Disk /dev/sda: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: Forty
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbb5da92e

SDカードをSSDにコピー

まずrpi-cloneをRaspberry piにインストール. 本家のrpi-cloneだとUbuntu Serverでは動かなかったので,matthijskooijman氏のフォーク版を使用する

cd ~
git clone https://github.com/matthijskooijman/rpi-clone.git -b keep-fs-labels
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/bin

次にsudo rpi-clone sdaコマンドを実行する

$ sudo rpi-clone sda
...
省略
...
Initialize and clone to the destination disk sda?  (yes/no): yes # yesと入力しエンターキーを押す
Optional destination ext type file system label (16 chars max): # エンターキーを押す

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  /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 - 08:23:51    End - 08:26:37    Elapsed Time - 2:46

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

Hit Enter when ready to unmount the /dev/sda partitions ... # エンターキーを押す
  unmounting /mnt/clone/boot/firmware
  unmounting /mnt/clone
===============================

fdisk -lで正しく書き込まれているか確認./sda1/sda2が生成されているので大丈夫そう

...
省略
...
Disk /dev/sda: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: Forty
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x9fc6f1c8

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sda1  *      2048    526335    524288   256M  c W95 FAT32 (LBA)
/dev/sda2       526336 500118191 499591856 238.2G 83 Linux

起動順位設定

SSDから起動するように変更する

まずraspi-configをインストール

sudo apt update
sudo apt install raspi-config

次に実行

sudo raspi-config

6 Advanced OptionsA6 Boot Order, B2 USB Bootの順で選択する

再起動&動作確認

再起動後,もう一度ssh接続を行う.

lsblkコマンドで確認すると,/sda2にマウントされていることがわかる.

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  59.2M  1 loop /snap/core20/1977
loop1         7:1    0  59.3M  1 loop /snap/core20/2019
loop2         7:2    0 109.6M  1 loop /snap/lxd/24326
loop3         7:3    0  46.4M  1 loop /snap/snapd/19459
loop4         7:4    0  35.5M  1 loop /snap/snapd/19998
sda           8:0    0 238.5G  0 disk
├─sda1        8:1    0   256M  0 part
└─sda2        8:2    0 238.2G  0 part /
mmcblk0     179:0    0  14.5G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  14.2G  0 part

これでも良かったが,なぜか/boot/firmwareがまだSDカードにマウントされているようなので,SDカードを抜いて再起動すると両方ともsdaが使われるようになった.

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0  59.2M  1 loop /snap/core20/1977
loop1    7:1    0  59.3M  1 loop /snap/core20/2019
loop2    7:2    0  46.4M  1 loop /snap/snapd/19459
loop3    7:3    0 109.6M  1 loop /snap/lxd/24326
loop4    7:4    0  35.5M  1 loop /snap/snapd/19998
sda      8:0    0 238.5G  0 disk
├─sda1   8:1    0   256M  0 part /boot/firmware
└─sda2   8:2    0 238.2G  0 part /