前言

  制作好的efi格式的ubuntu15.10系统放到服务器主板上启动不了,于是将其改为bios格式,发现问题解决了,成功登入系统。下面是操作过程的一个记录。

测试环境

目标环境

系统: Ubuntu15.10

硬件: x86平台,服务器主板

宿主环境

系统: Ubuntu15.10

硬件: x86平台,普通主板

详细步骤

  • 第一步,将要修改的磁盘连接到额外的ubuntu系统的电脑上(我是通过sata转usb连接到笔记本上);
  • 第二步,分区修改。efi启动模式的磁盘会有一个efi分区,文件系统为fat32,我们需要将其格式化为boot分区的文件系统,可以是ext4。我采用gparted来完成的,细节就不细说了,我这里还通过管理标志界面去掉esp标志;
  • 第三步,进入要修改的磁盘环境,修改必要信息。依次执行下面命令,注意,替换sdd为自己外接的磁盘名,另外,这里的sdd2是指根分区,sdd1是指boot,也就是之前的efi分区,请根据自己的情况替换;
挂载根分区
$ sudo mount /dev/sdd2 /mnt
挂载boot分区
$ sudo mount /dev/sdd1 /mnt/boot/
挂载proc
$ sudo mount -o bind /proc/ /mnt/proc/
挂载sys
$ sudo mount -o bind /sys/ /mnt/sys
挂载dev
$ sudo mount -o bind /dev/ /mnt/dev
切入到外接磁盘(要修改的磁盘)环境
$ sudo chroot /mnt /bin/bash

如果前面指令全部成功执行,这时应该已经进入需要修复的磁盘环境里了。执行下面命令来卸载掉grub-efi-amd64(我这里是64位系统,32位系统的efi包肯定不同,需要根据情况修改)

$ sudo apt-get purge grub-efi-amd64 grub-common

,卸载完后我们就要安装BIOS version的grub了,执行下面命令即可:

$ sudo apt-get install grub-pc

注意: 可能需要配置dns,否则因为不能联网,导致apt-get install 失败,我这里临时配置一下(我的网关为192.168.1.1),于是我将dns指向它了。另外安装grub-pc时需要根据界面提示做相应动作,总之要指定安装到磁盘对应的设备名中,而不是对应的分区名中,如sdd,而不是sdd1。

$ sudo echo "nameserver 192.168.1.1" > /etc/resolv.conf
  • 第四步,修改fstab。去掉之前efi分区的挂载,我们这里用boot分区的uuid来替换掉它,要知道uuid,可以通过下面命令获取:
root@mcu-MacBookAir:/# sudo blkid /dev/sdd*
/dev/sdd: PTUUID="7e8d3b3a-6696-4dd2-8625-a1693ecf543e" PTTYPE="gpt"
/dev/sdd1: UUID="066f81f6-a4f5-43e5-ab8c-bb6fceb20de0" TYPE="ext4" PARTLABEL="EFI System Partition" PARTUUID="b1bb909b-ddcb-4ea4-a500-075e02bc3e01"
/dev/sdd2: UUID="d9ecfe99-05eb-4c79-939f-8e3c7a165d28" TYPE="ext4" PARTUUID="f450ba20-b922-4352-8eef-37113fcbfd70"
/dev/sdd3: UUID="ad15ce5a-53ac-4f25-b5b1-b33334e75159" TYPE="swap" PARTUUID="acaf2808-7db5-4b27-900b-52439688c66a"

修改前的fstab文件:

root@mcu-MacBookAir:/# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=d9ecfe99-05eb-4c79-939f-8e3c7a165d28 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=A663-8A43 /boot/efi vfat umask=0077 0 1
# swap was on /dev/sda3 during installation
UUID=ad15ce5a-53ac-4f25-b5b1-b33334e75159 none swap sw 0 0

修改后的fstab文件:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=d9ecfe99-05eb-4c79-939f-8e3c7a165d28 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=066f81f6-a4f5-43e5-ab8c-bb6fceb20de0 /boot ext4 errors=remount-ro 0 1
# swap was on /dev/sda3 during installation
UUID=ad15ce5a-53ac-4f25-b5b1-b33334e75159 none swap sw 0 0

可以看到,主要是修改了第二个挂载条目,即之前的efi条目;

  • 最后一步,完善boot分区的内容。我从之前的boot目录(它里面存放了内核文件)拷贝内核文件到当前的boot分区,于是先卸载掉boot分区,将文件考出,然后再挂载boot分区,将内核文件考入
root@mcu-MacBookAir:/# umount /boot/
root@mcu-MacBookAir:/# cp /boot/vmlinuz-4.2.0-16-generic .
root@mcu-MacBookAir:/# mount /dev/sdd1 /boot/
root@mcu-MacBookAir:/# mv vmlinuz-4.2.0-16-generic /boot/

执行完这行操作了,执行更新grub配置文件和生成initrd

