安装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 桌面版光盘镜像文件,如 ...
随机推荐
- java 分解质因数
算法目的:对一个正整数分解质因数 一.算法分析: 1.建立整数列表,保存求到的因数. 2.声明整数i=2,用以递增取模:整数m,用于临时保存n 3.建立while循环,i小于等于整数m时,判断m%i, ...
- 服务器 Python服务停服、起服脚本
近日,在阿里云服务器上部署了一个Python,Web框架为Tornado,服务器为Ubuntu 16.04. 服务的启动也十分的简单: python services.py 我是利用Xshell工具连 ...
- 源码中的哲学——通过构建者模式创建SparkSession
spark2.2在使用的时候使用的是SparkSession,这个SparkSession创建的时候很明显的使用了创建者模式.通过观察源代码,简单的模拟了下,可以当作以后编码风格的参考: 官方使用 i ...
- 微信小程序参数二维码6问6答
微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...
- Spring_Aop的xml和注解的使用
动态代理: 目的:在不改变源代码的情况下,对方法进行增强! 动态代理又分为两种: 1.第一个就是基于接口的动态代理,他是由jdk提供的 2.基于子类的动态代理:cgli ...
- ASP.NET Core学习之一 入门简介
一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...
- 正确显示textarea中输入的回车和空格
在textarea中输入的文本.如果含有回车或空格.在界面上显示的时候则不那么正常.回车消失了,空格变短了. 如何解决这个问题呢.有2种方法. 1.使用<pre>标签 w3c对pre元素是 ...
- python 常用算法
算法就是为了解决某一个问题而采取的具体有效的操作步骤 算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n) 认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的 ...
- Mac操作系统下忘记MYSQL的密码
1. 在系统偏好 中,中止MySQL服务.: 2. cd/usr/local/mysql/bin sudo ./mysqld_safe --skip-grant-tables 3. 登录MySQL ...
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...