linux マシンのブートディスクを HDD から SSD へ移植した

この記事は、EFI ブート環境の fedora linux を HDD から SSD に移植したものです。
出典: https://blog.kstyle.net/2023/02/04/linux-migrated-bootdisk-from-hdd2ssd/

## 発端

縁あって Intel NUC 筐体から自作PC筐体に自宅 linux 環境を移行したため CPU, Memory が爆速になったものの、
システム起動ディスクが HDD だったため、これでは遅すぎるでしょということで SSD への換装を思いつきました。
nvme という手もあったものの、それはデータ領域用に使いたいので SDD までで我慢しています。

## 構成
* OS: fedora 37 (6.1.8-200.fc37.x86_64)
* 内蔵ディスク1: HGST HTS725032A7 320GB HDD (/dev/sda)
* 内蔵ディスク2: Samsung SSD 840  120GB SDD (/dev/sdb)



まず最初に、lsblk でブロックデバイスを確認しておきます。
sda, sdb がそれぞれ期待したディスクなのか、サイズやパーティションの状況から把握します。

```
root@mana:~# lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                   8:0    0 298.1G  0 disk
├─sda1                8:1    0   200M  0 part /boot/efi
├─sda2                8:2    0     1G  0 part /boot
└─sda3                8:3    0 296.9G  0 part
  ├─fedora-root     253:0    0    50G  0 lvm  /
  └─fedora-swap     253:1    0     6G  0 lvm  [SWAP]
sdb                   8:16   0 111.8G  0 disk
```

## パーティション設定
### ２つのディスクのパーティションを揃える(parted)
* 移行元のディスクのパーティション情報
* 移行先のディスクを同じ構成に設定
* すっかりおなじみになった parted コマンドを使う
* 厳格にパーティション位置を揃えるため、作業は sector 指定で

### 移行元ディスクのパーティションテーブル確認

```bash
root@mana:~# parted /dev/sda
GNU Parted 3.5
/dev/sda を使用
GNU Parted へようこそ！ コマンド一覧を見るには 'help' と入力してください。

# 表示(unit)を sector 表示に変更
(parted) u s

# パーティションを確認
(parted) p
モデル: ATA HGST HTS725032A7 (scsi)
ディスク /dev/sda: 625142448s
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始      終了        サイズ      ファイルシステム  名前                  フラグ
 1    2048s     411647s     409600s     fat16       EFI System Partition  boot, esp
 2    411648s   2508799s    2097152s    xfs
 3    2508800s  625141759s  622632960s                                    lvm

(parted)
```

確認項目は以下のものです。設定時に利用するため控えておきます。

* パーティションテーブル
* パーティション番号
* 開始セクタ
* 終了セクタ
* 名前
* フラグ
* ※ファイルシステムは parted では意識する必要はなし

### 以降先ディスクのパーティションを合わせる

* 新しいディスクにパーティションテーブルを作成
* 各パーティションの作成

```bash
root@mana:~# parted /dev/sdb
GNU Parted 3.5
/dev/sdb を使用
GNU Parted へようこそ！ コマンド一覧を見るには 'help' と入力してください。

# セクタ表示への切り替え
(parted) unit s

# パーティションテーブルを gpt に
(parted) mklabel gpt

# gpt になったことを確認したところ
(parted) p
モデル: ATA Samsung SSD 840 (scsi)
ディスク /dev/sdb: 234441648s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted)

# パーティションを sda を参考にあせて作成
(parted) mkpart
パーティションの名前?  []?
ファイルシステムの種類?  [ext2]?
開始?  2048   # sda1 の開始位置と同じ
終了?  411647 # sda1 の終了位置と同じ 

# 作成後の確認
(parted) p
モデル: ATA Samsung SSD 840 (scsi)
ディスク /dev/sdb: 234441648s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始   終了     サイズ   ファイルシステム  名前  フラグ
 1    2048s  411647s  409600s  ext2

(parted)
```

partition 2,3 も切っていきます。
この時点でファイルシステム、名前、フラグは合わなくて構いません。

