江湖救急 : CentOS7.5 /usr 目录误删, 恢复操作.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://zhangboyi.blog.csdn.net/article/details/99732117

一.概述

前两天在网上找了个脚本,看着没问题,直接复制粘贴了. 结果有特殊字符,直接换行.
执行了  rm -rf /usr 目录. 然后就傻了,各种操作命令找不到, 无法登陆.......

万分幸运的是,数据没丢,要是丢了.那我就要命了


 

1.如果可以进入操作系统,并且可以正常操作的话. 依旧会存在隐患.

恢复后,操作系统主体功能可能可以正常操作,但或多或少存在问题.

毕竟用于恢复的文件和原来系统的文件毕竟多少会有差别.

比如文件应用,yum 安装环境之类的. 建议将数据备份.重新做系统.

 

2.如果不能进入操作系统,无法恢复的话,只能通过重做系统的方式重新开启系统. 做系统的时候.

存放数据的系统盘不格式化, 但愿你的数据没有放到 /home  /var /root 之类的目录下. 如果放了也没关系

在设置硬盘的时候, 可以将之前的目录先映射到别的目录.先拿到数据再说. 要是数据丢了,那就跑路吧...

 

恢复思路如下:

1. 从别的机器拷贝一份/usr 目录文件.

           要求操作系统必须是相同版本,相同环境的 /usr 文件. (包括硬盘分区,否则硬盘会存在挂载不上的情况)

 2.想办法将复制的/usr 文件直接上传到器的 根目录下

        如果传输工具还能传输文件,直接用传输工具传.不能的话,进机房吧.进行如下操作.

       密码登录不上去,是正常的,只要/usr目录恢复,就可以直接登录的,不用重新改密码.

 

 

 

二.具体操作

准备一份安装系统的光盘(U 启也可以)

分两部分:

1.进入 操作系统救援模式.
2.替换文件,重启&检查系统

 

 

1.插入系统光盘或者 系统 U 盘.


进入 bios , 设置为 光驱或者 U盘启动 (F2 ,F8,  F12 , ESC ..... )

2.进入系统安装盘界面,先选Troubleshooting,再选Rescue installed system

 

 

3 进入后等待最终进入提示模式,输入 1 回车

 

 

4 然后输入chroot /mnt/sysimage 切换到临时linux系统,切换后前缀会变为bash

 

在这时,原来的操作系统就挂载到了 /mnt/sysimage 目录下.

将恢复文件/usr 直接复制到 /mnt/sysimage 目录即可

 

 

 

5.将备份的数据接入 linux 操作系统&替换

我是将/usr 目录的文件直接放到 U 盘里面了.(注意 U盘格式,不然 linux 操作系统不识别)

 

 

5.1. 插入 U 盘
 

5.2. 执行命令 查看挂载 U 盘映射的地址名称


fdisk -l

会发现一个地址类似 :    /dev/sdb1

 

5.3.创建挂载文件目录

mkdir /mnt/usb

 

5.3. 挂载 U 盘

mount /dev/sdb1 /mnt/usb

 

5.4. 操作U 盘内容

cd  /mnt/usb   (u盘的内容都在里面)

5.5.卸载 U 盘


 umount /mnt/usb

 

 

6. 直接将/usr 目录替换

 

cp  /mnt/usb/usr.tar.gz  /mnt/sysimage

tar -xzvf /mnt/sysimage/usr.tar.gz

 

 

5.  输出exit然后 exec /sbin/reboot (重启)

 

记得bios改回为硬盘启动. (如果是通过临时修改的那种方式,可以不做修改.)

 

 

 

已知问题

1. 操作系统进入维护模式, 部分磁盘无法正常挂载.

     原因: 操作系统对应的版本不对或者说环境不对. 导致磁盘无法挂载.

2. 用户账号无法登陆. 

    正常, /usr 目录恢复就可以正常登陆了, 不用担心用户账号,密码丢失的问题. 用户账号密码存放的不是在/usr 目录.

