热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

解决Linux和Windows双操作系统的引导问题

文章标题:解决Linux和Windows双操作系统的引导问题。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  尺有所长, 寸有所短. 虽然能完全用Linux工作, 娱乐. 但计算机只是为人类服务的. 怎么方便怎么来, 操作系统亦然, Linux和Windows都给装上.

  本文中, Windows使用XP, Linux选用Ubuntu. 但其实基本思想是一样的: Linux现在流行的bootloader是grub. xp和nt采用的是ntloader.

  Ubuntu论坛里的这篇文章主张采用这样的引导方式: ntloader -> grub -> win/lin. 但正如有的网友所说, grub考虑到了引导windows, 而ntloader还没有考虑过引导windows之外的其他系统. 而且, 使用ntloader来引导比较繁琐. 不如使用grub引导简便. 这里我使用grub来作为bootloader.

  先补充一下基础知识: 理解Linux的启动过程. 另外, 手头要有xp和Ubuntu的安装光盘. (Ubuntu的LiveCD, 用以挂载硬盘分区以及恢复mbr). 在开始之前, 要知道这样几个事实: (1) PC启动时, 在加载bios之后, 紧接着就加载位于mbr中的bootloader, 这个bootloader可以是ntloader, 也可以是grub. (2)安装windows系统时, 安装程序会把ntloader写入到mbr作为bootloader. (3)grub可以被安装到mbr, 也可以安装到其他位置. 但Ubuntu的liveCD进行安装时是默认安在mbr中的.

  这样问题就来了: 怎么才能保证双系统能正常启动呢? 如果重装了其中的一个系统, 如何保证另外一个系统不受影响呢? 这就是这里要说的问题.

  第一次安装

  先安装Windows, 然后安装Linux. 采用这样的顺序不光是为了避免ntloader覆盖掉grub(就算被覆盖了, 也有解决办法, 在后面介绍), 更因为Linux可以被装在扩展分区而Windows不行. 另外, 安装linux时, grub会检测到已有的分区, 从而生成合适的启动选项来加载windows系统.

  要注意的一点就是文件系统, 可以采用这样的方法: 在最开始安装windows时把计划给linux用的空间分为一个区, 之后在安装Linux时将这个区删除, 然后重新创建新的多个分区. Ubuntu liveCD已经做得很傻瓜化, 安装不会碰到任何问题.

  恢复MBR

  相比Linux, Windows会比较频繁地重装, 重装之后的mbr会被覆盖, 从而无法引导linux系统. 解决整个问题只需要恢复以前的MBR. 重装Linux则不存在任何问题. 因为grub会检测到已有的windows分区.

  首先备份mbr, 使用dd命令将硬盘第一个扇区的头446字节'抓'下来保存. 之后重装完windows之后再恢复mbr. 这需要用到linux启动光盘. 启动进入命令行, 挂载那个被保存的mbr文件所在的分区, 然后用dd命令恢复就可以了.(注意我的是SCSI硬盘, 所以是sda, IED硬盘为hda)

  备份MBR:

  # dd if=/dev/sda of=/boot/boot.NNNN bs=446 count=1

  恢复MBR:

  # dd if=/boot/boot.NNNN of=/dev/sda bs=446 count=1

  -为什么不是512呢, 主引导扇区是一个扇区(512字节呀)?

  -只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。

  boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把

  512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘

  DPT表也破坏掉.

  MBR-> Main/Master Boot Record, 有些书上是写成Master的.

  我认为可以分成三个部分吧, MBR+DPT+MagicNumber(446+64+2=512)

  这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因. 然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复, 不是DPT的恢复. 往往MBR里面的第一个指令是cli…… 研究起来是比较有意思的.

  References

  http://forum.ubuntu.org.cn/about17047-0-asc-0.html

  这里可以获得免费的Ubuntu安装光盘:https://shipit.ubuntu.com/


推荐阅读
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
唐耿铠1_747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有