```bash
# partifion 2
(parted) mkpart
パーティションの名前?  []?
ファイルシステムの種類?  [ext2]?
開始? 411648s
終了? 2508799s

# partifion 3
(parted) mkpart
パーティションの名前?  []?
ファイルシステムの種類?  [ext2]?
開始? 2508800s
終了? 100% # ディスクのサイズが違うので、最後は 100% としておきます

# 確認
(parted) p
モデル: ATA Samsung SSD 840 (scsi)
ディスク /dev/sdb: 234441648s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始      終了        サイズ      ファイルシステム  名前  フラグ
 1    2048s     411647s     409600s     linux-swap(v1)
 2    411648s   2508799s    2097152s
 3    2508800s  234440703s  231931904s  ext2

(parted)
```

### パーティションの名前やフラグを合わせる
name コマンドや toggle コマンドで sdb1 の名前尾をあわせて行きます。
ファイルシステムはファイルシステム作成後に正しいものが表示されるので、ここでは調整しません。

```bash
# partition 1 に名前をつける
(parted) name 1 "EFI System Partition"

# partition 1 に boot(, esp) フラグを建てる
(parted) toggle 1 boot

# 確認
(parted) p
モデル: ATA Samsung SSD 840 (scsi)
ディスク /dev/sdb: 234441648s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号   開始      終了         サイズ       ファイルシステム     名前                  フラグ
 1    2048s     411647s     409600s     linux-swap(v1)    EFI System Partition  boot, esp
 2    411648s   2508799s    2097152s
 3    2508800s  234440703s  231931904s

(parted)
```

これで、パーティションを合わせる作業は終わりです。
lsblk で確認してみると、/dev/sdb のパーティションとサイズが揃った事が確認できます。

```bash
root@mana:~# lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                   8:0    0 298.1G  0 disk
├─sda1                8:1    0   200M  0 part /boot/efi
├─sda2                8:2    0     1G  0 part /boot
└─sda3                8:3    0 296.9G  0 part
  ├─fedora-root     253:0    0    50G  0 lvm  /
  └─fedora-swap     253:1    0     6G  0 lvm  [SWAP]
sdb                   8:16   0 111.8G  0 disk
├─sdb1                8:17   0   200M  0 part
├─sdb2                8:18   0     1G  0 part
└─sdb3                8:19   0 110.6G  0 part
zram0               252:0    0     8G  0 disk [SWAP]
```

## ファイルシステムの作成
パーティションが作成出来たので、ファイルシステムを作成していきます。
/boot/efi は概ね vfat, /boot も xfs で作成されている場合が多いです。
sdb3 は lvm で使用しています。


| partition  | filesystem |
| ---------- | ---------- |
| /dev/sdb1: | vfat       |
| /dev/sdb2: | xfs        |
| /dev/sdb3: | lvm        |




```bash
# blkid で確認しておきます。
root@mana:~# blkid | egrep "sd[ab]|mapper"
# lvm の構成 vg:fedora lv:root, swap
/dev/mapper/fedora-swap: UUID="a73bd854-b926-4fad-9c8d-5a0de56dad8e" TYPE="swap"
/dev/mapper/fedora-root: UUID="110ea81a-375d-4c6a-9283-3d3e87f808d9" BLOCK_SIZE="4096" TYPE="xfs"

# 移植元
/dev/sda1: SEC_TYPE="msdos" UUID="CCF9-CC4D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="50e6a357-b36c-4283-97e0-9f594212a8ee"
/dev/sda2: UUID="03b89034-0a90-4887-aa60-4f75e6dcbe52"  BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="a6cc0e03-b704-47e9-a6f7-849a663a7d74"
/dev/sda3: UUID="JSMxNN-A5lS-N4Wv-wtI8-fA24-aUrU-TLVNDf"      TYPE="LVM2_member" PARTUUID="a8b96832-9f18-4d96-aeb3-cb04f4ff609a"

# 移植先(まだfilesystem がないので uuid や type がない)
/dev/sdb1: UUID="a73bd854-b926-4fad-9c8d-5a0de56dad8e" TYPE="swap" PARTLABEL="EFI System Partition" PARTUUID="4eabf599-0f09-4d99-a3cc-5ed23265f51a"
/dev/sdb2: PARTUUID="9ab77d93-48d5-405f-9e05-74369dbcce83"
/dev/sdb3: PARTUUID="642af119-618d-45ed-ab21-f8868d1c0122"
root@mana:~#

# lvm かどうかは、pvs で確認できます。pvscan でもいいけど、短いコマンドが好きなので。
# /dev/sda3 が lvm2 format されていることがわかります。
root@mana:~# pvs
  PV           VG       Fmt  Attr  PSize    PFree
  /dev/sda3    fedora   lvm2 a--   296.89g  240.89g
root@mana:~#
```

