はじめに
前回の障害発生リハーサル(起動時にSSDが一台外れてしまっていて、そのまま起動したという想定)で、最後に挙げた問題の対策です。
Ubuntu Server は、24.04.2LTSを使用しています。
おさらいすると、以下のパターンC、SSD2のみで起動すると、/boot/efi がなくなる 件です。

パターンA,B:正常時とSSD1のみ(SSD2をはずして)で起動したとき
mohlog@qe3csvr:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 769M 1.5M 768M 1% /run efivarfs 192K 68K 120K 37% /sys/firmware/efi/efivars /dev/md0p1 109G 6.6G 97G 7% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda1 1.1G 6.2M 1.1G 1% /boot/efi tmpfs 769M 12K 769M 1% /run/user/1000 |
パターンC:SSD2のみ(SSD1をはずして)で起動したとき
mohlog@qe3csvr:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 769M 1.5M 768M 1% /run efivarfs 192K 68K 120K 37% /sys/firmware/efi/efivars /dev/md0p1 109G 6.6G 97G 7% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 769M 12K 769M 1% /run/user/1000 |
やりたいことは、常にどちらか生き残っているSSDの第1パーティションを/boot/efiに割り当てることです。

/etc/fstabの設定とUUID
この設定は、/etc/fstabにあります。
青い部分がその設定です。
/etc/fstab の内容
#/etc/fstab: static file system information. # #Use 'blkid' to print the universally unique identifier for a #device; this may be used with UUID= as a more robust way to name devices #that works even if disks are added and removed. See fstab(5). # #/ was on /dev/md0p1 during curtin installation /dev/disk/by-id/md-uuid-5bdb7329:d089d459:b7b6faf0:854e516f-part1 / ext4 defaults 0 1 #/boot/efi was on /dev/sda1 during curtin installation /dev/disk/by-uuid/0D44-F66F /boot/efi vfat defaults 0 1 /swap.img none swap sw 0 0 |
uuidが0D44-F66Fのパーティションを/boot/efiに割り当てる設定になってます。
uuidは、パーティションに固有のIDです。管理者権限にて、「blkid」コマンドで調べられます。
mohlog@qe3csvr:~$ sudo blkid ・・・中略・・・ /dev/sdb1: UUID="6543-0896" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="・・・ ・・・中略・・・ /dev/sda1: UUID="0D44-F66F" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="・・・ ・・・以後省略略 |
UUID="0D44-F66F"である、SSD1が/dev/sda1であるため、
/dev/sda1 が、/boot/efi に割り当てられているということになります。
そこで、先ほどの、/etc/fstabの一文を、以下のように変えれば、SSD2の方に割り当てることができます。
/dev/disk/by-uuid/0D44-F66F /boot/efi vfat defaults 0 1 を /dev/disk/by-uuid/6543-0896 /boot/efi vfat defaults 0 1 |
これで起動すると、
パターンA:2つのSSDが正常時に起動したとき
mohlog@qe3csvr:~$ df -h ・・・中略・・・ /dev/sdb1 1.1G 6.2M 1.1G 1% /boot/efi tmpfs 769M 12K 769M 1% /run/user/1000 |
パターンB:SSD1のみ(SSD2をはずして)で起動したとき
mohlog@qe3csvr:~$ df -h ・・・中略・・・ tmpfs 769M 12K 769M 1% /run/user/1000 |
パターンC:SSD2のみ(SSD1をはずして)で起動したとき
mohlog@qe3csvr:~$ df -h ・・・中略・・・ /dev/sda1 1.1G 6.2M 1.1G 1% /boot/efi tmpfs 769M 12K 769M 1% /run/user/1000 |

となり、SSD1のみ(SSD2をはずして)で起動したときがだめなので、これでは意味がありません。
対策
ここで注目すべきは、パターンAとパーターンCの比較。どちらもSSD2の第1パーティションが/boot/efiに割り当てられていますが、パターンAでは/dev/sdb1、パターンBでは/dev/sda1 になってます。
これは、正常時は/dev/sdbだったSSD2が、SSD1が取り外されたときは繰り上がって/dev/sdaとして認識されているためです。
したがって、/etc/fstabを、以下のように変えてみました。
#/etc/fstab: static file system information. ・・・中略・・・ #/boot/efi was on /dev/sda1 during curtin installation #旧設定/dev/disk/by-uuid/0D44-F66F /boot/efi vfat defaults 0 1 /dev/sda1 /boot/efi vfat defaults 0 1 /swap.img none swap sw 0 0 |
これで、上記パターンA,B,Cのいずれにおいても、/boot/efiがきちんとセットされるようになりました。

おわりに
今回のような設定は、ネットで検索してもでてきません。一般的には、/boot/efiもRAID1にするようです。
理由は、
自動的に同期もされませんし、
この設定では、片方のSSDがNVMe接続だったりすると、/dev/nvme0p1となって使えない、
また、他のメディアを接続したりすると、それが/dev/sdaになったりしてしまう場合があるからだと思います。
今回のように、2台のSSDを同じインターフェースで接続した場合に限りますね。
今回の環境(2台のSSDをUSBアダプタを使って、USBで接続)では、特に不具合なく動いています。このあと、SSD1台が故障した場合のSSDの交換、復旧もやってみました(この後に投稿予定)が、それもうまく行ってます。
ただ、もしかすると、他になにか不具合があるかもしれませんので、もし同じように実施される場合は、自己責任でお願いします。
/boot/efi の中身は、以下のファイルです。更新頻度は少ないと思われるので、手動で更新(同期)します。
mohlog@qe3csvr:/boot/efi/EFI$ ls -l /boot/efi/EFI/boot
合計 1876
-rwxr-xr-x 1 root root 966664 3月 10 09:37 BOOTX64.EFI
-rwxr-xr-x 1 root root 88344 3月 10 09:37 fbx64.efi
-rwxr-xr-x 1 root root 856280 3月 10 09:37 mmx64.efi
mohlog@qe3csvr:/boot/efi/EFI$ ls -l /boot/efi/EFI/ubuntu
合計 4392
-rwxr-xr-x 1 root root 108 3月 10 09:37 BOOTX64.CSV
-rwxr-xr-x 1 root root 162 3月 10 09:37 grub.cfg
-rwxr-xr-x 1 root root 2656136 3月 10 09:37 grubx64.efi
-rwxr-xr-x 1 root root 856280 3月 10 09:37 mmx64.efi
-rwxr-xr-x 1 root root 966664 3月 10 09:37 shimx64.efi
更新は、以下のコマンドで実施できます。(管理者権限で実行)
dpkg-reconfigure grub-efi-$(dpkg --print-architecture)
使い方は、次回のSSD交換の記事で紹介します。
ポイントは、最後に出てくるインストール先で、RAIDを組んでいる2つのSSDを指定することです。そうすることで、2つのSSDに同じものがインストールされ、更新と同期がいっぺんにできます。

コメント