1. 密码忘了
解决思路和方式: 如果能用 1 模式破解直接破解, 不能 1 破解直接光盘模式进入系统删除 shadow 文件中 root 密码即可.
2.fstab 出现挂载错误
查看挂载博客中的详细解释, 这里不再赘述.
3.grub.conf 中 initrd 和 kernel 项前后顺序写反了:
错误提示:
就是英文表示他俩顺序反了
解决思路:
调换顺序即可
解决步骤:
简单点: 可以不用挂壁光盘模式, 直接 esc 键进入选择菜单模式, 然后按 e 编辑, 用 d 删除 initrd 这一行并用 o 键删重新添加这一行, 以实现调换顺序的目的, 然后启动.(或者也可以在这里按 c 键进入命令行模式, 然后直接输入 kernel,root,initrd 进入系统)
注意启动之后进入系统仍需要修改 / boot/grub/grub.conf 文件为正确才行, 上面的操作是在内存中的临时性修改, 下次启动如若不修改文件正确还是会这样.
因此还是直接进入光盘模式把文件修改正确一步到位更加方便!
4. 启动盘 MBR 分区表 64 字节分区信息错误
错误显示:
硬盘直接无法挂载, 没有分区格式, 启动时启动一半便卡住
解决思路:
只能靠之前备份过的分区表来恢复此 64 字节的数据了
可以全部备份 512 字节, 也可以只备份 447 到 510 字节的数据(注意地址比字节数少 1, 因为从 0 地址开始的)
建议两个都备份, 如果只是分区坏了则还原的时候只修复分区信息即可.
解决步骤:
进入光盘救援, 注意要跳过硬盘的检测(因为无法挂载)
lsblk 或者 f(g)disk -l /dev/sda 等查看硬盘
从网络或者其他设备 scp 备份过的分区 64 位字节数据
还原数据 dd if=$backupDisk of=$Disk bs=1 count=64 seek=446
重启即可
注意光盘救援模式从网络拷贝文件的时候, 可临时配一个 IP 地址, 这样才能连通内网网络, 实现的话可用命令
ifconfig ens33 IP 地址 / 端口
例如 ifconfig ens33 192.168.0.1/23
或者 ip a a 192.168.0.2/24 dev eth0
5. 启动盘的前 MBR 分区表 446 字节错误
注意: 此错误和后面的错误情况的显示情况类似, 如果不知道详细错误原因, 因此用了 grub-install 命令之后, 要按照后面的解决步骤来解决问题, 只有知道仅仅是 446 字节错误的情况下才可按照下面的步骤较少的方法操作.
错误提示:
正如分析所示, 如果有光盘挂载的话则直接进入光盘模式(因为启动盘的 grubstage1 错误)
解决思路:
光盘救援模式重新恢复 grub1 即可
注意在这里只是无法启动, 分区表仍然存在, 则硬盘的分区能够直接挂载(光盘启动就能检测到并挂载, 文件系统也没有被破坏).
结局步骤:
进入光盘救援模式
输入 grub(无需切根) 在交互式模式下进行恢复(仅支持 / boot 下 grub 文件夹中的备份文件没有丢失, 否则要用 grub-install)
选择依靠恢复文件的 boot 文件夹的目录 grub> root (hd0,0) , 选择安装 446 字节 MBR 位置 grub> setup(hd0) . 退出 quit (注意小括号前面有个空格)
sync 命令强制写入磁盘
安装完成后 reboot.
5.2 更方便并且更可靠的方式则是利用 install 安装修复 grub, 无需依赖 grub 文件夹中备份文件
进入光盘救援模式
切换根
执行命令 grub-install /dev/sda 等待
成功之后重启即可
注意以上是在 stage2 中没错误的情况下的命令, 因为 install 也不能修复 grub.conf 文件, 仍需手写它.
5.3 有一种特殊情况:
就是计算机启动状态下运行了 grub-install 命令, 然后把 boot/grub 文件夹下的 grub.conf 留下, 其他的文件删除. 在这种情况下表面上没错, 但是却无法启动. 会显示 error 15 错误, 在这种情况下也只能按照上面的方式重新修复一次
6.MBR 分区表 512 全部错误
解决思路:
先恢复分区表 66 位, 再按上面方法恢复 446 字节 grubstage1 即可.
7./boot 下 grub 文件夹丢失
错误显示:
error 15 (或者是进入了 grub > 的交互式界面, 表明 grub stagr2 已经加载但是缺失了 grub.conf 文件)
解决思路:
恢复 grub 文件目录以及下面的 grub.conf 文件
操作步骤:
如果开机后是直接进入了 grub > 界面,(或者可开机后按任意键, 然后按 c 键进入命令行)则可以直接补入 grub.conf 中 kernel root initrd 的内容 (此方法为临时启动, 启动后仍需要恢复文件, 见下图)
如果 error 15 则:
光盘救援模式
(不确定原因可以先按照上一个错误解决的第二个方法用, grub-install /dev/sda, 然后再从这一步开始执行, 如果知道是 grub 文件夹丢失原因造成的问题, 则)手动创建 grub 目录和 grub.conf 文件, 注意位置要在 mnt 原来的系统根 boot 目录下.
书写格式参考下面, 只需要写重要的四行即可(可用 nano 命令):
- # grub.conf generated by anaconda
- #
- # Note that you do not have to rerun grub after making changes to this file
- # NOTICE: You have a /boot partition. This means that
- # all kernel and initrd paths are relative to /boot/, eg.
- # root (hd0,0)
- # kernel /vmlinuz-version ro root=/dev/sda2
- # initrd /initrd-[generic-]version.img
- #boot=/dev/sda
- default=0
- timeout=5
- splashimage=(hd0,0)/grub/splash.xpm.gz
- hiddenmenu
- password=
- title CentOS 6 (2.6.32-754.el6.x86_64)
- root (hd0,0)
- kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=d5db5e08-dc6d-4b6e-84fc-7e490e44ba0c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
- initrd /initramfs-2.6.32-754.el6.x86_64.img
sync, 然后重启即可.
注意点:
那个是 e(小写字母 l)6, 而不是 e 16!
在开机界面修改的都是无法保存的, 开机后一定要再次修改文件才可.
6.10 标准可这样写:
- default=0
- timeout=5
hiddenmenu : 前三项要写在 title 的前面, 写进去会出错
- title CentOS 6
- root (hd0,0)
- kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/sda2
- initrd /initramfs-2.6.32-754.el6.x86_64.img
8.MBR 446 字节 (或者 512 字节) 以及 gurb 文件夹全部丢失错误
错误提示:
因为开机找不到启动设备, 则开机后它会按照顺序寻找启动设备. 如若有光盘挂载则直接进入光盘中.
解决思路:
(如若 512 字节, 则先恢复备份过的分区表)可以用 grub-install 命令直接恢复 stage1(MBR446 字节) stage1.5(第一个扇区之后的装有若干个文件系统驱动文件的扇区)以及 stage2(除了 grub.conf 文件之外)的文件, 然后手动写好 grub.conf 文件.
解决步骤(假设分区表已经恢复, 硬盘可以挂载了):
进入光盘救援模式
切换根 chroot /mnt/sysimage
grub-install /dev/sda (如若 boot 不在 root 下, 指明 boot 所在的上一级目录)
进入 / boot/grub 文件夹中, 手动修改 grub.conf 文件(可按照上面的格式来写)
小技巧: 可以在 VIM 中用 r!ls /boot/vmlinuz-VERSION /boot/initramfs-VERSION.img 的方式读入内核和 initrd 文件名, 以及 root=UUID 可用 r! blkid /dev/sda2 命令读入, 以免不知名称如何手写.
reboot
9.MBR 446 (或 512)字节崩坏, boot 整个目录丢失
错误提示:
同上, 但如果仅仅是 boot 丢失, 则会类似 grub 文件夹丢失显示 error 15
解决思路
(先恢复分区表), 进入光盘恢复模式后要先恢复 boot 目录中的必要文件, 然后安装 grub. 其中 1. 内核文件(从光盘中直接拷贝或者重新安装内核包)2. 虚拟文件系统创建(mkinitrd --help)3.grub 文件夹(主要是 grub.conf 要在 install 之后手动书写)
解决步骤:
进入光盘救援模式
切换根 chroot /mnt/sysimage
进入 boot 文件夹(/dev/sda1), 拷贝光盘中的内核文件 vmlinuz, 然后根据此内核文件制作 initramfs.img 文件, 此时可以不再写版本了(不过注意 grub.conf 中也要相对应不写版本号了)
不写版本号制作 initrd:mkinitrd /boot/initramfs.img `uname -r`
3.2 也可以直接 rpm -ivh 光盘挂载点 / Packages/kernel-VERSION.rpm --force --nodeps 安装内核文件包
grub-install /dev/sda 修复 1 阶段和 1.5, 部分 2 阶段
进入 grub 文件夹, 修改 grub.conf 文件
小技巧同上, 不过这里要写上面安装或者复制后的内核和虚拟文件系统的文件名(如果上面没写版本, 则这里也无需再写,)
root=UUID=XXX 也可这样写, 注意 UUID 后面的不加引号, 用 blkid 命令读入 UUID
reboot 即可
10. 内核 img 文件错误或者丢失
错误显示:
unable to mount root fs on unkonwn- block(0,0)
解决思路:
重新生成 img 文件或者从备份中 (完全一样的安装机器中相同的 img 文件或者说之前对 / boot 文件夹有过备份) 恢复它
解决步骤
进入光盘救援模式
切换根目录到原系统根目录下 chroot /mnt/sysimage (需要提前用 lsblk 查看在哪)
利用 mkinitrd /boot/initramfs-$(uname -r).img $(uname-r) 命令重新生成 initramfs 文件; 如果原 img 文件存在但是错误需要再加上 --force., 如果丢失则不需要加上它.
或反向单引号也行 mkinitrd /boot/initramfs-`uname -r`.img `uname-r` : 注意第二个参数是内核版本号
此时修复完毕重启即可
错误提示状态 Centos6:
错误提示状态 Centos7:
11. 内核执行文件错误或者丢失
错误显示:
file kernel-Version not found
解决思路:
从光盘中或者相同版本机器中拷贝一份到原目录下即可(注意光盘中拷贝时需要更改名称, 因为它不含有版本信息)
解决步骤:
进入光盘救援模式
找到光盘挂载的位置 (/dev/sr0) 和原本根挂载的位置
cp 光盘挂载位置 / isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
重启
12. 开机启动状态故障(inittab 中设置错误不断重启或者关闭)
错误显示:
要么不断重启(6) , 要么开机就关机(0)
解决思路:
将 / etc/inittab 文件改正确(可以不用光盘救援模式, 因为这个问题很简单)
解决步骤
Centos6:
开机运行至图标画面按 esc 按键, 进入选择栏
然后按 a 按键, 输入此次开机临时进入的模式(就是 / etc/inittab 下的 6 种模式), 这里选择 1 或者 2,3 都可以
进入之后修改文件正确即可
Centos7:
开机进入选择栏画面
按 e 按键进入 grub.cfg 的编辑界面
在 linux16 后面添加 systemd.unit=multi-user.target, 然后按 ctrl+x 按键 即可让这一次启动进入
进入系统之后仍要修改默认启动模式为正确的, 用 systemctl set-default graphical.target.
13. 开机启动服务 (service, 在 / etc/init.d 中的) 加载故障卡住
错误显示:
starting 服务名 (就卡在这种状态下, 这一行前面可能有许多 staring 服务名 [OK])
解决思路:
跳过此服务启动, 本次启动不启动此服务. 等进入系统之后查找此服务错误原因, 修正后再开机启动它
解决方法:
卡主之后重启电脑(可按 ctrl+alt+delete, 如果这个被禁用了则想其他方法), 然后进入开机启动画面按 esc 按键
进入之后按 a, 然后输入 1, 单用户启动.(利用单用户启动基本上不会启动任何守护进程的特性来跳过卡住的服务的启动过程)
利用 chkconfig --list 服务名 命令来查看卡住的服务的错误原因并修复. 如果短时间内无法修复, 则先利用 chkconfig 服务名 off 命令先关掉此服务开机启动, 然后正常启动计算机
正常启动后再慢慢寻找原因修复服务, 先保证计算机能启动并且提供其他的正常业务进行.
14. 终极破坏(分区和 LVM 逻辑卷混用环境下):fstab 丢失;(MBR 512 字节破坏, 主要是分区表破坏);boot 目录丢失
错误显示:
如若先不考虑 512 字节损坏问题, 则开机后找不到 grubstage2, 有可能直接进入 gurb 命令行模式(grub>) , 或者显示 error 15 错误
如若考虑 512 字节错误, 则直接无法引导, 同上.
解决思路和步骤分析:
先不考虑 512 字节(主要是分区表), 它就按照备份恢复的方法来恢复即可. 注意分区恢复一定是在任何操作之前的操作, 包括下面的操作之前要先恢复备份的分区表.
后面的解决方案在前面已经提到过, 主要是 fstab 的问题. 因为找不到挂载关系, 无法挂载各个分区以及各个逻辑卷, 就算进入光盘模式也无法修复. 因此主要就是想办法修复 fstab
在这里进入光盘模式后主要用 fdisk -l ; df ;blkid;lvs;vgs;pvs 等等命令查看逻辑卷以及分区信息. 因此工作中的逻辑卷在最开始创建的时候就一定要写清楚卷名或者 label(比如 lv_boot,lv_root,lv_swap,lv_data,lv_home 等等, 没写好的话工作中最好用 lvrename 改名), 这样才能想办法恢复 fstab, 不然就就算是神也救不了, 不知道逻辑卷到底对应的挂载关系是什么.
这里测试用的查看到信息为的 boot 分区直接就是本地硬盘第一个分区 / dev/sda1 , 而 / dev/sda2 是物理卷, 这个卷组分出了三个逻辑卷分别为 home,root 和 swap
查看信息知道逻辑卷对应的挂载关系是什么之后, 逻辑卷仍然无法使用, 因为没有启动 rc.sysinit 脚本, 逻辑卷默认不会激活, 会显示 NOT available 状态(可在 lvdisplay 中看到). 因此要先激活它们, 可以用 vgchange -ay 来激活 LVs
4. 激活之后就可挂载了, 此时创建一个临时文件夹, 把 lv_root 卷挂载到此文件夹上, 然后进入 etc, 手动书写 fstab. 例如
小技巧 2: 可以用 ls 文件>> fstab 的方式追加重定向文件名到文件中, 上面的书写 grub 也可这样用(因为没有 VIM 命令, vi 总是出问题)
注意挂载的时候要提前查并获知文件格式等.
注意挂载的时候可能提示要指定文件系统, 这样的话可用 mount -t type.(分区表恢复后重启可以解决这个问题, 此时不能跳过检测硬盘, 直接 continue, 才能继续下一步切换根并 grub-install)
切换根之后可以用 VIM 命令, 注意别把 fstab 装到光盘启动盘中去了
- /dev/sda1 /boot ext4 defaults 0 0
- /dev/VolGroup/lv_root / ext4 defaults 0 0
- /dev/VolGroup/lv_home /home ext4 defaults 0 0
- /dev/VolGroup/lv_swap swap swap defaults 0 0
fstab 写好之后, 重新进入救援模式让它生效并挂载好各个分区信息. 然后此时便可以按照前面的解决方案修复 grub 以及 boot 文件夹了.
注意书写 grub.conf 的时候 root=/dev/VolGroup/lv_root , 不是 sda2 了
15.centos7 中的 boot 文件夹直接删除
错误提示:
直接进入了 grub rescue> 命令行, 说明进入了 grubstage2 阶段
解决思路:
类似 6 中的 boot 被删除的修复操作即可, 就是命令和细节稍有变化
解决步骤:
进入光盘救援模式
切根, 挂载光盘
利用 rpm -ivh Package/kernel-VERSION --nodeps --force 的方式拷贝出来 vmlinuz-VERSION 和 initramfs_VERSION.img 文件(当然也可光盘直接拷贝), 注意安装的时候需要时间等待.
然后 grub2-install /dev/sda 安装, 当然也缺少 gurb.cfg 文件
然后利用 grub2-mkconfig -o /boot/grub2/grub.cfg 生成它
sync ,reboot 即可
grub2 中的:
- --boot-directory=DIR install GRUB images under the directory DIR/grub2
- instead of the boot/grub2 directory
A. 注意点:
没有 lsblk 命令, 可用 blkid ,fdisk -l ,df 命令代替( 自己弄一个 U 盘 Linux 盘来修复也行, 题外话了)
逻辑卷的各种命令来查看逻辑卷信息, lvs lvdisplay vgs vgdisplay pvs pvdisplay
使用 lvrename 命令更改逻辑卷名
- lvrename /dev/VolGroup00/LogVol00 /dev/VolGroup00/lv_root
- lvrename /dev/VolGroup00/LogVol01 /dev/VolGroup00/lv_swap
B. 由此可看出重要的, 需要备份的文件
MBR 分区表 512 字节
/boot 整个文件夹(img,vmlinuz,grub 文件夹中 grub.conf)
/etc 整个文件夹(/etc/fstab /etc/inittab 等很多配置文件)
来源: http://blog.51cto.com/14228129/2382310