## mkfs でファイルシステム作成
/boot/efi, /boot 用のファイルシステムをつくります

```bash
# /boot/efi 用
root@mana:~# mkfs.vfat /dev/sdb1
mkfs.fat 4.2 (2021-01-31)

# /boot 用
root@mana:~# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2,    projid32bit=1
         =                       crc=1        finobt=1,  sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1  inobtcount=1
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
root@mana:~#
```

出来たのか確認してみます。

```bash
root@mana:~# blkid | grep sd[ab] | sort
/dev/sda1: SEC_TYPE="msdos" UUID="CCF9-CC4D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="50e6a357-b36c-4283-97e0-9f594212a8ee"
/dev/sda2: UUID="03b89034-0a90-4887-aa60-4f75e6dcbe52"  BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="a6cc0e03-b704-47e9-a6f7-849a663a7d74"
/dev/sda3: UUID="JSMxNN-A5lS-N4Wv-wtI8-fA24-aUrU-TLVNDf"      TYPE="LVM2_member" PARTUUID="a8b96832-9f18-4d96-aeb3-cb04f4ff609a"

# uuid, type が割当てられている
/dev/sdb1: SEC_TYPE="msdos" UUID="48E5-5770" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="4eabf599-0f09-4d99-a3cc-5ed23265f51a"
/dev/sdb2: UUID="86c421db-2635-4522-8025-a7518c5bf063"  BLOCK_SIZE="512" TYPE="xfs" PARTUUID="9ab77d93-48d5-405f-9e05-74369dbcce83"
/dev/sdb3: PARTUUID="642af119-618d-45ed-ab21-f8868d1c0122"
root@mana:~#
```

## lvm のファイルシステム作成
lvm では、pvcreate を使って lvm ファイルシステムを作成します。

```bash
root@mana:~# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
root@mana:~#
```

pvs で作成されていることを確認。

```bash
root@mana:~# pvs
  PV           VG       Fmt  Attr  PSize    PFree
  /dev/sda3    fedora   lvm2 a--   296.89g  240.89g
  /dev/sdb3             lvm2 ---   110.59g  110.59g
root@mana:~#
```

lvm format した /dev/sdb3 を root, swap が所属している。
volume group: fedora に追加します。

```bash
root@mana:~# vgextend fedora /dev/sdb3
  Volume group "fedora" successfully extended
root@mana:~#
```

追加できると、pvs にも sdb3 が vg:fedora に属している様子がわかります。
```bash
root@mana:~# pvs
  PV           VG       Fmt  Attr PSize    PFree
  /dev/sda3    fedora   lvm2 a--   296.89g  240.89g
  /dev/sdb3    fedora   lvm2 a--  <110.59g <110.59g
root@mana:~#
```

vgs では vg:fedora の pv 数が 2 に増えていて、vsize, vfree 共に増加しています。
```bash
root@mana:~# vgs
  VG       #PV #LV #SN Attr   VSize    VFree
  fedora     2   2   0 wz--n-  407.48g  351.48g
  nvmeon     1   0   0 wz--n- <119.24g <119.24g
root@mana:~#
```

## lvm のデータ移植
root, swap の移植先が用意出来たので、sda3 から sdb3 へデータを移行していきます。

lvs で logical volume を確認します。
vg:fedora に lv:root, swap があります。

```bash
root@mana:~# lvs
  LV     VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   fedora   -wi-ao---- 50.00g
  swap   fedora   -wi-ao----  6.00g
root@mana:~#
```

lv がどの物理デバイス上にあるか確認します。
実ブロックは /dev/sda3 上にあり、HDD にあることがわかります。