root@mcu-MacBookAir:/# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.2.0-16-generic
root@mcu-MacBookAir:/# update-grub
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.2.0-16-generic
Found initrd image: /boot/initrd.img-4.2.0-16-generic
Found Ubuntu 15.10 (15.10) on /dev/sda6
done

剩下的就是收尾工作了, 退出当前环境,卸载所有和要修复磁盘相关的分区

exit
cd ~
sudo umount /mnt/*
sudo umount /mnt

,然后拔出磁盘,插入到目标主机启动就可以了。

如果哪位遇到相关问题,欢迎留言讨论!

完!

2016年5月

efi转bios详细说明的更多相关文章

  1. 对“传统BIOS”与“EFI/UEFI BIOS”的基本认识

    硬盘(MBR磁盘)分区基本认识+Windows启动原理 大家常会看到硬盘分区中这样的几种说法:系统分区.启动分区.活动分区.主分区.拓展分区.逻辑分区,MBR.PBR.DPT.主引导扇区等.尤其是看到 ...

  2. EFI/UEFI BIOS启动

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主开机纪录分区表.但因为MBR分区表不支持容量 ...

  3. EFI/UEFI BIOS 入门

    我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS是整个计算机系统中最重要的底层系统软件 ...

  4. 使用EFI引导从硬盘(U盘)安装Win7的图文教程

    目前仅支持vista后的64位系统 大部分使用EFI引导安装Win7的教程都是采用光盘启动安装,虽然光盘安装比较简单,但是对于没有光驱的朋友来说还是相当不便,更不用说光盘安装的两大缺点了,一速度慢,二 ...

  5. BIOS + MBR > UEFI + GPT

    BIOS + MBR > UEFI + GPT硬件接口系统与磁盘分区UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR. 名词解释: BIOS (Basic Input/Output S ...

  6. UEFI与 Legacy BIOS两种启动模式详解

    (1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...

  7. Legacy BIOS Boot 是如何启动或引导的

    现在Windows 8 64位操作系统全面采用UEFI引导启动的方式,与过去的Legacy启动有什么区别呢?今天就让我们一起来了解下. Legacy BIOS UEFI Boot 是如何启动或引导的 ...

  8. 预装WIN8系统的电脑安装WIN7的方法

    前些天,给一位客户的本本安装WIN7,因为原来预装了WIN8,结果按常规方法安装一直没有成功,不管是光盘还U盘.所以心里一直有个疑问,所以留意查阅了有关资料和相关的文章,终于明白了问题所在,现在在这里 ...

  9. 虚拟机安装Macintosh探索

    想跟virtualbox安装一个mac os,在pcbeta找到网友分享的原版镜像,挂载安装,结果在安装的时候不是卡在进入界面,就是不停地安装,显然没有那么简单.virtualbox 在用户手册写着支 ...

随机推荐

  1. python 基础篇 06 编码 以及小知识点补充

    本节主要内容: 1. is和==的区别2. 编码的问题 ⼀. is和==的区别1. id()通过id()我们可以查看到⼀个变量表⽰的值在内存中的地址 注  ----<<<在pytho ...

  2. Mysql性能优化三:主从配置,读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  3. 调度器&负载均衡调度算法整理

    一.Linux 调度器   Linux中进程调度器已经经过很多次改进了,目前核心调度器是在CFS(Completely Fair Scheduler),从2.6.23开始被作为默认调度器.用作者Ing ...

  4. HDU 5794 A Simple Chess Lucas定理+dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5794 题意概述: 给出一个N*M的网格.网格上有一些点是障碍,不能经过.行走的方式是向右下角跳马步.求 ...

  5. PHP 用Symfony VarDumper Component 调试

    Symfony VarDumper 类似 php var_dump() 官方文档写的安装方法 : 按照步骤 就可以在 running any PHP code  时候使用了 In order to h ...

  6. Android Studio 添加模块依赖

    原文地址: http://fanjiajia.cn/2018/09/27/Android%20Studio%20%E6%B7%BB%E5%8A%A0%E6%A8%A1%E5%9D%97%E4%BE%9 ...

  7. springMVC前后台数据交互

    假设项目需求是在springMVC框架下,后台要传送一个list到前台,那我们就要做以下几个步骤: 1 在web.xml文件中进行springMVC的配置: <?xml version=&quo ...

  8. 如何使用 window.open() 处理ajax请求返回的url: 在本页面打开并防止浏览器拦截

    ajax请求中用window.open()打开请求返回url(例如实现下载功能时),可能会因为跨域问题导致浏览器拦截 解决办法是:在请求前,打开一个窗口,请求成功后将返回的url直接赋值给该窗口的hr ...

  9. 猜数字(C语言版)

    编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可 ...

  10. Div+Css制作圆

    Div+Css制作四分之一圆主要是使用Css3.0中的border-radius这个圆角隐藏属性.利用这一属性,我们可以画圆,画半圆,四分之三圆,四分之一圆等.以后我会更新…… 如何使用border- ...