美文网首页linux
修复LinuxMint对Manjaro boot的错误

修复LinuxMint对Manjaro boot的错误

作者: 饭离烨 | 来源:发表于2017-04-20 12:35 被阅读227次

最近为了能稳定连接服务器而不用在Windows和Linux之间切换来切换去买了台式专门装Linux。Ubuntu用久了便寻思着换个发行版玩一玩(生命在于折腾嘛:-D),研究半天看上了LinuxMint和Manjaro,反复琢磨也分不出个高低。刚好有两块硬盘就直接两个都装了Dual boot。

因为在主硬盘里安装的LinuxMint所以就用它的grub来引导两个系统。然而这时候却出现了问题。当我从grub的menu中选择了manjaro之后,屏幕上出现了一堆输出并停止工作。输出的最后一行是:

Kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)

Google了一下,发现这还是一个known issue,主要原因是Manjaro(Arch)的grub中有一些比较特殊的配置,因此很难从别的发行版中boot Manjaro而不产生错误。比较直接的解决方案是使用Manjaro的引导来boot。Manjaro的grub在更新搜索后可以正常boot LinuxMint。如果你想使用这种方案,请搜索改变硬盘引导顺序的相关方法。如果你没法或者不想改变硬盘引导顺序,只想使用LinuxMint的grub来boot两个系统(像我一样),那么本文就是来解决这个问题的。

本文的解决方案主要参考了这个这个帖子。里面提出了许多解决方案,本人基本上都试了一遍,并最终成功修复。本文给出的最终方案是其中几种方案的结合,也许有些操作是多余的,本人并没有测试过拿掉其中一步对系统的影响。本人也不是系统专家,写本文的主要目的是避免自己忘记怎样修复这个问题的,并且给其他跟我一样遇到这个问题的新手一个帮助,也欢迎大家来一同讨论。

解决方案:

  1. 首先在LinuxMint中执行
    sudo update-grub
    
    grub-mkconfig -o /boot/grub/grub.cfg
    
    以确保grub探测到了Manjaro系统。一般来说这一步并不能解决本文所描述的问题,只是确保grub中存在Manjaro系统的条目。
  2. 修改HOOKS value:
    在Manjaro系统中,打开/etc/mkinitcpio.conf,检查其中的HOOKS,如果你的是
    HOOKS="plymouth"
    
    那么将它改为:
    HOOKS="base udev autodetect modconf block resume filesystems keyboard keymap fsck usr shutdown"
    
    (这个问题不一定会存在,本人的系统中HOOKS的值就多于"plymouth",但是没有修改的那么多,个人认为本人系统中的配置不是导致无法boot的原因。当然如果你的系统中的确存在这个问题,那么很可能也是导致无法boot的原因之一,那就按照上面说的修改。)
    然后执行:
    sudo mkinitcpio -P
    
  3. 在LinuxMint中,打开/etc/default/grub,检查其中GRUB_CMDLINE_LINUX_DEFAULT的值,如果值中不包含splash,比如只有quiet,添加splash使其成为:
    GRUB_CMDLINE_LINUX_DEFAULT=“quite splash"
    
  4. 在LinuxMint和Manjaro中,找到grub menu中Manjaro条目的配置文件。这里有两种方法:
    1. 打开/boot/grub/grub.cfg,并找到对应于Manjaro的部分。在本人的系统中,这部分由
      ### BEGIN /etc/grub.d/47_custom_proxy ###
      
      开始,紧跟一行为
      menuentry "Manjaro Linux (17.0) ..."
      
      在一些配置内容后以
      ### END /etc/grub.d/47_custom_proxy ###
      
      结束。
    2. 使用Grub Customizer(推荐新手在LinuxMint下使用该方法),在List configuration中找到Manjaro对应的条目,点击右键-->edit(编辑),弹出的对话框内Boot sequence下就是1中相同的配置信息。
  5. 在LinuxMint的Manjaro条目的配置文件中,有一行为:
    initrd /boot/intel-ucode.img
    
    而在Manjaro的Manjaro条目的配置文件中,该行则为:
    initrd /boot/intel-ucode.img /boot/initramfs-4.9-x86_64.img
    
    其中,initramfs-4.9-x86_64.img会根据具体系统和核心的版本不同而有所变化。本人写作本文时安装的是64位Manjaro 17.0的kernel 4.9版。将LinuxMint中的initrd行修改为与Manjaro中对应行一致。随后执行sudo grub-update更新grub,重启电脑检查grub修复情况。
    本人就是在这一步之后成功修复了Manjaro系统的boot。

基本上,上述的完整方案能够覆盖导致无法boot Manjaro系统的几种主要原因。如果你仍旧无法解决该问题,或者在实现上述方案时有所疑惑,也欢迎留言来讨论。最后,也希望Manjaro团队或其他发行版能够早点解决这个问题。

By the way,Manjaro是真的好用,ArchWiki也算是文档中的楷模了。希望CUDA和CuDNN能早点官方支持啊。

相关文章

网友评论

    本文标题:修复LinuxMint对Manjaro boot的错误

    本文链接:https://www.haomeiwen.com/subject/vlxhattx.html