服务器系统启动卡logo问题解决分析
系统版本:Kylin-4.0.2-server-sp4-20200808.J1-57s-xxc_01-20210112-x86_64
问题:系统启动一直卡在麒麟logo那里,进不去系统。在gurb里去掉系统启动参数quiet和splash,发现启动卡在如下界面。
排查:开始怀疑是掉电导致文件系统损坏,挂光盘进救援模式修复fsck.ext4 /dev/sda1的boot分区和sda2的/分区,重启还是一样的现象。
后来得知之前安装了软件QT 5.14,安装之后改了配置文件/etc/ld.so.conf.d/libc.conf,在里面加了两行:/opt/QT5.14.2/5.14.2/gcc_64/lib和/home/rbx112a/Signal/SignalServer。ldconfig生效。过了一会终端开始异常报错,关闭终端就打不开新终端了。此时重启就到了卡logo那里进不了系统了。
解决方法:挂光盘进入救援模式,mount /dev/sda2 /mnt将/挂载到/mnt下,chroot /mnt,发现vim和ldd等命令不能使用,猜测可能是系统底层库被替换掉了。
echo命令还能使用,进入/的etc/ld.so.conf.d目录。将libc.conf回复成之前的内容。echo -e “# libc default configuration\n/usr/local/lib” > libc.conf。ldconfig生效,此时发现vim等命令可以使用。退出reboot重启可以进系统,问题解决。
/etc/ld.so.conf这个文件记录了编译时使用的动态链接库的路径。默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件。如果你安装了某些库,比如在安装 gtk+-2.4.13时(需要glib-2.0 >= 2.4.0),辛苦的安装好 glib 后,没有指定 –prefix=/usr,这样glib库就装到了/usr/local下。在检查了这一点后,要以 root 的身份运行/sbin/ldconfig 。库文件的路径如 /usr/lib 或 /usr/local/lib 应该在 /etc/ld.so.conf 文件中,这样 ldd 才能找到这个库。
*
后续在这个服务器上遇到其他问题,也是在/etc/ld.so.conf和/etc/ld.so.conf.d/libc.conf里面加了qt路径ldconfig然后重启导致系统没有图形化,后面尝试改回去但是ldconfig不生效,报错/lib/ 不是符号连接。因为他们程序需要拷了一些库到/lib/目录下。删了这些库可以执行ldconfig重启lightdm进入图形界面。ldconfig如下图。
加qt路径的解决方法是在/etc/ld.so.conf.d/目录下新建一个qt.conf,里面写入qt的路径/opt/qt5.14/xxx/gcc/lib。
使用到了nvidia显卡的opengl。安装了nvidia驱动和cuda。打开qtcreator报错找不到opengl,因为安装nvidia驱动时连着opengl一起安装了。卸载驱动重新安装加上参数-no-opengl-files不安装opengl,让cuda的opengl生效解决。