3. 重做系统之后,数据会丢嘛?

    重做系统的话,数据资产可以不格式话.   正常挂载的话,是不会丢的.如果磁盘的名称是操作系统目录比如/var /home 之类的,重命名一个新的目录吧, 不然重做系统的时候会报错哦.

4.进入救援模式, 原来的操作系统在哪?

  原来的操作系统是在/mnt/sysimage 目录下. 并不是 当前的根目录 "/ " 下. 进入救援模式的系统是一个临时系统, 重启之后就消失了.另外,不要讲临时系统的/usr 目录直接复制到/mnt/sysimage 目录下, 因为不起作用. 如果这是/usr/sbin 或者/usr/bin 目录下的一些命令的话,还是可以复制的.

5.yum 安装的软件之类的入股丢失的话??

  重新安装吧. 用 yum 或者将操作系统中的 rpm 包之类的挂载到操作系统中.直接安装就好了. 软件包不多的话,rpm 安装也可以. 如果多的话,还是尽量用 yum 安装吧. 我试的时候,yum 还是可以使用的. 如果不能使用建议重新安装 yum. 依赖包找一台有 yum 的同版本的 linux 操作系统, 将安装包下载到本地.在挂载到需要恢复的 linux 系统上即可.

6. 进入 bios 的时候, 我遇到了两种模式. 建议选非 UEFI 的那个模式. 具体有啥区别.自己百度一下啊.

7.重做系统的话, 引导扇区 根据 bios 引导模式的不一样,会有不同的引导区. (SWAP 交换分区可以不划分,有告警没事 )

非 UEFI:  /boot 目录   可能还需要 /biosboot (名字记不住了,看报错日志吧)目录.

UEFI: /boot/efi 目录 

 


------  下面是另外一种恢复的方式, 通过 系统光盘中的 rpm 安装包来恢复文件.(未测试过,理论可用. 希望永远不会用到)   --------

 

预备知识:
rpm包的各种信息,包括包名,安装日期、文件的md5校验信息等,都是存放在/var/lib/rpm的各个文件当中的,
所以只要这个目录不被删掉,我们可以从中读出我们需要的信息进行恢复被误删的文件。

步骤:
1,用安装光盘进入rescue模式,校验所有系统中的安装包,找出那些文件丢失:

rpm -qaV --root /mnt/sysimage >/tmp/rpm_qaV.log

复制代码

2,找到所有校验结果为missing的文件:

grep missing /tmp/rpm_qaV.log|awk '{print $NF}' >/tmp/missing_file

复制代码

3,查询每一个被删除的文件是属于那个rpm包:

for line in `cat /tmp/missing_file`

do

rpm -qf $line --root /mnt/sysimage >>/tmp/missing_rpm

done

 

4,步骤3中生成的missing_rpm文件有很多是重复的,需要处理一下:

sort /tmp/missing_rpm |sort -u >/tmp/rpm_reinstall

cp /tmp/rpm_reinstall /mnt/sysimage/tmp

 

到此为止,我们在救援模式下得到了系统所有被删除的文件所在的rpm包,
下一步的工作就是把这些rpm包重新安装,被删除丢失的文件也就找回来了。

5,启动到单用户模式,挂载光盘,从安装光盘里拷贝拷贝需要的rpm包到硬盘准备安装:

mkdir /rpms

mount /dev/cdrom /mnt

cd /mnt/Server

for line in `cat /tmp/rpm_reinstall`

cp $line* /rpms

done

6,重新用安装光盘启动到救援模式,安装rpm包:

rpm -ivh /mnt/sysimage/rpms/* --root /mnt/sysimage --nodeps --force

 

忽略各种警告和错误信息,等待完成,重新启动系统,检测是否正常

 

参考:

https://blog.csdn.net/chinese_tiger/article/details/8238144

 

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页