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 了。