```bash
root@mana:~# lvs -a -o name,copy_percent,devices
  LV     Cpy%Sync Devices
  root            /dev/sda3(1536)
  swap            /dev/sda3(0)
root@mana:~#
```

vgreduce を使って sda3 を外そうとしても、まだ使用中と出てきます。
```bash
root@mana:~# vgreduce fedora /dev/sda3
  Physical volume "/dev/sda3" still in use
root@mana:~#
```

pvmove を使って sda3 のデータを sdb3 へ移します。
sda3 の方が容量は大きいですが、データが収まるなら pvmove はいけます。
進捗率が出るので、完了するまで待ちます。
```bash
root@mana:~# pvmove /dev/sda3 /dev/sdb3
  /dev/sda3: Moved: 0.01%
  /dev/sda3: Moved: 2.85%
  /dev/sda3: Moved: 5.67%
...移行中...
  /dev/sda3: Moved: 94.20%
  /dev/sda3: Moved: 96.91%
  /dev/sda3: Moved: 99.65%
root@mana:~#

# 移行中の lvs でも進捗率が出ています
root@mana:~# lvs -a -o name,copy_percent,devices
  LV        Cpy%Sync Devices
  [pvmove0] 4.13     /dev/sda3(0),/dev/sdb3(0)
  [pvmove0] 4.13     /dev/sda3(1536),/dev/sdb3(1536)
  root               pvmove0(0)
  swap               pvmove0(0)
root@mana:~#
```

pvmove が完了したら I/O も sdb(SSD) に行われているので高速化を体感できるかもしれません。

### root, swap 移行完了後
pvmove でもう移動させるデータがないか念の為確認。

```bash
root@mana:~# pvmove /dev/sda3 /dev/sdb3
  No data to move for fedora.
root@mana:~#

# 物理デバイス上の表記も sdb に変わっています
root@mana:~# lvs -a -o name,copy_percent,devices
  LV     Cpy%Sync Devices
  root            /dev/sdb3(1536)
  swap            /dev/sdb3(0)
root@mana:~#
```

### /dev/sda3 の切り離し
/dev/sda3 から lvm のデータがなくなったので、切り離しと pv の削除を行います。

```
root@mana:~# vgreduce fedora /dev/sda3
  Removed "/dev/sda3" from volume group "fedora"
root@mana:~#

# vg の pv カウントが減った
root@mana:~# vgs
  VG       #PV #LV #SN Attr   VSize    VFree
  fedora     1   2   0 wz--n- <110.59g  <54.59g
  nvmeon     1   0   0 wz--n- <119.24g <119.24g
root@mana:~#

# pvs で /dev/sda3 が vg:fedora から抜けている事を確認 
# sda3 は別のデータ領域として利用するためのこしていますが、
# 不要なら pvremove で消してもいいです
root@mana:~# pvs
  PV           VG       Fmt  Attr PSize    PFree
  /dev/sda3             lvm2 ---   296.89g  296.89g
  /dev/sdb3    fedora   lvm2 a--  <110.59g  <54.59g
root@mana:~#
```

## /boot, /boot/efi の移植
ブートローダーの移植に入ります。
/dev/sdb1, sdb2 ですね。

```bash
root@mana:~# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda               8:0    0 298.1G  0 disk
├─sda1            8:1    0   200M  0 part /boot/efi
├─sda2            8:2    0     1G  0 part /boot
└─sda3            8:3    0 296.9G  0 part
sdb               8:16   0 111.8G  0 disk
├─sdb1            8:17   0   200M  0 part # ここと
├─sdb2            8:18   0     1G  0 part # ここ
└─sdb3            8:19   0 110.6G  0 part
  ├─fedora-root 253:0    0    50G  0 lvm  /
  └─fedora-swap 253:1    0     6G  0 lvm  [SWAP]
zram0           252:0    0     8G  0 disk [SWAP]
root@mana:~#
```

対象の領域を /tmp 配下にマウントしていきます。
作業の流れは以下

* マウントポイント用に /tmp/boot を作成
* /dev/sda2(/boot用 ) を /tmp/boot にマウント
* /tmp/boot/efi を作成
* /dev/sda1(/boot/efi用 ) を /tmp/boot/efi にマウント

