Linux和windows双系统启动问题之一(win7 + ubuntu14.04 + legacy bios + mbr)

本文介绍了在legacy BIOS+MBR环境下,安装Linux(Ubuntu 14.04)和Windows 7双系统时遇到的启动问题。当Ubuntu先安装后,使用Windows的EASYBCD新增启动项无法解决问题。解决方案是通过Linux的grub2,在grub命令行中执行特定命令启动Ubuntu,然后执行`update-grub`和`grub-install --recheck /dev/sda`修复启动。文章还探讨了MBR分区表和GPT分区表的区别,以及BIOS和UEFI的区别与兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.计算机启动

当我们在一个主机上安装多个系统时(如Win7和Ubuntu14.04),都会遇到开机启动哪一个系统的问题。这里典型的情况是先安装的是Ubuntu,然后再安装win7,就会出现ubuntu启动项不见的问题。我的电脑是legacy bios+mbr,多数解决方案是使用Windows的启动管理器EASYBCD,参考http://www.crazyant.net/781.html,新增entry,但是并不管用,可能会遇到找不到linux启动分区的情况。反正我的就不管用。另一种解决方案是在linux下使用grub2,可以参考http://blog.youkuaiyun.com/ethan_xue/article/details/7538568,但是在完成sudo update-grub后,直接重启,直接进入了一个grub的命令行。于是参考http://askubuntu.com/questions/121008/server-boots-to-grub-prompt-after-reboot,找打了解决方法。分以下几个步骤:
1. 在grub的命令行中敲ls,会列出很多分区,比如(hd0,msdos8),你需要明确你的linux安装在哪个分区比如我的是sda8。然后执行如下几个命令
2. set root=(hd0, msdos8)
3. linux /vmlinuz root=/dev/sda8 ro
4. initrd /initrd.img
5. boot
等待一会儿,就会启动ubuntu了。进入ubuntu后执行update-grub命令,再次重启,发现再次进入grub命令行界面。于是又重新执行上述步骤,进入ubuntu之后又执行grub-install –recheck/dev/sda,然后重启,结果成功了。经过多次重装系统之后,想搞清楚关于分区和多系统启动的原理,下面会详细讲述。

2.磁盘分区表MSDOS(MBR)和GPT(GUID partitiontable)

我们知道,不管是windows还是linux,都存放在磁盘中,并且由自己的启动程序boot loader启动。计算机开机的时候就得找到引导他们启动的boot loader的位置。而要找到boot loader,就必须要有描述boot loader位置的元数据信息。但是,计算机加电之后内存中并没有程序啊?怎么找到元数据信息呢?首先,我们需要知道的是,计算机在按下开关之后,就会运行第一个程序,但这个程序并不是操作系统的程序,这个程序实际上是固件(已经写入主板的程序),也就是BIOS(Basic Input/OutputSystem)。这个BIOS的作用就是做各种硬件检测,读取参数,并存入CMOS中。此时,BIOS的作用之一就是找到boot loader。不同的计算机厂商都是开发各自的BIOS,而boot loader在磁盘上,如果需要大家统一,最好的方法就是约定boot loader必须装在磁盘的某一个固定的位置(比如磁盘开始的第一个扇区的512Bytes)以便BIOS读取boot loader到内存。因此,早期的设计就是主开机记录MBR(Master Boot Record),里面装着boot loaderÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值