记一次Redhat7无法正常开机的解决过程

  • Post author:
  • Post category:其他


事情的起源是使用VMWare虚拟平台克隆一个虚拟机的时候,克隆之前将网络配置全部删掉,然后将虚拟机关机,然后克隆出来一台之后,发现两台都无法正常的开机,症状是监视器会显示一个灰色的7背景,然后虽然没有死机但是也无法进入登录窗口。由于克隆之前网络配置都被删掉了,所以也无法SSH远程登录。使用Ctrl+Alt+F2-6会会出现命令行,但是无法执行任何命令,如下:

开机之后显示转圈圈,然后圈圈消失,然后就没有然后了,一直定格在灰色背景上



此时按下Ctrl+Alt+空格,会出现如下启动日志


此时按下Ctrl+Alt+F6可以输入字符,但是不会执行,F2-5按下以后只有一个光标在闪动。F1为灰色的图形界面

F6如下图


F2-5如下图


重启好多次都是这样,于是当场作出判断,应该是开机启动过程中卡住了。

由于当前的服务器已经完全无法实施任何的操作,所以只能关机之后把虚拟磁盘插到别的虚拟机上拯救一下。

这一台用来实施修复的虚拟机先关机,然后把出问题的虚拟机的硬盘挂上去,如果不关机可能会碰到无法认到硬盘的情况。

另外出问题的Redhat7虚拟机文件系统全部是基于LVM的,用于修复的服务器的操作系统为Redhat 6.7,用的也是LVM,但是这两个LVM中的VG的名字不同,挂载过程还算比较顺利,要是VG名字也相同的话,挂载前要先改名比较麻烦,所以推荐当服务器要挂载外来的LVM硬盘时,要选一台VG名字不同的服务器去挂载,或者选择一个没有开启LVM的服务器去挂载。

下面简单介绍一下挂载方法:

首先选择要用来修复硬盘的Redhat6的虚拟机,这台虚拟机原先已经有两块硬盘了,都是LVM中的磁盘。然后通过添加按钮将出问题的虚拟机磁盘挂载上,出问题的虚拟机要先关机才行,如下图


由于是共享磁盘,所以在“模式”上要勾选“独立”和“持久”

挂上以后就可以开启用于修复的虚拟机了,一般情况下虚拟机会认到这块硬盘但是不会自动挂载


从上图可以看到,Redhat6这台机器原先自己的VG名字为rootvg,坏掉的Redhat7的磁盘VG名字为rhel,已经可以成功的认到这块硬盘/dev/sdc,不过由于是LVM文件系统,图形界面不能很方便的挂载,需要使用shell一步一步的完成


上图可以看到系统已经认出了这块硬盘,如果没关机就挂载,系统可能就认不到,可以参考下文实现对scsi硬盘的热部署


http://zshou.is-programmer.com/posts/39489.html

由于两个VG名字不一样所以不会有什么冲突,比如执行vgdisplay可以看到系统已经成功的认出了两个vg

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               rhel
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  16
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               160.50 GiB
  PE Size               4.00 MiB
  Total PE              41089
  Alloc PE / Size       41088 / 160.50 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               d5sIwc-c8VR-DFEF-ySXP-uex7-zMNx-3jKQgR
   
  --- Volume group ---
  VG Name               rootvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               259.80 GiB
  PE Size               4.00 MiB
  Total PE              66508
  Alloc PE / Size       40908 / 159.80 GiB
  Free  PE / Size       25600 / 100.00 GiB
  VG UUID               B8tCHj-NwC4-f6fr-uWIs-05bE-gZeL-J0hK5C
   
[root@localhost ~]# 

其中rhel就是受损的红帽7的硬盘

如果vgdisplay没有显示受损硬盘,或者由于vg重名导致vgdisplay看不到,可以使用下面文章使用的方法,通过UUID修改VG的名字然后进行挂载


http://blog.csdn.net/qihuanfengyun/article/details/7958031

虽然vgdisplay会显示,但是系统默认是未激活这个新的LVM硬盘的,需要我们手动激活,方法就是使用lvscan查看未激活的设备,然后激活

[root@localhost ~]# lvscan
  inactive          '/dev/rhel/swap' [16.00 GiB] inherit
  inactive          '/dev/rhel/tmp' [10.00 GiB] inherit
  inactive          '/dev/rhel/home' [10.00 GiB] inherit
  inactive          '/dev/rhel/root' [50.00 GiB] inherit
  inactive          '/dev/rhel/rpms' [74.50 GiB] inherit
  ACTIVE            '/dev/rootvg/LogVol01' [151.80 GiB] inherit
  ACTIVE            '/dev/rootvg/LogVol00' [8.00 GiB] inherit
[root@localhost ~]# 

然后执行

vgchange -ay /dev/rhel

进行激活,激活完毕之后,可以再用lvscan查看一下激活状态

[root@localhost ~]# lvscan
  ACTIVE            '/dev/rhel/swap' [16.00 GiB] inherit
  ACTIVE            '/dev/rhel/tmp' [10.00 GiB] inherit
  ACTIVE            '/dev/rhel/home' [10.00 GiB] inherit
  ACTIVE            '/dev/rhel/root' [50.00 GiB] inherit
  ACTIVE            '/dev/rhel/rpms' [74.50 GiB] inherit
  ACTIVE            '/dev/rootvg/LogVol01' [151.80 GiB] inherit
  ACTIVE            '/dev/rootvg/LogVol00' [8.00 GiB] inherit