```bash
root@mana:~# mkdir /tmp/boot
root@mana:~# mount /dev/sda2 /tmp/boot/
root@mana:~# mkdir /tmp/boot/efi
root@mana:~# mount /dev/sda1 /tmp/boot/efi/

# 期待された結果
root@mana:/tmp# df
ファイルシス             1K-ブロック     使用    使用可 使用% マウント位置
devtmpfs                        4096        0      4096    0% /dev
tmpfs                        8058120    48160   8009960    1% /dev/shm
tmpfs                        3223252     2020   3221232    1% /run
/dev/mapper/fedora-root     52403200 26934888  25468312   52% /
/dev/sda2                    1038336   280444    757892   28% /boot
/dev/sda1                     204580     7352    197228    4% /boot/efi
tmpfs                        8058124        0   8058124    0% /tmp
/dev/sdb2                     983040    39908    943132    5% /tmp/boot
/dev/sdb1                     204560        0    204560    0% /tmp/boot/efi
root@mana:/tmp#
```

### /boot 配下のコピー
cp コマンドで /boot 配下のデータを /tmp/boot に移植していきます。
コマンドを間違えると /tmp/boot/boot みたいになるので気をつけましょう。

```bash
root@mana:~# cp -Rv /boot /tmp
'/boot/efi/EFI' -> '/tmp/boot/efi/EFI'
'/boot/efi/EFI/fedora' -> '/tmp/boot/efi/EFI/fedora'
'/boot/efi/EFI/fedora/grubx64.efi' -> '/tmp/boot/efi/EFI/fedora/grubx64.efi'
'/boot/efi/EFI/fedora/BOOTX64.CSV' -> '/tmp/boot/efi/EFI/fedora/BOOTX64.CSV'
'/boot/efi/EFI/fedora/grub.cfg.rpmsave' -> '/tmp/boot/efi/EFI/fedora/grub.cfg.rpmsave'
'/boot/efi/EFI/fedora/mmx64.efi' -> '/tmp/boot/efi/EFI/fedora/mmx64.efi'
'/boot/efi/EFI/fedora/shim.efi' -> '/tmp/boot/efi/EFI/fedora/shim.efi'
'/boot/efi/EFI/fedora/fw' -> '/tmp/boot/efi/EFI/fedora/fw'
'/boot/efi/EFI/fedora/shimx64.efi' -> '/tmp/boot/efi/EFI/fedora/shimx64.efi'
'/boot/efi/EFI/fedora/grub.cfg' -> '/tmp/boot/efi/EFI/fedora/grub.cfg'
'/boot/efi/EFI/fedora/grubenv.rpmsave' -> '/tmp/boot/efi/EFI/fedora/grubenv.rpmsave'
'/boot/efi/EFI/fedora/fwupia32.efi' -> '/tmp/boot/efi/EFI/fedora/fwupia32.efi'
'/boot/efi/EFI/fedora/fwupx64.efi' -> '/tmp/boot/efi/EFI/fedora/fwupx64.efi'
'/boot/efi/EFI/BOOT' -> '/tmp/boot/efi/EFI/BOOT'
'/boot/efi/EFI/BOOT/BOOTX64.EFI' -> '/tmp/boot/efi/EFI/BOOT/BOOTX64.EFI'
'/boot/efi/EFI/BOOT/fbx64.efi' -> '/tmp/boot/efi/EFI/BOOT/fbx64.efi'
'/boot/efi/3140441669ad4d77b1f802c99802d6e0' -> '/tmp/boot/efi/3140441669ad4d77b1f802c99802d6e0'
'/boot/efi/3140441669ad4d77b1f802c99802d6e0/4.16.6-202.fc27.x86_64' -> '/tmp/boot/efi/3140441669ad4d77b1f802c99802d6e0/4.16.6-202.fc27.x86_64'
'/boot/vmlinuz-6.1.5-200.fc37.x86_64' -> '/tmp/boot/vmlinuz-6.1.5-200.fc37.x86_64'
'/boot/vmlinuz-6.1.7-200.fc37.x86_64' -> '/tmp/boot/vmlinuz-6.1.7-200.fc37.x86_64'
'/boot/vmlinuz-6.1.6-200.fc37.x86_64' -> '/tmp/boot/vmlinuz-6.1.6-200.fc37.x86_64'
'/boot/System.map-6.1.6-200.fc37.x86_64' -> '/tmp/boot/System.map-6.1.6-200.fc37.x86_64'
'/boot/config-6.1.6-200.fc37.x86_64' -> '/tmp/boot/config-6.1.6-200.fc37.x86_64'
'/boot/initramfs-0-rescue-3140441669ad4d77b1f802c99802d6e0.img' -> '/tmp/boot/initramfs-0-rescue-3140441669ad4d77b1f802c99802d6e0.img'
'/boot/vmlinuz-0-rescue-3140441669ad4d77b1f802c99802d6e0' -> '/tmp/boot/vmlinuz-0-rescue-3140441669ad4d77b1f802c99802d6e0'
'/boot/loader' -> '/tmp/boot/loader'
'/boot/loader/entries' -> '/tmp/boot/loader/entries'
'/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.6-200.fc37.x86_64.conf' -> '/tmp/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.6-200.fc37.x86_64.conf'
'/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.5-200.fc37.x86_64.conf' -> '/tmp/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.5-200.fc37.x86_64.conf'
'/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-0-rescue.conf' -> '/tmp/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-0-rescue.conf'
'/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.7-200.fc37.x86_64.conf' -> '/tmp/boot/loader/entries/3140441669ad4d77b1f802c99802d6e0-6.1.7-200.fc37.x86_64.conf'
'/boot/.vmlinuz-6.1.6-200.fc37.x86_64.hmac' -> '/tmp/boot/.vmlinuz-6.1.6-200.fc37.x86_64.hmac'
'/boot/symvers-6.1.6-200.fc37.x86_64.gz' -> '/tmp/boot/symvers-6.1.6-200.fc37.x86_64.gz'
'/boot/initramfs-6.1.6-200.fc37.x86_64.img' -> '/tmp/boot/initramfs-6.1.6-200.fc37.x86_64.img'
'/boot/System.map-6.1.5-200.fc37.x86_64' -> '/tmp/boot/System.map-6.1.5-200.fc37.x86_64'
'/boot/config-6.1.5-200.fc37.x86_64' -> '/tmp/boot/config-6.1.5-200.fc37.x86_64'
'/boot/.vmlinuz-6.1.5-200.fc37.x86_64.hmac' -> '/tmp/boot/.vmlinuz-6.1.5-200.fc37.x86_64.hmac'
'/boot/symvers-6.1.5-200.fc37.x86_64.gz' -> '/tmp/boot/symvers-6.1.5-200.fc37.x86_64.gz'
'/boot/initramfs-6.1.5-200.fc37.x86_64.img' -> '/tmp/boot/initramfs-6.1.5-200.fc37.x86_64.img'
'/boot/System.map-6.1.7-200.fc37.x86_64' -> '/tmp/boot/System.map-6.1.7-200.fc37.x86_64'
'/boot/config-6.1.7-200.fc37.x86_64' -> '/tmp/boot/config-6.1.7-200.fc37.x86_64'
'/boot/.vmlinuz-6.1.7-200.fc37.x86_64.hmac' -> '/tmp/boot/.vmlinuz-6.1.7-200.fc37.x86_64.hmac'
'/boot/symvers-6.1.7-200.fc37.x86_64.gz' -> '/tmp/boot/symvers-6.1.7-200.fc37.x86_64.gz'
'/boot/initramfs-6.1.7-200.fc37.x86_64.img' -> '/tmp/boot/initramfs-6.1.7-200.fc37.x86_64.img'
'/boot/grub2' -> '/tmp/boot/grub2'
'/boot/grub2/themes' -> '/tmp/boot/grub2/themes'
'/boot/grub2/themes/system' -> '/tmp/boot/grub2/themes/system'
'/boot/grub2/fonts' -> '/tmp/boot/grub2/fonts'
'/boot/grub2/fonts/unicode.pf2' -> '/tmp/boot/grub2/fonts/unicode.pf2'
'/boot/grub2/grubenv' -> '/tmp/boot/grub2/grubenv'
'/boot/grub2/grub.cfg' -> '/tmp/boot/grub2/grub.cfg'
root@mana:~#
```

