上周在更新Manjaro Linux的时候误触了电源键,导致内核更新了一半系统强制关机,重启时正常进入grub但无法正常引导进入系统。

由于不想重装系统(一大堆环境和工具的配置还是相当繁琐的),加上初步判断应该仅仅是内核引导镜像没能正常安装导致的问题,所以决定先用liveUSB进行急救。

需要准备的工具:

  • 一个使用较新版本Manjaro Linux的liveUSB(可以使用dd将镜像直接写入u盘)
  • 待修复设备需要联网环境(没有其实也不用担心,不过最好还是需要联网环境)

下面开始修复启动。

首先通过liveUSB启动,在liveUSB的中我们原先的系统文件是保存在电脑的磁盘上的,默认不会被挂载,所以我们先要把除了/home以外的系统目录挂载到当前的任意目录,我们选择挂载在/mnt中:

sudo mkdir /mnt/manjaro
sudo mount /dev/sda2 /mnt/manjaro # sda2为/分区所在设备,可以使用lsblk查看

随后是关键的一步,因为在UEFI下安装Manjaro Linux时我们都额外为/boot/efi/进行了单独的分区,所以我们这里也需要挂载它。默认挂载根目录时并不会挂载这个目录,因为它们不在同一个分区,我的efi目录根据lsblk显示位于/dev/sda1:

$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 50.8G 0 part /
└─sda3 8:3 0 414.8G 0 part /home

所以我们把efi目录也挂载进文件系统,否则内核无法重新安装:

sudo mount /dev/sda1 /mnt/manjaro/boot/efi

另外对于一些虚拟目录,例如/dev和/sys,我们也需要手动绑定,否则chroot后运行pacman会出错:

sudo mount --bind /dev /mnt/manjaro/dev
sudo mount --bind /proc /mnt/manjaro/proc
sudo mount --bind /sys /mnt/manjaro/sys

这样系统文件就准备完成了,现在我们在挂载目录下chroot,然后重新安装内核:

cd /mnt/manjaro
chroot .
pacman -S linux # 如果这一步报错,检查自己系统目录是否正确挂载,如果正确挂载则先运行pacman -S archlinux-keyring
# 内核重装完成后继续上次未完成的系统更新
pacman -Syu

如果你安装了不同版本的内核的话,这样只能修复系统默认版本的内核,对于Manjaro 18.0来说是4.14.x。

所以在grub引导界面我们需要选择对应的版本才能正常启动,如果想恢复其他版本的内核,可以在用默认版本内核启动后去Manjaro Settings Manager中重新安装。

这样就避免了重装修复了Manjaro的启动问题。

修复UEFI模式下Manjaro Linux启动问题的更多相关文章

  1. Visualbox在UEFI模式下无法正常引导

    引子 前几天VMware Workstation Pro 14发布了,从12更新到14之后,很多的虚拟机开启后都黑屏.实际并非黑屏,在控制台视图可以看到屏幕的缩略图是正常显示的.目前还没有找到解决方案 ...

  2. 解决大于 4GB 的 Windows 10 镜像在 UEFI 模式下的安装问题

    制作一个 Windows 安装 U 盘是很容易的,使用 UltraISO 这样的刻录工具量产一个 iso 镜像文件到 U 盘即可.然而随着 Windows 10 版本号的提升,镜像变得越来越大,终于 ...

  3. 最小安装模式下Centos7.*网卡启动配置

    最小安装模式下的Centos7.*系统默认情况下,网卡是不启动的.为了解决联网问题,自己搜集了点资料,成功连接了网络.并梳理了下处理过程. 1.首先运行ip addr命令,查看配置文件的名称.有的文章 ...

  4. Myeclipse在debug模式下没加断点程序卡住,start模式下可以正常启动

    参考<eclipse在debug模式下卡住,start模式下可以启动>,地址:https://blog.csdn.net/jack_chen1994/article/details/761 ...

  5. idea 项目在一般模式下可以正常启动,在debug模式下无法启动,像是卡住了的感觉

    项目一般模式下可以启动,debug模式下就是启动不了,后经过排查发现打的有断点,断点取消在重启立马就可以啦. Method breakpoints may dramatically slow down ...

  6. uefi模式下win10安装双系统ubuntu18.04LTS

    自己折腾了半天,血与泪啊(难得一个可爱的周末 wwww我一定要写下来 跟这个博客几乎一模一样了 https://blog.csdn.net/xrinosvip/article/details/8042 ...

  7. UEFI模式下Win10和Linux双系统

    一.准备 用Win自带的磁盘管理或者进PE分出一块空间来. 你必须要有一个U盘,然后使用软碟通或者ImageWriter把iso系统镜像文件烧录进去,这是比较传统的方法,但既然我们UEFI启动,那就根 ...

  8. MacOS下制作linux启动盘

    在Windows下,我们经常使用软碟通来制作各种系统的启动盘,那么在MacOS下,如何做到呢?MacOS跟Linux的做法基本一致.如果你只想快速地制作好启动盘,请看下面的快速版 首先,你需要以下两样 ...

  9. UEFI模式下安装Win 7系统

    转载自:http://huayi898.blog.163.com/blog/static/2581351620144442319155/ 下载win7_64bit原版官方系统 1.用软碟通制作U盘启动 ...

随机推荐

  1. 远程dump导出svn项目

    使用TortoiseSVN 安装目录下的svnrdump.exe 工具进行导出 1.cmd 到工具路径下 C:\Program Files\TortoiseSVN\bin svnrdump.exe d ...

  2. js 原型链的介绍

    对象的原型链:一个对象所拥有的属性不仅仅是它本身拥有的属性,他还会从其他对象中继承一些属性.当js在一个对象中找不到需要的属性时,它会到这个对象的父对象上去找,以此类催,这就构成了对象的原型链. 下面 ...

  3. 排查MongoDB CPU使用率高的问题

    1.公司业务调整,把一部分数据由Redis转至MongoDB,业务在测试环境正常,生产环境上线后发现压力一上来MongoDB的服务直接把CPU占满了,和开发的同学分析了一下也参考了一下百度上类似的问题 ...

  4. python语法_json_pickle

    ---恢复内容开始--- dic = {"name":"kevin","age":"20"} f = open(&quo ...

  5. Ansible批量修改root密码

    0x01:首先做好免密登录 http://www.cnblogs.com/evlon/p/8094306.html 0x02:批量修改密码 ansible all -m raw -a "ec ...

  6. [Swift]LeetCode168. Excel表列名称 | Excel Sheet Column Title

    Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...

  7. [SQL]LeetCode178. 分数排名 | Rank Scores

    Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...

  8. [Swift]LeetCode845. 数组中的最长山脉 | Longest Mountain in Array

    Let's call any (contiguous) subarray B (of A) a mountain if the following properties hold: B.length ...

  9. [Swift]LeetCode901. 股票价格跨度 | Online Stock Span

    Write a class StockSpanner which collects daily price quotes for some stock, and returns the span of ...

  10. [Swift]LeetCode933. 最近的请求次数 | Number of Recent Calls

    Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...