问题现象:
本地设置的镜像系统,使用的是lvm分区,上传后,第一次创建成功后可以启动
重启后,再也无法进入系统了,显示如截图所示
问题分析
阿里云自有镜像都是非lvm分区,因此重启后没有问题
使用非阿里云镜像,第一次启动时,linux去重新remake initrd,initrd里面原有的lvm模块被移除了,因此需要想办法将lvm驱动来被dracut 来引导识别
解决方法
1.vi /etc/dracut.conf.d/lvm.conf (如无,新建文件), 加入lvm驱动模块配置,
add_dracutmodules+=" lvm "
2.lvm 也是建立在磁盘的基础之上的,那么同时要保证 virtio-blk 驱动也要在 ramdisk 里面
dracut -f -add-drivers 'xen-blkfront xen-blkfront virito_blk virtio_pci virtio_console '
执行上述操作重启恢复正常
延伸说明
dracut create initial ramdisk images for preloading modules。 dracut创建虚拟磁盘映像,提供给内核,预加载块设备模块,通过加载这些设备模块访问根文件系统
dracut 官方手册
https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html#dracutkernel7
https://www.kernel.org/pub/linux/utils/boot/dracut/
开机流程:Systemd & Dracut
systemd-journal.socket
|
v
dracut-cmdline.service
|
v
dracut-pre-udev.service
|
v
systemd-udevd.service
|
v
local-fs-pre.target dracut-pre-trigger.service
| |
v v
(various mounts) (various swap systemd-udev-trigger.service
| devices...) | (various low-level (various low-level
| | | services: seed, API VFS mounts:
v v v tmpfiles, random mqueue, configfs,
local-fs.target swap.target dracut-initqueue.service sysctl, ...) debugfs, ...)
| | | | |
\_______________|____________________ | ___________________|____________________/
\|/
v
sysinit.target
|
_________________/|\___________________
/ | \
| | |
v | v
(various | rescue.service
sockets...) | |
| | v
v | rescue.target
sockets.target |
| |
\_________________ | emergency.service
\| |
v v
basic.target emergency.target
|
______________________/|
/ |
| v
| dracut-pre-mount.service
| |
| v
| sysroot.mount
| |
| v
| initrd-root-fs.target
(custom initrd services) |
| v
| dracut-mount.service
| |
| v
| initrd-parse-etc.service
| |
| v
| (sysroot-usr.mount and
| various mounts marked
| with fstab option
| x-initrd.mount)
| |
| v
| initrd-fs.target
\______________________ |
\|
v
initrd.target
|
v
dracut-pre-pivot.service
|
v
initrd-cleanup.service
isolates to
initrd-switch-root.target
|
v
______________________/|
/ |
| initrd-udevadm-cleanup-db.service
| |
(custom initrd services) |
| |
\______________________ |
\|
v
initrd-switch-root.target
|
v
initrd-switch-root.service
|
v
switch-root