## ブートローダのイメージ書き換え
新しい /boot, /boot/efi に新しい sdb がマウントされるようにマウントし直します。

```bash
# アンマウント
root@mana:~# umount /tmp/boot/efi
root@mana:~# umount /tmp/boot/
root@mana:~# umount /boot/efi
root@mana:~# umount /boot/

# sdb を /boot, /boot/efi にマウント
root@mana:~# mount /dev/sdb2 /boot/
root@mana:~# mount /dev/sdb1 /boot/efi
```

grub2-mkconfig コマンドを使って、ブートローダのイメージを書き換えます。
/boot/efi のあるディスクが変わっているので uuid も更新されているのを確認しましょう。

```bash
root@mana:~# grub2-mkconfig | grep set=boot
Generating grub configuration file ...
  search --no-floppy --fs-uuid --set=boot --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  48E5-5770 # 書き換わっている
  search --no-floppy --fs-uuid --set=boot 48E5-5770 # 書き換わっている
Adding boot menu entry for UEFI Firmware Settings ...
done
root@mana:~#
```

blkid をみてみると、/dev/sdb1 に作った vfat の uuid をちゃんと参照しています。

```bash
root@mana:~# blkid | grep msdos
/dev/sda1: SEC_TYPE="msdos" UUID="CCF9-CC4D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="50e6a357-b36c-4283-97e0-9f594212a8ee"
/dev/sdb1: SEC_TYPE="msdos" UUID="48E5-5770" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="4eabf599-0f09-4d99-a3cc-5ed23265f51a"
root@mana:~#
```

