Deepin20.8 Linux 误删 /boot 分区 修复记录

2023-05-16

Deepin20.8 Linux 误删 /boot 分区 修复记录

故事背景:
朋友使用的是物理机,Deepin 20.8 操作系统,有桌面版本,误删 /boot 目录,重启机器以后,无法进入系统
开机后直接进入 BIOS 页面,能看到硬盘
询问以后,朋友说误删了 /boot 目录
晕菜。。。

解决思路:
先从 好的 Deepin20.8 系统 打包拷贝 一份 /boot 分区目录,传到 U盘1 上
然后通过 U盘2(U启动盘)进救援模式,重新修复原系统的 /boot 分区
最后恢复原系统

以下是详细步骤:
1、下载 Deepin 20.8 操作系统 的 iso 文件,使用 rufus 工具刻录到空的 U盘 中,或者使用 ventoy 工具(先制作启动盘,然后把 iso 文件放进去)

2、插上 U盘2,物理机开机进入 BIOS 设置启动项,设置 U盘2 第一启动

3、然后重启机器,进入系统安装模式,出现第一幕 Install 5.15.77 选项,迅速按 Tab 键

4、然后移动键盘左、右键编辑,在 quiet 后面追加 init=/bin/bash,并删除 installer,然后回车

5、回车以后进入救援模式(可以使用终端命令行),先 lsblk 查看原来的硬盘,然后创建目录,把相应的盘挂载到目录上去

lsblk 查看硬盘,得知 /dev/sda1 是 U盘2,
/dev/nvme0n1 是原来系统的硬盘,
/dev/nvme0n1p4 是 1.5G,这个是 /boot 分区
/dev/nvme0n1p2 是 200G,这个是系统分区

创建预先挂载目录:mkdir -p /mnt/{osb,os,boot}
挂载 boot分区所在硬盘:mount /dev/nvme0n1p4 /mnt/osb
挂载 系统盘所在硬盘:mount /dev/nvme0n1p2 /mnt/os

插入 U盘1,lsblk,得知 /dev/sdb1 是 U盘1
挂载正常的 boot 分区目录文件所在的U盘:mount /dev/sdb1 /mnt/boot

