![18.04 にアップグレードした後、Boot.mount が失敗する](https://rvso.com/image/1070316/18.04%20%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81Boot.mount%20%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B.png)
この問題は、16.04 から 18.04 にアップグレードされた多くのサーバーで発生しています。一般的な構成は、ルートが LVM であり、/boot パーティションが存在するか、/boot と /boot/efi パーティションが存在することです。例:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat C45F-2000 /boot/efi
├─sda2 ext2 a906fd59-cb58-4c94-8560-5d426e4 /boot
└─sda3 LVM2_member 1P3Rxv-VZMx-gcs9-PlxM-DCI8-kIqr
├─node--007--vg-root ext4 316678d5-aaaf-43bd-bac6-cc3aeb1 /
├─node--007--vg-swap_1 swap 0724b0b0-9f2d-42aa-bbe2-7b8aa31 [SWAP]
├─node--007--vg--na ext4 7d42481b-f7fb-4ac6-9cf5-5df3ca17 /cache/na
├─node--007--vg-c ext4 e38d96f8-6afb-4d2c-94cc-28a02e90 /cache/c
└─node--007--vg-t ext4 44559b67-869e-4454-b792-792c1a16 /cache/d
カーネルデバッグログでは、デバイスの待機中にタイムアウトが発生するというログが常に表示されます。
Mar 30 16:14:22 ns1 systemd-udevd[539]: seq 3206 '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sda' is taking a long time
Mar 30 16:14:22 ns1 systemd[1]: systemd-udevd.service: Got notification message from PID 539 (WATCHDOG=1)
Mar 30 16:14:50 ns1 systemd[1]: dev-disk-by\x2duuid-a906fd59\x2dcb58\x2d4c94\x2d8560\x2d5d426e4.device: Job dev-disk-by\x2duuid-a906fd59\x2dcb58\x2d4
Mar 30 16:14:50 ns1 systemd-journald[501]: Forwarding to syslog missed 70 messages.
Mar 30 16:14:50 ns1 systemd[1]: dev-disk-by\x2duuid-a906fd59\x2dcb58\x2d4c94\x2d8560\x2d5d426e4.device: Job dev-disk-by\x2duuid-a906fd59\x2dcb58\x2d4
Mar 30 16:14:50 ns1 systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-a906fd59\x2dcb58\x2d4c94\x2d8560\x2d5d426e4.device.
Mar 30 16:14:50 ns1 systemd[1]: boot.mount: Job boot.mount/start finished, result=dependency
Mar 30 16:14:50 ns1 systemd[1]: Dependency failed for /boot.
この時点でスワップと LVM がマウントされます。緊急モードに入り、Ctrl + D を押すと起動が続行され、すべてが正常になります。
/boot の下にあるすべてのファイルを tar し、/boot と /boot/efi をアンマウントして untar し、fstab を変更して initramfs を更新し、それらのパーティションなしで再起動すると、ノードが起動します。
lvm が正常にマウントされているにもかかわらず、緊急モードに入る前に /dev/sda が接続されていることを示すログが表示されないことに気付きました。ブートを続行するために Ctrl + D を押すとログが表示され、sda2 を含むすべてが正常にマウントされます。
Mar 30 16:15:33 ns1 systemd[1]: dev-sda.device: Changed dead -> plugged
ご協力いただければ幸いです。
答え1
いろいろ調べた結果、/etc/udev/udev.conf で非常に便利なデバッグ ログをオンにし、initramfs を更新しました。
$ cat /etc/udev/udev.conf
# see udev.conf(5) for details
#
# udevd is started in the initramfs, so when this file is modified the
# initramfs should be rebuilt.
#udev_log="info"
#event_timeout=300
udev_log="debug"
これは問題を特定するのに役立ちました。起動の初期段階で何千もの「curls」が発生していましたが、それらは「sd*」デバイスの追加と削除に作用する udev ルールによるものでした。それらのルール アクションをコメント アウトすると、システムが起動するようになりました。ログは journalctl -b で表示できます。