そうだ、SSD換装しよう
現在自宅でサーバ機として運用しているDeskMini A300をSSD換装することにしました。
このマシンは以前投稿した通り、もともとノートパソコンで動かしていたものが故障したためにDeskMiniに移行したものです。
当時は一刻も早く原状回復したかったのでHDDをそのまま挿げ替えて使い続けていましたが、まあ時代はSSDでしょw という感じでIntelのM.2 SSDとヒートシンクを軽率にポチりました。
実際に取り付ける
パッケージを開けて早速取り付けていきます。
まずは熱伝導両面テープの剥離紙を剥がし、ヒートシンクに貼ります。
これをSSDの上面と合わせ、ゴムバンドで固定していきます。ゴムバンドを通すのに少し力がいりました。こわいです。
DeskMiniのSSDスロットに取り付けます。
移行するための設定をする
本題はここからです。
これまではCSMを有効にしてレガシーBIOSでHDDのOSを起動しており、パーティションは以下のようにGPTでフォーマットされています。
# parted
[sudo] password for paltee:
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sda
Using /dev/sda
(parted) print
Model: ATA FUJITSU MHZ2250B (scsi)
Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
4 1049kB 200MB 199MB bios_grub
1 200MB 67.6GB 67.4GB ext4
2 67.6GB 69.6GB 2048MB linux-swap(v1)
3 69.6GB 230GB 161GB ext4 msftdata
今回はSSDに移行してUEFIブートで起動できるようにしたいので、UEFI用のブートローダを使えるようにする必要があります。
BIOSブートとは異なりEFI System Partitionが必要となりますが、まっさらなSSDにはそんなものはないのでおててで作ってよしなに設定していきます。
HDDに現状存在しているbios_grub
の領域はレガシーBIOS(not UEFI)を利用する環境でGPTを使う条件のもと、grubをインストールするために必要らしいです。grub-install /dev/sda
を実行すると/dev/sda
にあるBIOS Boot Partition(bios_grub
)を発見して必要なデータを書き込んでくれます。
UEFIの場合はEFI System Partition(FAT32 with boot flag)に書き込む必要があり、サイズは512MiBが推奨されています。
実際にコピーされるデータは十分小さいものの、OSの数だけデータが必要となる上に、grubは直接インストールされるので余裕を持たせておくためらしいです。
実際の手順
今回は/dev/sda
(HDD)にインストールされているUbuntuを/dev/nvme0n1
(SSD)に移行します。
まず移行作業に入る前に、apt install grub-efi-amd64
でUEFIブート用のパッケージをインストールしておきます。(今回移行中はネットワークに接続しないので)
一度マシンの電源を切ってからBIOS設定を開き、CSMを無効化してLive USBでUbuntuを起動します。
Ctrl + Alt + F2
で仮想コンソールを開き、ubuntuユーザでログインします。
ここでlsblkを実行し、SSDのデバイス名を確認します。
今回は/dev/nvme0n1
で認識されていました。
パーティション設定
まずはパーティションラベルをGPTに設定します。
# parted /dev/nvme0n1
(parted) mklabel gpt
続いてEFI System Partition (ESP)を作成します。
(parted) mkpart ESP fat32 1MiB 501MiB
(parted) set 1 esp on
この時点でboot, esp
のフラグも立ちます。
続いてOS用のパーティションを作成します。
今回はddコマンドで元のOSをクローンするため、コピー元のパーティションよりも大きなサイズで確保する必要があります。
(parted) mkpart primary ext4 501MiB 70.5GiB
(parted) exit
終わりに、ESPをフォーマットします。
# mkfs.fat -F32 /dev/nvme0n1p1`
既存OSのクローン
ddで既存のOSをクローンします。
# dd if=/dev/sda1 of=/dev/nvme0n1p2 status=progress bs=64K
まあまあ時間がかかるのでお茶でも淹れて気長に待ちます。
今回は67GB (63GiB)で1150秒かかりました。
続いてクローンしたOSのUUIDを変更します。
UUIDはパーティションごとに一意に設定でき、ハードウェア構成の変更に対しても不変な識別子として利用できます。
クローンしたままだとクローン元とクローン先で同一のUUIDを持つことになるので、適切に区別するためにクローン先へ新たなUUIDを割り当てます。
# tune2fs -U random /dev/nvme0n1p2
今回はこのコマンドを実行しようとするとe2fsck -f /dev/nvme0n1p2
しなさいと言われるので、これを実行してから先のコマンドを走らせます。
fstabの更新とブートローダのインストール
まず[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
がUEFIを出力することを確認します。
コマンドを手打ちするのは面倒なのでls /sys/firmware/efi
が存在することを確認すればいいんですが。
続いてクローン先のパーティションを参照できるようにマウントします。
# mount /dev/nvme0n1p2 /mnt
# mkdir -p /mnt/boot/efi
# mount /dev/nvme0n1p1 /mnt/boot/efi
# for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done
# modprobe efivars
# chroot /mnt
chrootでSSDのOSパーティションに入ったら、/etc/fstab
のUUIDを更新します。
予めblkid /dev/nvme0n1p2 > /tmp/uuid
でUUIDを控えておき、vimで複窓を開いてコピペするのが楽だと思います。
fstabはmount pointが/
になっている行の先頭を変更します。
また、/boot/efi
をマウントできるようにしなければならないため、同様に/dev/nvme0n1p1
のUUIDを調べ、以下のエントリを追加します。
UUID=AAAA-AAAA /boot/efi vfat umask=0077 0 1
続いて以下のようにブートローダをインストールします。
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy --debug
再起動
ここまでの手順を踏んだ後、再起動してBIOS設定からデバイスの起動順を確認します。
SSDが上位に存在することを確認して改めて再起動し、SSD側のOSが立ち上がっていれば無事終了です。
感想
この手順通りにやればよかったのですが、実際はfstabへUUIDを反映する前にブートローダをインストールしてしまい、そのまま再起動して移行前のHDDのOSが立ち上がるというヘマをしました。わりと原因が分からず1時間ぐらい溶かしてしまったのでつらかった。
最終的に無事移行チャレンジには成功し、実際に起動時間が爆速になったのを体感したのでやはりSSDはつよいなあという気持ちになりました。
HDDはバックアップ兼大きめのファイル用のストレージとして流用したいと思います。
参考
- https://www.kinryokai.net/modules/news/article.php?storyid=178
- https://forum.manjaro.org/t/how-to-switch-from-legacy-to-uefi/81956
- https://askubuntu.com/questions/509423/which-commands-to-convert-a-ubuntu-bios-install-to-efi-uefi-without-boot-repair
- https://blog.getreu.net/projects/legacy-to-uefi-boot/
- https://keens.github.io/blog/2015/10/05/dd_depcnohikkoshiwoshitarakidoushinakatta/
- https://wiki.gentoo.org/wiki/GRUB2/ja#BIOS_.E3.81.A8_GPT
- http://nort-wmli.blogspot.com/2016/12/uefi-grub-install-grub-update.html
- https://orumin.blogspot.com/2013/01/grubefi.html
- https://www.kinryokai.net/modules/news/article.php?storyid=178
- https://www.ctrl.blog/entry/esp-size-guide.html
- https://www.miraclelinux.com/tech-blog/qwi8ni
- https://wiki.archlinux.jp/index.php/EFI_システムパーティション