grub2-mkconfig のエントリに問題がなさそうであれば、grub.cfg に書き込みます。
os のディストリビューションによってパスが異なるので、しっかり確認しましょう。

```bash
root@mana:~# find /boot | grep grub.cfg
/boot/efi/EFI/fedora/grub.cfg
root@mana:~#

# grub.cfg に書き出します
root@mana:~# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
root@mana:~#
```

## マウントポイントの書き換え

/etc/fstab で /boot/efi と /boot の uuid を書き換えましょう
blkid でマウント先の uuid を確認して、fstab は uuid 指定でマウントします。
※/dev/sdX のデバイスパスは永続性が無いためパスが変わると起動できなくなる恐れがあるため使いません

```bash
# 書き換えた後の fstab
root@mana:~# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May  9 14:53:33 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/fedora-root /                       xfs     defaults        0 0
/dev/mapper/fedora-swap swap                    swap    defaults        0 0
UUID=86c421db-2635-4522-8025-a7518c5bf063 /boot xfs     defaults        0 0
UUID=48E5-5770           /boot/efi              vfat    umask=0077,shortname=winnt 0 2
```

念の為、再度マウントして記述に間違いが無いかも確認しておきましょう。
※間違ったまま再起動すると、起動してこなくなりレスキューが必要になります

```bash
# アンマウント
root@mana:~# umount /boot/efi
root@mana:~# umount /boot

# mount all でエラーがでないこと
root@mana:~# mount -a

# きちんとマウントされているか確認しましょう
root@mana:~# df
ファイルシス             1K-ブロック     使用    使用可 使用% マウント位置
devtmpfs                        4096        0      4096    0% /dev
tmpfs                        8058120        0   8058120    0% /dev/shm
/dev/mapper/fedora-root     52403200 25746088  26657112   50% /
tmpfs                        8058124        0   8058124    0% /tmp
/dev/sda2                     983040   286628    696412   30% /boot
/dev/sda1                     204560     7348    197212    4% /boot/efi
root@mana:~#
```


## dracut で initramfs を再作成
initramfs (初期 ramdisk) イメージも更新しておきます。

