为什么linux能安装在扩展分区而windows必须在主分区?

RT,它是怎么实现的?

Linux 的启动是因为他的 GRUB 的 MBR 里面的代码和 Windows 的 MBR 程序启动方式不同而已。
首先说 MBR 共计 512字节,里面只有 446 字节可以放程序内容,其余空间有一个 55AA 标志和一个 4*16 字节的主分区表数据。
主分区表只有 4 个位置,每个分区 16 字节的表示数据。扩展分区也在这里,但扩展分区的逻辑分区表却不在这里能体现,导致真正存储数据的逻辑分区不能直接找到(需要先通过读取主分区表,找到扩展分区表的入口位置,这个位置其实就是扩展分区在的硬盘中间数据区的开始段落。但逻辑分区表不是连续的数据,他是一个链式数据,每次的数据只是表明本逻辑分区的状况,以及标明下一个分区的开始位置),需要更多的代码功能才能完整的访问全扩展分区。

Linux 的 GRUB MBR 里面的代码是读取固定位置,也就是 MBR 之后紧邻的空闲的几个扇区里面的代码继续启动,这部分代码再读取分区表、继续启动硬盘某个特定位置的 GRUB 二级程序。之后 GRUB 二级程序读取分区驱动等东西后,读取 Linux / 或者 /boot 分区里面的 grub.conf 配置程序按设置显示选择界面或者读取内核启动 Linux。

Windows 的 MBR 里面的代码只有 MBR 里面的 446 字节。这个 MBR 程序因为和分区表都在 MBR 扇区里面,BIOS 启动系统时,会固定先读取这 512 字节并且运行他,结果就是不需要任何的操作,446 字节就可以知道分区表状况。 Windows 的 MBR 程序就直接扫描这 4*16 字节,找到标记为“激活”的分区,那么就读取这个分区的 superblock 的 boot 区,并且运行 boot 区程序。

这样你看到区别没:
GRUB 是先启动自己到足够的功能后再看分区表。Windows 是直接看主分区表之后启动对应位置的系统启动程序。

这就导致了 GRUB 代码体积更大,但功能更多。Windows 的 MBR 程序体积很小,但功能简单。
这是两种不同的计算机系统实现方式,相对来说 GRUB 的限制更多,因为他某些环节需要用直接地址的方式读取大量的程序代码。而 Windows 只需要在自己的 C 盘上的 boot 区域放好真正的启动程序就行了。

GRUB 需要某些代码不能变地方,Windows 只需要自己的 C 盘某些地方必须是启动代码。前者更灵活,因为 GRUB 的某些启动代码可以任意放置,只要前期程序可以找到。Windows 因为整个系统都是自己掌控,所以固定位置可以方便减小功能要求。

各有各的好处,其实 GRUB 也支持类似 Windows 的那种 MBR 启动某个主分区上的 GRUB 来继续启动系统的功能。不过 Linux 不是一家掌握的,而且Linux 分区是针对服务器、多用户设计的,文件就是散开放置的,位置很难固定。Windows 不光数据是连续存放,而且整个系统底层自己控制,可以很方便的保证某部分空间放置特定的文件体。

其实都是 BIOS 折腾的,BIOS 功能太简单,所以限制了系统的启动。
苹果机上面用的是 EFI ,这个要比 BIOS 好很多,所以 MAC 的系统启动会灵活很多。不需要折腾 446 字节的程序代码问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-16
谁说的,都可以.
相似回答