Linux 启动与登录问题是 ECS 的高频问题,处理不及时会直接影响到 业务的正常运行,因此也变成了我们处理问题优先级的重中之重。 影响 ECS 启动与登录的因素非常多,镜像、管控、虚拟化、底层 硬件、系统与文件异常等等。
启动异常:
- 很多
CentOS启动出现黑屏,没有异常报错的是否,可以fsck一下查看系统盘 - 升级内核或者从老的共享实例迁移到独享规格导致的启动异常
- 手动注入驱动 (
mkinitrd virtio相关驱动 ) - 修改
grub的启动顺序,优先尝试使用老内核启动 /boot目录下面内核的关联文件是否全(下面仅为demo,不同系统内核版本文件不一致,部分内核版本boot下的i386目录也是有用的)/boot/grub/device.map里面的hda改成vda
- 可能是根分区空间被使用占满,以及
inode的数量消耗耗尽 fstab/grub中的uuid不对,可以直接修改为/dev/vda1这种形式尝试。
数据盘分区异常加载起不来的场景,可以去注释 fstab 所有的行,添加类似下面 的启动项尝试,也适用于系统盘快照创建云盘挂载后,uuid一致导致的启动异
常,改成非 UUID 的挂载即可
5. 根目录权限
777(部分目录 777)也会导致启动异常,或者 ssh 登陆异常。
可参考下面的文章仅限修复尝试(https://yq.aliyun.com/articles/761371)
- 常见的关键目录缺失,有的是软链,也可以看看对应目录下面的文件数量(文件 数量要跟同内核版本或者相差不大的版本对比),简单判断
- 影响启动的参数。
如果参数设置不当,是会导致启动异常的,如
/etc/sysctl.conf 以及检查 rc.local 的配置,profile 的检查。
8.
CentOS 的 selinux 需要关闭。
ROOT用户登录问题:
- /etc/passwd
/etc/shadow ( 用户名 root polikt dbus 等关键用户存在与否,文 件为空,格式乱(dos2unix)。
- /etc/pam.d
目录下是否有为空的文件及参数设置是否正常,如常见的 system-auth passwd。
-
/etc/pam.d下面所有文件里面涉及的 so 文件,看看文件是否存在,是否为空/usr/lib64/security。 -
查 /etc /lib64 /bin /sbin /usr/bin /usr/sbin 等目录有没有 size 为 0 的文件。
-
/etc/profile
/etc/profile.d( 打 印 列 表 ) /etc/bashrc /root/.bash_profile /root/.bashrc 等涉及登陆环境设置的文件是否异常。
-
注意内核版本,是否存在新老内核,多更换几个内核试下。
-
系统日志也是一个比较重要的检查项(后面会介绍无法登陆怎么检查)。
-
Ubuntu 12.04登陆异常 在/etc/login.defs里面配置了错误的ERASECHAR导致,恢复默认0177即可
9. 输入
root 后直接 login 失败三连,日志如下。
找个同内核版本的机器对比发现没有
/etc/pam.d/login。
rpm 包校验一下,确认 login 文件没了,手动创建一个,内容拷贝过来,好了。
-
/etc/ssh/sshd_config相关参数LoginGraceTime/Allowusers/Permit RootLogin。 -
出现问题的地方没法确定的时候,可以将
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)。
- find /boot/grub/stage1。
- 显示为(hd0,0)。
- 查看内核的版本: ls -l /boot
3. 手动配置 grub,步骤如下。
没有报错的话,即成功启动,进入到系统内部后需要继续支持
-
mount -e remount,rw / 重新挂载分区为读写
-
service network restart
如果提示 eth0 eth1 失败,ifconfig 看不到网卡的话
- lsmod |grep net
看下 virtio_net 这个驱动有没有,如果没有的话(网卡报错基本都不会有)
-
insmod /lib/modules/2.6.32-696.3.2.el6.x86_64/kernel/drivers/net/virtio_ net.ko。
-
重启网络服务,嗨 ~ 网通了。
-
登陆 ssh,找个同版本系统的 grub.conf,拷贝一份过来,不然重启之后又进 grub 了。