```bash
# 同じイメージに上書きするときは --force をつけましょう
root@mana:~# dracut
dracut: Will not override existing initramfs (/boot/initramfs-6.1.8-200.fc37.x86_64.img) without --force

# エラーが出ないこと
root@mana:~# dracut --force
root@mana:~#

# 念の為タイムスタンプも確認しておきましょう。
root@mana:~# ls -tlr /boot/initramfs-*
-rw------- 1 root root 61698686  1月 25 22:35 /boot/initramfs-0-rescue-3140441669ad4d77b1f802c99802d6e0.img
-rw------- 1 root root 40919503  1月 25 22:35 /boot/initramfs-6.1.6-200.fc37.x86_64.img
-rw------- 1 root root 41056091  1月 26 00:18 /boot/initramfs-6.1.7-200.fc37.x86_64.img
-rw------- 1 root root 41078247  2月  4 13:35 /boot/initramfs-6.1.8-200.fc37.x86_64.img
```

## EFI ブートメニューの更新
最後に、efibootmgr コマンドで efi ブートメニューを更新しておきます

```bash
# 現状確認
root@mana:~# efibootmgr
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0002,0003,0004
Boot0001* Fedora        HD(1,GPT,50e6a357-b36c-4283-97e0-9f594212a8ee,0x800,0x64000)/File(\EFI\FEDORA\SHIMX64.EFI)0000424f
Boot0002* UEFI:CD/DVD Drive     BBS(129,,0x0)
Boot0003* UEFI:Removable Device BBS(130,,0x0)
Boot0004* UEFI:Network Device   BBS(131,,0x0)
root@mana:~#
```

Boot0001:Fedora 起動ディスクが、sda1 の partuuid(50e6a357-b36c-4283-97e0-9f594212a8ee) を参照しています。

```bash
root@mana:~# blkid | grep 50e6a357-b36c-4283-97e0-9f594212a8ee
/dev/sda1: SEC_TYPE="msdos" UUID="CCF9-CC4D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="50e6a357-b36c-4283-97e0-9f594212a8ee"
root@mana:~#
```

sdb1 を参照する boot エントリを追加します。
ファイルのパスは、/EFI/fedora/shimx64.efi そそのまま利用します。
device は /dev/sdb にしておきましょう。

```bash
root@mana:~# efibootmgr -cwl /EFI/fedora/shimx64.efi -L "Fedora2" -d /dev/sdb
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0000,0001,0002,0003,0004
Boot0001* Fedora        HD(1,GPT,50e6a357-b36c-4283-97e0-9f594212a8ee,0x800,0x64000)/File(\EFI\FEDORA\SHIMX64.EFI)0000424f
Boot0002* UEFI:CD/DVD Drive     BBS(129,,0x0)
Boot0003* UEFI:Removable Device BBS(130,,0x0)
Boot0004* UEFI:Network Device   BBS(131,,0x0)
Boot0000* Fedora2       HD(1,GPT,4eabf599-0f09-4d99-a3cc-5ed23265f51a,0x800,0x64000)/File(\EFI\fedora\shimx64.efi)
root@mana:~#
```

新しいエントリ Boot0000 が追加されました。sdb の partuuid に変更されているようです。
4eabf599-0f09-4d99-a3cc-5ed23265f51a が sdb か確認しましょう。

```bash
root@mana:~# blkid | grep 4eabf599-0f09-4d99-a3cc-5ed23265f51a
/dev/sdb1: SEC_TYPE="msdos" UUID="48E5-5770" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="4eabf599-0f09-4d99-a3cc-5ed23265f51a"
/dev/sda1: SEC_TYPE="msdos" UUID="CCF9-CC4D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="50e6a357-b36c-4283-97e0-9f594212a8ee"
root@mana:~#
```

古いエントリ Boot0001 を削除します

```bash
root@mana:~# efibootmgr -b 1 --delete-bootnum
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0000,0002,0003,0004
Boot0000* Fedora2       HD(1,GPT,4eabf599-0f09-4d99-a3cc-5ed23265f51a,0x800,0x64000)/File(\EFI\fedora\shimx64.efi)
Boot0002* UEFI:CD/DVD Drive     BBS(129,,0x0)
Boot0003* UEFI:Removable Device BBS(130,,0x0)
Boot0004* UEFI:Network Device   BBS(131,,0x0)
root@mana:~#
```

ここまでの作業に漏れがなければ、再起動して起動するか確認してみましょう。