ubuntu系统误删/usr后的救援处理

救援思路

大致的操作步骤:

  1. 准备对应版本的Try Ubuntu启动盘以及在另一个U盘准备好需要传入的usr.tar.gz(相同发行版的/usr打包文件)
  2. 通过bios设置U盘启动,进入Try Ubuntu系统
  3. 将待恢复的系统根目录与存放usr.tar.gz文件的u盘都挂载到Try Ubuntu
  4. 通过Try Ubuntu系统提供的临时环境(包含了基本的linux操作,如cp、mount等),将usr.tar.gz拷贝到待恢复系统的根目录,并解压复原出/usr目录
  5. 重新启动系统,进入之前待恢复的系统。这里有个问题是系统根目录下的文件与导入的/usr中的内容可能不再匹配,考虑重装dpkg中记录的所有程序(sudo apt-get install --reinstall $(dpkg --get-selections | grep -v deinstall | awk '{print $1}')),然后再重启系统

实施步骤

待救援系统以ubuntu-20.04.6-live-server-amd64.iso发行版为例。

准备系统启动盘与存放usr.tar.gz的存储盘

参考:http://t.csdnimg.cn/yGiJg

使用Rufus工具制作启动盘

由于我们需要使用Try Ubuntu系统,所以需要选择对应发行版的desktop桌面版,服务器版的没有内置Try Ubuntu
image.png
image.png

准备usr.tar.gz存储盘

可以考虑在虚拟机中安装ubuntu-20.04.6-live-server-amd64.iso发行版,装一些基础软件(如ssh)后再将其/usr目录打包为usr.tar.gz

# 在root用户或sudo权限下执行打包压缩命令
sudo tar -zcvf ~/usr.tar.gz /usr

存储盘同样也可以选择U盘,接入虚拟机后直接将准备好的usr.tar.gz拷贝到U盘中。
至此恢复前的准备工作就做完了。
补充说明:应该是有方法将usr.tar.gz和桌面版镜像一起做到启动盘中,有兴趣的读者可以去了解下。

BIOS设置与Try Ubuntu系统的使用

BIOS设置

image.png
上图为VMWare虚拟机中的BIOS设置,CD-ROM Drive应该是光盘等启动介质,Removable Devices应该是U盘、SD卡等可移动介质。
真实的设备也有类似的BIOS配置选项,可以根据设备的使用说明书或在搜索引擎中搜索设备型号的BIOS设置方法。可能与上图这种界面差异会比较大,但一般都能够找到设置启动介质的地方。

进入Try Ubuntu

image.png
image.png
写文档的电脑里没有20.04.6的桌面版系统,下载需要4.1G,有点大。索性就用18.04.1的桌面版Try Ubuntu来演示。
需要注意的是,这个场景下我们救援系统主要只涉及文件的操作(拷贝、解压),如果涉及到驱动处理磁盘分区处理Grub救援等操作,用相匹配的Try Ubuntu可能会比较好。

Try Ubuntu系统挂载待修复系统的根目录与存储盘

挂载操作

image.png
这里可以看到,系统已经自动将存储盘挂载到了/media/ubuntu/KINGSTON目录。
image.png

# 创建挂载点目录,挂载待修复系统根目录
sudo mkdir -p /mnt/my_root
sudo mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt/my_root

image.png
输入mount命令,可以看到待救援系统根目录与存储盘均已挂载完成。

拷贝存储盘中的usr.tar.gz到待修复系统根目录并解压

image.png
进行解压操作:

sudo tar -zxf usr.tar.gz

image.png
image.png
可以看到usr恢复后,之前红色的软链接此时也有正确链接的目标。

重启后启动待修复的主系统并处理dpkg包状态与/usr不一致问题

image.png
重启后,看到了熟悉的窗口,接下来就是处理dpkg包状态与/usr不一致问题。
image.png
这里可以看到,输入gcc指令时,系统提示我们进行安装,但通过dpkg --get-selections | grep gcc,dpkg已经认为安装了gcc。

dpkg 是 Debian 系列 Linux 发行版(如 Ubuntu)中的包管理工具,用于安装、卸载、查询和管理 .deb 包文件。这里需要通过它来处理待救援系统中记录的已安装package与拷贝过来的/usr中内容不匹配问题(记录中xxx应用或lib库已安装,但拷贝过来的/usr中实际没有)。
重新安装dpkg中状态为install的package:

# 重新安装所有已安装的包
sudo apt-get install --reinstall \
  $(dpkg --get-selections | grep -v deinstall | awk '{print $1}')

# 清理和修复系统
sudo apt-get autoremove
sudo apt-get clean
sudo apt-get install -f
sudo dpkg --configure -a

image.png
image.png
删除/usr之前通过dpkg --get-selections导出的包信息与恢复后重装所有包后的导出信息没有太大差异,前面不能使用的gcc指令也完成了恢复,至此应该算是成功完成了救援。

其他

删除/usr的系统

image.png

Try Ubuntu补充说明

image.png
在ubuntu14桌面版的Try Ubuntu挂载Kali-Linux的根目录到/mnt/kali_root目录。看来只是进行简单的文件操作时,其实不是很在意Try Ubuntu的版本,只要能够将待修复系统的根目录挂上来,执行需要的文件处理操作即可。Try Ubuntu比较类似于Windows系统安装过程中有时会用到的微PE,用于提供了一个轻量、但具备基本功能的操作系统供我们使用。
顾名思义,Try Ubuntu本意是试用的Ubuntu系统。用来救援一个无法正常使用的系统,还真是一个巧妙的运用。

ubuntu系统在丢失/usr时自动进入了initramfs

image.png
image.png
这个临时系统也有一些基础指令,看起来似乎都不需要Try Ubuntu就能恢复。
image.png
待救援系统根目录被默认以read-only的方式挂载到了/root
以可读可写方式重新挂在待救援系统根目录:

mount -o remount,rw /dev/mapper/ubuntu--vg-ubuntu--lv /root

image.png
挂载包含usr.tar.gz的存储盘:
image.png
通过插拔U盘来查看它对应到哪个块设备。

# 挂载存储usr.tar.gz的U盘
mkdir -p /mnt/usr_dir && mount /dev/sdb1 /mnt/usr_dir

突然发现initramfs没有提供tar指令,看来要用这种方式去修复/usr,得直接把/usr给拷贝到存储盘中,不能去压缩它。不过这样处理,也不知道文件权限这些会不会丢失。

参考文章

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值