この記事は、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
パーティション設定
2つのディスクのパーティションを揃える(parted)
- 移行元のディスクのパーティション情報
- 移行先のディスクを同じ構成に設定
- すっかりおなじみになった parted コマンドを使う
- 厳格にパーティション位置を揃えるため、作業は sector 指定で
移行元ディスクのパーティションテーブル確認
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 では意識する必要はなし
以降先ディスクのパーティションを合わせる
- 新しいディスクにパーティションテーブルを作成
- 各パーティションの作成
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 も切っていきます。
この時点でファイルシステム、名前、フラグは合わなくて構いません。
# 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 の名前尾をあわせて行きます。
ファイルシステムはファイルシステム作成後に正しいものが表示されるので、ここでは調整しません。
# 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 のパーティションとサイズが揃った事が確認できます。
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 |
# 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 用のファイルシステムをつくります
# /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:~#
出来たのか確認してみます。
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 ファイルシステムを作成します。
root@mana:~# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
root@mana:~#
pvs で作成されていることを確認。
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 に追加します。
root@mana:~# vgextend fedora /dev/sdb3
Volume group "fedora" successfully extended
root@mana:~#
追加できると、pvs にも sdb3 が vg:fedora に属している様子がわかります。
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 共に増加しています。
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 があります。
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 にあることがわかります。
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 を外そうとしても、まだ使用中と出てきます。
root@mana:~# vgreduce fedora /dev/sda3
Physical volume "/dev/sda3" still in use
root@mana:~#
pvmove を使って sda3 のデータを sdb3 へ移します。
sda3 の方が容量は大きいですが、データが収まるなら pvmove はいけます。
進捗率が出るので、完了するまで待ちます。
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 でもう移動させるデータがないか念の為確認。
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 ですね。
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 にマウント
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 みたいになるので気をつけましょう。
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 がマウントされるようにマウントし直します。
# アンマウント
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 も更新されているのを確認しましょう。
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 をちゃんと参照しています。
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 のディストリビューションによってパスが異なるので、しっかり確認しましょう。
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 のデバイスパスは永続性が無いためパスが変わると起動できなくなる恐れがあるため使いません
# 書き換えた後の 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
念の為、再度マウントして記述に間違いが無いかも確認しておきましょう。
※間違ったまま再起動すると、起動してこなくなりレスキューが必要になります
# アンマウント
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) イメージも更新しておきます。
# 同じイメージに上書きするときは --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 ブートメニューを更新しておきます
# 現状確認
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) を参照しています。
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 にしておきましょう。
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 か確認しましょう。
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 を削除します
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:~#
ここまでの作業に漏れがなければ、再起動して起動するか確認してみましょう。