原本安装的是Ubuntu14,但是在使用caffe时总是出错,所以干脆将Ubuntu从14升级到16,结果整出一堆麻烦。在解决这些麻烦的过程也学习了不少系统启动的细节。印证了那句话“如何没有装过十遍以上的系统就不能说学会了linux”。那么这是我的第二遍了,我也准备迎接剩下的八遍了。

下面我会从几个方面讲起

  1. 安装过程
  2. 系统启动
  3. grub常用命令
  4. 我的解决方案

安装过程

ubuntu安装的详细过程参见我的另一篇博客——安装win8+Ubuntu14.04双系统的经验总结 - 上官栋 - 博客园,这里不过多讨论了。我一开始是从liveUSB升级的方法安装ubuntu16,但是启动电脑的时候直接黑屏了,我以为失败了。接着又尝试自定义分区的方式重新安装,结果又黑屏了。然后在开机时进入BIOS调整启动顺序进入windows,把载有ubuntu的盘格式化之后,在用easyBCD重写了MBR,重新安装ubuntu16。为了以防万一,我又下载了ubuntu的最新版重新制作启动盘。这样相当于重装一次双系统,我想这样应该不会出错了吧。结果又黑屏了。之后又尝试了几种不同的安装方法,结果都会进入这个命令行的界面。

等到我实在找不到可行的办法才开始认真琢磨这个命令行界面是怎回事。一番搜索之后才认识到我进入了grub的命令行。也终于跳出了反复装系统的死循环。

系统启动

想要明白grub是什么,必须要明白开机启动的过程。这里推荐一篇博客计算机的启动过程(详细) - CSDN博客。讲得比我要详细的多。

系统在启动时会先从BIOS中读取程序,这些程序用于硬件检测,环境初始化。同时BIOS也存储了用户设定的启动顺序,例如从硬盘A,硬盘B,光驱,优盘等不同硬件启动。按照顺序,计算机会检测这些硬件是否装载了操作系统(比较其放置MBR的位置的结尾两位是否为0xAA55)。如果装载了,就会读入这个设备第一个分区的程序,也就是主引导记录(MBR)。

到这里还不是操作系统的程序。MBR的作用是告诉计算机操作系统存储在我这个存储器的那个分区上。如果操作系统装在主分区上,计算机就会根据卷引导记录查找到分区中具体的位置,装载入操作系统。如果在逻辑分区,那么就从扩展分区中依次查找,直到找到操作系统。不过要是有两个操作系统呢?那么这个MBR就不能满足要求了。因为他不提供选择的功能,程序只能加载一个操作系统。为了适应计算机结构的发展,Intel又对BIOS+MBR做了改进,提出了EFI+GPT的结构。EFI可以支持32位,64位指令,硬件接口可扩展,采用C语言的堆栈架构,容易跨平台,也容易开发。GPT采用新的分区方式,可以有多个主分区,硬盘容量上限突破2T。

如果我们想在一个硬盘里面装两个操作系统应该怎么办?无论是BIOS+MBR还是EFI+GPT似乎都不支持这种设定。有一种方法是修改MBR或者GPT中的操作系统指向,让其指向一个小的操作系统(mini OS),也就是现在常用的grub和LILO。这个mini OS的功能主要是让用户选择操作系统,但是实际上他的功能和权限远远超过这个要求。你完全可以在grub下访问硬盘中的文件。

通过grub这种mini OS就可以选择我们需要的操作系统了,到这里终于算是启动成功了。

grub常用指令

通过系统启动中的说明,我们明白了grub就是引导计算选择操作系统的mini OS。作为OS就会有指令,下面介绍一些:

set:设置常量,例如“set root=(hd0,0)”就是讲root设置为hd0,0。如果只输入“set”,就可以看到环境中常量,注意root和prefix的值,这两个量很重要,分别指ubunto系统目录和grub所在目录,启动失败主要是这两个变量错误。

linux:内核加载命令,例如“linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1”

initrd:镜像文件加载命令,例如“initrd /boot/initrd.img-3.13.0-29-generic”

insmod:启动模式选择,例如“insmod/boot/grub/i386-pc/normal.mod”

boot:启动

exit:退出

normal:进入normal.mod

cat:查看文件

ls:列出目录下的文件

我的解决方案

其实在一开始进入grub界面只是一些参数错误,操作系统并没有什么问题。但是不熟悉命令行操作的我本能的认为一定是安装出现了错误。结果一开始就没有正确的认识问题的根源,花了很多不必要的时间。以后还是应该习惯去使用命令行,这才是与机器打交道的正确方法。

出现黑屏的原因是grub环境变量中root和prefix设置错误,我的ubuntu安装在/dev/sda11,在grub是(hd0,gpt11)。但是root变量却是(hd0,gpt2),这是windows所在的分区。这样就导致grub不能加载grub的选择界面,也不能加载ubuntu的内核。针对此有三种解决方案

一、进入选择界面

输入命令

set root=(hd0,11)
set prefix=(hd0,11)/boot/grub
insmod /boot/grub/i386-pc/normal.mod
normal

经过反复的实验,其实输入下面的命令也是可以的

prefix=(hd0,11)/boot/grub
normal

也就是问题的关键在于让grub找到grub.cfg引导文件。这样就可以进入系统选择界面。

二、加载linux内核

输入命令

set root=(hd0,11)
linux (hd0,11)/boot/vmlinuz-3.13.0-29-generic root=/dev/sda11
initrd (hd0,11)/boot/initrd.img-3.13.0-29-generic
boot

