Linux启动与登录问题

avatar
开发工程师 @西安众邦网络科技有限公司

Linux 启动与登录问题是 ECS 的高频问题,处理不及时会直接影响到 业务的正常运行,因此也变成了我们处理问题优先级的重中之重。 影响 ECS 启动与登录的因素非常多,镜像、管控、虚拟化、底层 硬件、系统与文件异常等等。

启动异常:

  1. 很多 CentOS 启动出现黑屏,没有异常报错的是否,可以 fsck 一下查看系统盘
  2. 升级内核或者从老的共享实例迁移到独享规格导致的启动异常
  • 手动注入驱动 (mkinitrd virtio 相关驱动 )
  • 修改 grub 的启动顺序,优先尝试使用老内核启动
  • /boot 目录下面内核的关联文件是否全(下面仅为 demo,不同系统内核版本文件不一致,部分内核版本 boot 下的 i386 目录也是有用的)
  • /boot/grub/device.map 里面的 hda 改成 vda
  1. 可能是根分区空间被使用占满,以及 inode 的数量消耗耗尽
  2. fstab/grub 中的 uuid 不对,可以直接修改为 /dev/vda1 这种形式尝试。

数据盘分区异常加载起不来的场景,可以去注释 fstab 所有的行,添加类似下面 的启动项尝试,也适用于系统盘快照创建云盘挂载后,uuid一致导致的启动异 常,改成非 UUID 的挂载即可 5. 根目录权限 777(部分目录 777)也会导致启动异常,或者 ssh 登陆异常。

可参考下面的文章仅限修复尝试(https://yq.aliyun.com/articles/761371)
  1. 常见的关键目录缺失,有的是软链,也可以看看对应目录下面的文件数量(文件 数量要跟同内核版本或者相差不大的版本对比),简单判断

  1. 影响启动的参数。

如果参数设置不当,是会导致启动异常的,如 /etc/sysctl.conf 以及检查 rc.local 的配置,profile 的检查。 8. CentOSselinux 需要关闭。

ROOT用户登录问题:

  1. /etc/passwd

/etc/shadow ( 用户名 root polikt dbus 等关键用户存在与否,文 件为空,格式乱(dos2unix)。

  1. /etc/pam.d

目录下是否有为空的文件及参数设置是否正常,如常见的 system-auth passwd

  1. /etc/pam.d 下面所有文件里面涉及的 so 文件,看看文件是否存在,是否为空 /usr/lib64/security

  2. 查 /etc /lib64 /bin /sbin /usr/bin /usr/sbin 等目录有没有 size 为 0 的文件。

  3. /etc/profile

/etc/profile.d( 打 印 列 表 ) /etc/bashrc /root/.bash_profile /root/.bashrc 等涉及登陆环境设置的文件是否异常。

  1. 注意内核版本,是否存在新老内核,多更换几个内核试下。

  2. 系统日志也是一个比较重要的检查项(后面会介绍无法登陆怎么检查)。

  3. Ubuntu 12.04 登陆异常 在 /etc/login.defs 里面配置了错误的ERASECHAR导致,恢复默认 0177 即可

9. 输入 root 后直接 login 失败三连,日志如下。 找个同内核版本的机器对比发现没有 /etc/pam.d/login

rpm 包校验一下,确认 login 文件没了,手动创建一个,内容拷贝过来,好了。

  1. /etc/ssh/sshd_config 相关参数LoginGraceTime/Allowusers/Permit RootLogin

  2. 出现问题的地方没法确定的时候,可以将 shadow 密码字段清空,查看登录是否正常,可以判断是否到密码验证阶段了。

一篇关于 ssh 问题排查的文档,可参:(https://yq.aliyun.com/articles/540769 )

系统登陆不进去了,不挂盘的情况下怎么操作?

需要排查的地点很多,需要切换另一个系统环境下做排查,如:挂载 LiveCD 或者 chroot 切换;但对于使用 ECS 的用户来说,阿里云暂还未提供实例挂载 ISO 镜像的功能,不过可以使用阿里云推出的卸载系统盘功能,把系统盘卸载掉,作为数据盘挂载到一个新的机器,这样就可以执行上面的检查了。

详见:https://help.aliyun.com/document_detail/146752.html 

grub.conf 文件内容被清空了怎么办?

简介:/boot/grub/grub.conf 被清空,系统启动就进入 grub 状态(CentOS 6.8)。

  1. find /boot/grub/stage1。
  • 显示为(hd0,0)。
  1. 查看内核的版本: ls -l /boot

3. 手动配置 grub,步骤如下。

没有报错的话,即成功启动,进入到系统内部后需要继续支持

  1. mount -e remount,rw / 重新挂载分区为读写

  2. service network restart

如果提示 eth0 eth1 失败,ifconfig 看不到网卡的话

  1. lsmod |grep net

看下 virtio_net 这个驱动有没有,如果没有的话(网卡报错基本都不会有)

  1. insmod /lib/modules/2.6.32-696.3.2.el6.x86_64/kernel/drivers/net/virtio_ net.ko。

  2. 重启网络服务,嗨 ~ 网通了。

  3. 登陆 ssh,找个同版本系统的 grub.conf,拷贝一份过来,不然重启之后又进 grub 了。