![升級到18.04後Boot.mount失敗](https://rvso.com/image/1070316/%E5%8D%87%E7%B4%9A%E5%88%B018.04%E5%BE%8CBoot.mount%E5%A4%B1%E6%95%97.png)
我們的許多從 16.04 升級到 18.04 的伺服器都出現了此問題。常見的配置是 root 是一個 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 已掛載。進入緊急模式,按 control-D 繼續啟動,然後一切正常。
如果我 tar /boot 下的所有文件,umount /boot 和 /boot/efi,然後解壓縮它們,更改 fstab,更新 initramfs,然後在沒有這些分區的情況下重新啟動,然後節點將啟動。
我注意到,即使 LVM 已成功安裝,在進入緊急模式之前也不會出現顯示 /dev/sda 已插入的日誌。按 control-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"
這幫助我識別了問題。在啟動早期發生了數千個“捲曲”,這些來自 udev 規則,該規則作用於新增和刪除“sd*”裝置。我註解掉了這些規則操作,現在系統啟動了!可以使用journalctl -b查看日誌。