这段命令是让系统加载ubuntu的内核,直接进图ubuntu,不经过选择界面

三、加载windows系统

输入exit退出grub,选择windows boot manager,加载windows系统

在进入ubuntu之后,有人建议输入命令

update-grub
grub-install /dev/sda

用来更新grub。但我的问题是grub在启动时的环境变量错误。这种方法也试过,但问题没有解决。所以现在每次开机要输入一些命令。不过现在我不想折腾了,就当做密码长一点吧。以后再装系统时一起解决吧。

2018年3月2日更新:

在安装

安装Ubuntu16.04失败的更多相关文章

  1. 初用Linux, 安装Ubuntu16.04+NVIDIA387+CUDA8.0+cudnn5.1+TensorFlow1.0.1

    因为最近Deep Learning十分热门, 装一下TensorFlow学习一下. 本文主要介绍安装流程, 将自己遇到的问题说明出来, 并记录自己如何处理, 原理方面并没有能力解释. 由于本人之前从来 ...

  2. win10安装ubuntu16.04双系统

    前话:因为感兴趣吧也是专业需要,所以自学了U盘重装系统以及在win10的情况下安装Ubuntu16.04双系统.借此博客,记录下我安装Ubuntu的过程,方便日后回忆. 正因如此,本篇博客会写的十分简 ...

  3. Win7 U盘安装Ubuntu16.04 双系统详细教程

    Win7 U盘安装Ubuntu16.04 双系统详细教程 安装主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: ...

  4. 路由器安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错误。向目标系统中安装busybox-initramfs软件包时出现一个错误。请检查/var/log/syslog或查看第四虚拟控制台以获得详细

    公司的路由器要ubuntu服务器进行路由网络功能的管理,在安装的时候出现下面的错误提示: 安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错 ...

  5. win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)

    Ubuntu16.04作为目前最新版本的ubuntu系统,相信很多人都想在自己的电脑上安装一下,然而系统的安装方法各式各样,u盘法.grub引导法等等,这里我将介绍在win7系统下用easyBCD软件 ...

  6. win10下安装Ubuntu16.04双系统

    其实我是不喜欢系统的,之前都是在win下面进行开发,现在来了个项目,经过各种环境的安装调研,最终选择在Ubuntu下面进行开发.之前想着为啥不在虚拟机里面安装Ubuntu进行操作呢,由于虚拟机的体验不 ...

  7. win10安装ubuntu16.04及后续配置

    原文地址:https://www.jianshu.com/p/842e36a8255c UEFI 模式下win10安装ubuntu16.04双系统教程 - baobei0112的专栏 - CSDN博客 ...

  8. win10安装ubuntu16.04双系统历程

    目录 win10安装ubuntu16.04双系统 历程 安装时间 安装准备 安装过程 其他问题 win10安装ubuntu16.04双系统 历程 安装时间 2018.11.30 安装准备 u盘(格式化 ...

  9. 用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu16.04图文教程

    用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu 作者:TeliuTe 来源:基础教程网 1.准备Ubuntu安装文件 1)下载带amd的64位 Ubuntu 桌面版光盘镜像文件,如 ...

随机推荐

  1. BZOJ1036 (其实这只是一份板子)

    我说我是不是完蛋了啊... ...昨天考试线段树写错,调了好久才调回来:今天做这道树链剖分辣鸡操作题,TM写错了4个地方!先是建树为了省常数打了一个build结果初值赋错了,然后又是线段树!getma ...

  2. JS画几何图形之四【饼图】

    饼图是将一个圆分割为多个扇形. 样例:http://www.zhaojz.com.cn/demo/draw8.html 依赖:[扇形] //饼图 //dot 圆点 //r 半径 //data 数据(一 ...

  3. 微信公众号开发——通过ffmpeg解决amr文件无法播放问题

    今天刚好碰到个需求,要在微信浏览器中实现录音,并在其他页面上播放.录音功能本身是JS SDK的功能,倒没啥问题,然而录音的文件保存下来是amr格式,而IOS的浏览器没法播放amr(据说微信浏览器的vi ...

  4. centos7 系统安装问题汇总

    centos7 系统安装问题汇总: 1.使用u盘 安装centos7时,一直提示:'.../dev/root  does not exist,could not boot' 解决方法: 2.不能将原来 ...

  5. input 上传图片显示预览、调用摄像头,ios和Android的兼容性解决

    html代码: <img id="pic" src="img/pic.png"/> </span><input id=" ...

  6. Java点滴之Java概述

    写在前面的话 2017年对我来说真是多灾多难的一年,在这过去的一年里发生的种种不幸,促使我下定决心一切要重新开始.在去年的夏天从公司裸辞后,来到了一个陌生的城市开启了新的求职历程,万万没想到的是,求职 ...

  7. getComputedStyle与currentStyle获取样式(style/class)

    今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式. 因为elem.style.width只能获取elem的style属性里的样式,无 ...

  8. sql sever模糊查询和聚合函数

    使用is null 的时候 要确保 查询的列 可以为空! null:  01.标识  空值  02.不是0,也不是空串""  03.只能出现在定义 允许为null的字段  04.只 ...

  9. Head First设计模式之状态模式

    一.定义 定义:允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类. 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为. 何时使用:代码中包含大量 ...

  10. golang 队列

    You have to perform NN operations on the queue. The operations are of following type: E xE x : Enque ...