[root@localhost ~]# 

全部都是ACTIVE代表激活成功。

激活完毕之后就可以使用mount命令挂载了,下面的步骤就和操作普通硬盘差不多了。我把受损系统的 / 挂载到/mnt/repair下面,/mnt/repair目录要事先使用mkdir生成

[root@localhost ~]# mount /dev/rhel/root /mnt/repair/
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-LogVol01
                      150G   53G   89G  38% /
tmpfs                 3.9G   80K  3.9G   1% /dev/shm
/dev/sda1             190M   41M  140M  23% /boot
/dev/sr0              3.6G  3.6G     0 100% /media/RHEL-6.7 Server.x86_64
/dev/mapper/rhel-root
                       50G   45G  2.5G  95% /mnt/repair
[root@localhost ~]# 

然后就可以看到受损操作系统里面的文件了

[root@localhost repair]# ll /mnt/repair/
总用量 2156780
lrwxrwxrwx.   1 root root          7 9月  11 22:50 bin -> usr/bin
drwxr-xr-x.   2 root root       4096 9月  11 22:48 boot
drwxr-xr-x.   2 root root       4096 9月  11 22:48 dev
drwxr-xr-x. 156 root root      12288 12月 14 07:55 etc
drwxr-xr-x.   2 root root       4096 9月  11 22:48 home
lrwxrwxrwx.   1 root root          7 9月  11 22:50 lib -> usr/lib
lrwxrwxrwx.   1 root root          9 9月  11 22:50 lib64 -> usr/lib64
drwxr-xr-x.   2 root root       4096 12月 13 17:24 logs
drwx------.   2 root root      16384 9月  11 22:48 lost+found
drwxr-xr-x.   2 root root       4096 5月  25 2015 media
drwxr-xr-x.   4 root root       4096 9月  13 21:14 mnt
drwxr-xr-x.   3 root root       4096 10月 12 11:18 opt
drwxr-xr-x.   2 root root       4096 9月  11 22:48 proc
dr-xr-x---.  28 root root       4096 12月 13 18:30 root
drwxr-xr-x.   2 root root       4096 10月 12 11:14 rpms
drwxr-xr-x.   2 root root       4096 9月  11 22:48 run
lrwxrwxrwx.   1 root root          8 9月  11 22:50 sbin -> usr/sbin
drwxr-xr-x.   2 root root       4096 5月  25 2015 srv
drwxr-xr-x.   2 root root       4096 9月  11 22:48 sys
drwxr-xr-x.   2 root root       4096 9月  11 22:48 tmp
drwxr-xr-x.  16 root root       4096 12月  9 09:19 usr
drwxr-xr-x.  23 root root       4096 12月 14 07:55 var
-rw-r--r--.   1 root root          0 10月 12 16:14 weixin.log
[root@localhost repair]# 

由于我怀疑是启动脚本出现的问题,所以先去修改了rc.local,修改前的内容如下

[root@localhost repair]# cat /mnt/repair/etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
mount -o loop /rpms/rhel-server-7.4-x86_64-dvd.iso /rpms/rhel7
mount -o loop /rpms/rhel-server-6.9-x86_64-dvd.iso /rpms/rhel6
mount -o loop /rpms/CentOS-7-x86_64-Everything-1708.iso /rpms/centos7.4/
/rpms/caddy -port 88
[root@localhost repair]# 

前面三个mount命令应该不会出现什么问题,都是挂载iso文件,但是最后执行caddy一句应该是问题所在,因为caddy运行后是阻塞的,而我又没有加&符号,甚至还是用root用户启动的,所以caddy可能会卡主系统的启动进程,所以干脆把这些命令都注释掉,变成下面这样

[root@localhost repair]# cat /mnt/repair/etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
#mount -o loop /rpms/rhel-server-7.4-x86_64-dvd.iso /rpms/rhel7
#mount -o loop /rpms/rhel-server-6.9-x86_64-dvd.iso /rpms/rhel6
#mount -o loop /rpms/CentOS-7-x86_64-Everything-1708.iso /rpms/centos7.4/
#/rpms/caddy -port 88
[root@localhost repair]# 

然后顺道修改一下网络连接的配置,让系统可以自动连接上网络

修改前,默认是DHCP,但是网络里是没有DHCP服务器的,所以去掉

[root@localhost repair]# cat /mnt/repair/etc/sysconfig/network-scripts/ifcfg-eno16780032 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16780032
UUID=fea13a88-a6b6-4496-a4e4-83c83f33818f
DEVICE=eno16780032
ONBOOT=no
[root@localhost repair]# 

改成下面这样,固定IP

[root@localhost repair]# cat /mnt/repair/etc/sysconfig/network-scripts/ifcfg-eno16780032 
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.59
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16780032
UUID=fea13a88-a6b6-4496-a4e4-83c83f33818f
DEVICE=eno16780032
ONBOOT=yes
[root@localhost repair]#

然后修改工作就完成了,下面就是把修复机关机,把修复的硬盘拆下来,然后重启故障机器。注意移除硬盘的时候要选择“从虚拟机移除”而不要不小心把.vdisk删掉了


这次启动红帽7的时候,熟悉的登录界面很快就出来了,修复结束




版权声明:本文为lvshaorong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。