安装Ubuntu16.04失败
原本安装的是Ubuntu14,但是在使用caffe时总是出错,所以干脆将Ubuntu从14升级到16,结果整出一堆麻烦。在解决这些麻烦的过程也学习了不少系统启动的细节。印证了那句话“如何没有装过十遍以上的系统就不能说学会了linux”。那么这是我的第二遍了,我也准备迎接剩下的八遍了。
下面我会从几个方面讲起
- 安装过程
- 系统启动
- grub常用命令
- 我的解决方案
安装过程
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失败的更多相关文章
- 初用Linux, 安装Ubuntu16.04+NVIDIA387+CUDA8.0+cudnn5.1+TensorFlow1.0.1
因为最近Deep Learning十分热门, 装一下TensorFlow学习一下. 本文主要介绍安装流程, 将自己遇到的问题说明出来, 并记录自己如何处理, 原理方面并没有能力解释. 由于本人之前从来 ...
- win10安装ubuntu16.04双系统
前话:因为感兴趣吧也是专业需要,所以自学了U盘重装系统以及在win10的情况下安装Ubuntu16.04双系统.借此博客,记录下我安装Ubuntu的过程,方便日后回忆. 正因如此,本篇博客会写的十分简 ...
- Win7 U盘安装Ubuntu16.04 双系统详细教程
Win7 U盘安装Ubuntu16.04 双系统详细教程 安装主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: ...
- 路由器安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错误。向目标系统中安装busybox-initramfs软件包时出现一个错误。请检查/var/log/syslog或查看第四虚拟控制台以获得详细
公司的路由器要ubuntu服务器进行路由网络功能的管理,在安装的时候出现下面的错误提示: 安装ubuntu-16.04.1-server-amd64出现“无法安装busybox-initramfs”错 ...
- win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)
Ubuntu16.04作为目前最新版本的ubuntu系统,相信很多人都想在自己的电脑上安装一下,然而系统的安装方法各式各样,u盘法.grub引导法等等,这里我将介绍在win7系统下用easyBCD软件 ...
- win10下安装Ubuntu16.04双系统
其实我是不喜欢系统的,之前都是在win下面进行开发,现在来了个项目,经过各种环境的安装调研,最终选择在Ubuntu下面进行开发.之前想着为啥不在虚拟机里面安装Ubuntu进行操作呢,由于虚拟机的体验不 ...
- win10安装ubuntu16.04及后续配置
原文地址:https://www.jianshu.com/p/842e36a8255c UEFI 模式下win10安装ubuntu16.04双系统教程 - baobei0112的专栏 - CSDN博客 ...
- win10安装ubuntu16.04双系统历程
目录 win10安装ubuntu16.04双系统 历程 安装时间 安装准备 安装过程 其他问题 win10安装ubuntu16.04双系统 历程 安装时间 2018.11.30 安装准备 u盘(格式化 ...
- 用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu16.04图文教程
用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu 作者:TeliuTe 来源:基础教程网 1.准备Ubuntu安装文件 1)下载带amd的64位 Ubuntu 桌面版光盘镜像文件,如 ...
随机推荐
- python基础知识——字符串详解
大多数人学习的第一门编程语言是C/C++,个人觉得C/C++也许是小白入门的最合适的语言,但是必须承认C/C++确实有的地方难以理解,初学者如果没有正确理解,就可能会在使用指针等变量时候变得越来越困惑 ...
- C#的发展已经15年了 。。。历史发展
C#是微软公司在2000年6月发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行.它借鉴了Delp ...
- IDEA 环境设置
IDEA环境设置 任何事物都有两面性,如何用好才是关键.IDEA为我们提供了丰富的功能,但不代表默认的配置就适合于你.我们应当根据自己的条件.需求合理的配置,从而驾驭好这匹悍马.让它成为我们编程的利器 ...
- vivado hls(1)
笔记 1.vivado hls是fpga高级综合工具,可以将C语言转换成verilog代码,适合编写算法,但是要有硬件思想. 2.软核就是只要资源足够,就可以用逻辑打一个CPU出来,与硬核不一样,硬 ...
- Python爬虫——爬豆瓣登录页面
直接上代码 import urllib.request import http.cookiejar from lxml import etree # from spiderImg import get ...
- esp8266 SDK开发之GPIO中断
先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...
- Nginx 限制连接的实践 (DDOS)
参考: 运维人员的日常 关于限制用户连接,Nginx 提供的模块: ngx_http_limit_req_module , ngx_http_limit_conn_module , 还有 stre ...
- [js高手之路] vue系列教程 - 绑定class与行间样式style(6)
一.绑定class属性的方式 1.通过数组的方式,为元素绑定多个class <style> .red { color:red; /*color:#ff8800;*/ } .bg { bac ...
- 固定表头,单元格td宽度自适应,多内容出现-横向纵向滚动条数据表格的<前世今生>
固定表头,单元格td宽度自适应,多内容出现-横向纵向滚动条数据表格的<前世今生> 先上图例 & 无论多少数据--都完美! 背景:由于我司行业方向,需要很多数据报表,则t ...
- 最新版Solr 7.2安装配置
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...