6、拷贝 正常的 boot 分区目录文件 到 原系统盘 boot分区所在硬盘
cp -a /mnt/boot/* /mnt/osb/

7、查看设备id
blkid

8、找到 /dev/nvme0n1p4 和 /dev/nvme0n1p2 的设备的 UUID,并记录,可以先记在本子上,手写也可以

9、编辑 grub.cfg 文件
vim /mnt/osb/grub/grub.cfg
修改 Deepin20.8 那一部分的 UUID 为当前机器的 硬盘分区 的 UUID

menuentry 'Deepin 20.8 GNU/Linux' --class deepin --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f4ddbe77-ab62-46a6-aa66-01ef8d7b1271' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root  2eaxx-xx-xx-xx-xxae
	else
	  search --no-floppy --fs-uuid --set=root 2eaxx-xx-xx-xx-xxae
	fi
	linux	/vmlinuz-5.15.77-amd64-desktop root=UUID=f4xx-xx-xx-xx-xx71 ro  splash quiet  DEEPIN_GFXMODE=$DEEPIN_GFXMODE
	initrd	/initrd.img-5.15.77-amd64-desktop
	boot 
}
search --no-floppy --fs-uuid --set=root  2eaxx-xx-xx-xx-xxae

这一行表示的是 /boot 分区所在的盘,所以 设备 UUID 应该为 /dev/nvme0n1p4 的 UUID

linux	/vmlinuz-5.15.77-amd64-desktop root=UUID=f4xx-xx-xx-xx-xx71 ro  splash quiet

这一行表示的是 系统盘 分区 所在的盘,所以 设备 UUID 应该为 /dev/nvme0n1p2 的 UUID

修改完以后,保存并退出

10、拷贝 到 系统盘所在目录一份
cp -a /mnt/osb/* /mnt/os/boot/*

11、重启物理机(强制下电,然后手动上电),按关机键、隔3~5s 再按开机键

12、重启后,物理机进入 grub 命令行模式

13、先确定硬盘分区
ls 可以看到硬盘分区

14、使用以下 grub 命令,进入系统

set prefix=(hd0,gpt2)/boot/grub
set root=(hd0,gpt2)
set linux=(hd0,gpt2)/boot//vmlinuz-5.15.77-amd64-desktop
set initrd=(hd0,gpt2)/boot/initrd.img

insmod normal
normal

15、进入系统,能进入桌面了,然而这并没有完全修复好

16、重新编辑 grub.cfg 文件,批量全部修改 UUID
vim /boot/grub/grub.cfg
在查看模式下,使用下列命令批量替换
:%s/原来的boot分区所在盘的UUID/当前主机boot分区所在盘的UUID/g
:%s/原来的系统盘分区所在盘的UUID/当前主机系统盘分区所在盘的UUID/g
然后保存文件,并退出 Vim 编辑器

17、生效 grub.cfg 配置文件
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/nvme0n1

18、重启物理机
reboot

19、系统恢复正常,完全修复系统,终于成功了

20、再重启机器,正常启动

注意:
误删 /boot 分区目录有风险,操作需谨慎!!!


我们下期见,拜拜!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Deepin20.8 Linux 误删 /boot 分区 修复记录 的相关文章

  • 动态加载库和共享全局符号

    由于我在动态加载的库中观察到全局变量的一些奇怪行为 因此我编写了以下测试 首先我们需要一个静态链接库 头文件test hpp ifndef BASE HPP define BASE HPP include
  • 如何修复 /usr/bin/env 参数处理?

    我遇到了一个奇怪的问题 usr bin env 我设计了一个简单的脚本来显示问题 该脚本使用 Ruby 编写 但使用 Python 编写的类似脚本也会发生同样的情况 这是脚本 usr bin env ruby p ARGV 还有一个没有 u
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con
  • 有没有办法改变vim的默认模式

    有谁知道如何更改vim的默认模式 它的默认模式是命令模式 但是我可以将其更改为插入模式吗 只需将以下行添加到您的 vimrc 中 start Vim s default mode will be changed to Insert mode
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • 终止 ssh 会话会终止正在运行的进程

    我正在使用 ssh 连接到我的 ubuntu 服务器 我使用命令启动编码程序 然而 似乎当我的 ssh 会话关闭时 因为我在进入睡眠状态的笔记本电脑上启动它 有没有办法避免这种情况 当然 阻止我的笔记本电脑休眠并不是永久的解决方案 运行你的
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E
  • 带有接收器的 boost_log 示例无法编译

    我正在考虑将 boost log 用于一个项目 一开始我就遇到了以下问题 我在以下位置找到的升压日志示例 http www boost org doc libs 1 54 0 libs log example doc tutorial fi
  • 如何从 swagger 文档生成静态 html 文件?

    我创建了一个 Swagger 文档yaml文件位于 api swagger swagger yaml 现在我想分享一个静态 HTML 文档及其定义 但它已在招摇项目 https github com swagger api swagger
  • “以下软件包将被更高优先级的频道取代”是什么意思?

    我正在尝试将 fuzzywuzzy 安装到 64 位 Linux 中的 Anaconda 发行版上 当我这样做时 它试图改变我的conda and conda env to conda forge渠道 如下 我通过以下方式在 anacond
  • pip 找不到满足要求的版本 django==2.2.1

    我刚刚将操作系统更改为 linux 并且想安装 django 但我无法安装最新版本的 django 我努力了 pip install django 但是它安装了 django 1 11 11 这不是我需要的 我还将我的 pip 升级到了 1
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • 串口读取未完成

    下面的函数用于在Linux下从串口读取数据 我在调试时可以读取完整的数据 但是当我启动程序时 读缓冲区似乎并不完整 我正确接收了一小部分数据 但缓冲区的其余部分完全正确zero 可能是什么问题呢 int8 t serial port ope
  • python 的 fcntl.flock 函数是否提供文件访问的线程级锁定?

    Python 的 fcnt 模块提供了一种名为 flock 1 的方法来证明文件锁定 其描述如下 对文件执行锁定操作op 描述符 fd 文件对象提供 fileno 方法被接受为 出色地 请参阅 Unix 手册集群 2 了解详情 在某些系统上
  • 如何在 .zip 文件中使用 grep

    有 3 个文件 a csv b csv c csv 压缩为 abh zip 现在可以在 abh zip 上执行 grep 命令 是否有任何通配符 仅对里面的 c csv 文件运行 grep压缩 如果你有zipgrep 据我所知 它是随zip
  • 是否可以为我的 Linux 函数复制命令的制表符补全?

    假设我有一个名为的 bash shell 函数magic 我想定义一个制表符补全功能 magic这将允许magic搭载任何给定命令的选项卡完成功能 如果可用 换句话说 我想要magic能够做这样的事情 magic git
  • Java 内存错误:无法创建新的本机线程

    运行 java 服务器时 我在 UNIX 服务器上收到此错误 Exception in thread Thread 0 java lang OutOfMemoryError unable to create new native threa
  • 如何使用 sed 交换两行?

    有谁知道如何更换line a with line b and line b with line a使用 sed 编辑器在文本文件中 我可以看到如何用保留空间中的一行替换模式空间中的一行 即 Paco x or Paco g 但是如果我想采取
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这

随机推荐