一、系统引导过程简介
系统引导过程主要由以下几个步骤组成(以硬盘启动为例)
1、开机;
2、BIOS加电自检(POST---Power On Self Test),内存地址为0fff:0000;
3、将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
4、检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机;
5、跳转到0000:7c00处执行MBR中的程序;
6、MBR先将自己复制到0000:0600处,然后继续执行;
7、在主分区表中搜索标志为活动的分区.如果发现没有活动分区或者不止一个活动分区,则停止;
8、将活动分区的第一个扇区读入内存地址0000:7c00处;
9、检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动;
10、跳转到0000:7c00处继续执行特定系统的启动程序;
11、启动系统.
以上步骤中(2),(3),(4),(5)步由BIOS的引导程序完成;(6),(7),(8),(9),(10)步由MBR中的引导程序完成.
一般多系统引导程序(如Smart Boot Manager, BootStar, PQBoot等)都是将标准主引导记录替换成自己的引导程序,在运行系统启动程序之前让用户选择想要启动的分区.而某些系统自带的多系统引导程序(如LILO,NT Loader等)则可以将自己的引导程序放在系统所处分区的第一个扇区中,在Linux中即为两个扇区的SuperBlock.
注:以上步骤中使用的是标准的MBR,多系统引导程序的引导过程与此不同.
二、硬盘结构及参数
3D参数(Disk Geometry):
CHS(Cylinder/Head/Sector) C-Cylinder柱面数表示硬盘每面盘片上有几条磁道,最大为1024(用10个二进制位存储);
H-Head磁头数表示硬盘总共有几个磁头,也就是几面盘片,最大为256(用8个二进制位存储);
S-Sector扇区数表示每条磁道上有几个扇区,最大为63(用6个二进制位存储).
1、引导扇区
Boot Sector组成
Boot Sector也就是硬盘的第一个扇区,它由MBR(Master Boot Record), DPT(Disk Partition Table)和Boot Record ID三部分组成.
MBR又称为主引导记录,占用Boot Sector的前446个字节(0~0x1BD),存放系统主引导程序(它负责从活动分区中装载并且运行系统引导程序).
DPT即主分区表占用64个字节(0x1BE~0x1FD),记录磁盘的基本分区信息.主分区表分为四个分区项,每项16个字节,分别记录每个主分区的信 息(因此最多可以有四个主分区).
Boot Record ID即引导区标记占用两个字节(0x1FE~0x1FF),对于合法引导区,它等于0xaa55,这是判别引导区是否合法的标志).
Boot Secor具体结构如图:
由于主分区表只有四个分区信息块,所以不管是Windows还是Linux,
一块硬盘上的主分区数目最多4个,如果要支持5个和以上的分区怎么办?
这种情况下引入1个扩展分区,使用这个扩展分区占用1个主分区表的项目,
这样最多是3个主分区加1个扩展分区。
这个扩展分区只是一个管理结构,它管理后面实际的众多逻辑分区。
一个磁盘的扩展分区只能有一个,并且只能是连续的磁盘空间。
它只是用于逻辑分区管理,扩展分区本身不能被系统加载。
能够加载的只有主分区和逻辑分区,文件和目录等也只能存储在主分区和逻辑分区内。
一个磁盘上所有的逻辑分区构成一个扩展分区。
Windows默认分区结构:
相应的Linux分区编号为:
以扩展分区方式管理多个逻辑分区,这在Windows和Linux下都一样。
Windows XP默认将C盘作为主分区,其他全部空间作为扩展分区,
在扩展分区里面建立各个逻辑分区,就是D:,E:,。。。。
这种方式比较无恼,也推荐这种方式来管理磁盘分区。
2、分区类型和分区规定
硬盘分区一共有三种:主分区,扩展分区和逻辑分区。
在一块硬盘上最多只能有四个主分区。您可以另外建立一个扩展分区来代替四个主分区的其中一个,然后在扩展分区下您可以建立更多的逻辑分区。
扩展分区只不过是逻辑分区的“容器”。实际上只有主分区和逻辑分区进行数据存储。
(1)Dos/Windows下的分区名称
在windows下操作系统使用的分区将用盘符来表示。A:和B:为软驱保留,其他应盘上的主分区和逻辑分区将从C:开始依次排列。(扩展分区没有任何盘符,而且是看不到的。在Windows下同样也看不到Linux分区)
如 果一台机器有很多的硬盘,光驱,软驱等,磁盘分区的命名将产生混乱。在这种情况下,第一块硬盘上的主分区和逻辑分区将首先得到命名盘符;然后是第二块,第 三块等等。比如您有三块硬盘,每一快硬盘上同时又有一个主分区和两个逻辑分区,那么第一块硬盘的命名将是C:,F:,G:,第二块为D:,H:,I:,第 三块为E:,J:,K:。
陌生文件系统的分区将不会被命名,在大多数程序里面(比如资源管理器)是看不到的。
右击我的电脑---->管理--->磁盘管理,可以看到陌生分区,但是Windows不能读取Linux分区。可以用 Ext2Read 软件来读取 ext2/ext3/ext4分区内容。
Ext2Read 2.2.71 绿色版:http://www.linuxidc.com/Linux/2010-10/29013.htm
(2)Linux 分区的规定
1) 设备管理 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 或SATA 设备也不例外。
Linux 把各种 IDE 设备分配了一个由 hd 前缀组成的文件;而对于各种 SCSI 或SATA 设备,则分配了一个由 sd 前缀组成的文件。
例如,第一个 IDE 设备,Linux 就定义为 hda;第二个 IDE 设备就定义为 hdb;下面以此类推。而 SCSI 或SATA设备就应该是 sda、sdb、sdc 等。
2) linux分区数量
要进行分区就必须针对每一个硬件设备进行操作,这就有可能是一块IDE硬盘或是一块SCSI或SATA硬盘。
对于每一个硬盘(IDE 或 SCSI或SATA)设备,Linux 分配了一个 1 到 16 的序列号码,这就代表了这块硬盘上面的分区号码。
例如,第一个 IDE 硬盘的第一个分区,在 Linux 下面映射的就是 hda1,第二个分区就称作是 hda2。对于 SCSI 或SATA硬盘则是 sda1、sdb1 等。
3)linux各分区的作用
在 Linux 中规定,每一个硬盘设备最多能有 4 个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是 4 个。
对于早期的 DOS 和 Windows(Windows 2000 以前的版本),系统只承认一个主分区,可以通过在扩展分区上增加逻辑盘符(逻辑分区)的方法,进一步地细化分区。
主分区的作用就是计算机用来进行启动 操作系统 的,因此每一个 操作系统 的启动,或者称作是引导程序,都应该存放在主分区上。
这就是主分区和扩展分区及逻辑分区的最大区别。
我们在指定安装引导 Linux 的 bootloader 的时候,都要指定在主分区上,就是最好的例证。
Linux 规定了主分区(或者扩展分区)占用 1 至 16 号码中的前 4 个号码。
以第一个 IDE 硬盘为例说明,主分区(或者扩展分区)占用了 hda1、hda2、hda3、hda4,而逻辑分区占用了 hda5 到 hda16 等 12 个号码。
因此,Linux 下面每一个硬盘总共最多有 16 个分区,其中扩展分区用于管理,不能加载,所以可加载的主分区、逻辑分区数是15个。
(老贴不详细,补充:在未使用 IDE 驱动器热插拔支持的系统上,IDE 驱动器最多支持 63 个分区。通过热插拔支持的 SCSI / SATA驱动器、USB 驱动器和 IDE 驱动器最多可有 15 个分区。剩下的1个是扩展分区编号。)
对于逻辑分区,Linux 规定它们必须建立在扩展分区上(在 DOS 和 Windows 系统上也是如此规定),而不是主分区上。
因此,我们可以看到扩展分区能够提供更加灵活的分区模式,但不能用来作为 操作系统 的引导。 除去上面这些各种分区的差别,我们就可以简单地把它们一视同仁了。
三、关于硬盘分区划分标准及合理分区结构
1、硬盘分区划分标准
硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个标准;主分区(包括扩展分区)的最大个数是四个,主分区(包含扩展分区) 的个数硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(GRUB,LILO,NTLOARDER等)和分区表记录。其中扩展分区也算一个主分区;扩展分区下 可以包含更多的逻辑分区;所以主分区(包括扩展分区)范围是从1-4,逻辑分区是从5开始的;比如下面的例子(IDE硬盘):
通过这个例子,我们可以看到主分区有3个(包含扩展分区占位hda3),从 hda1-hda3 ,扩展分区管理的逻辑分区编号由 hda5-hda10 ;此硬盘没有主分区4,所以也没有显示主分区hda4 ;
但逻辑分区不可能从4开始,因为那是主分区的位置,明白了吧。
2、硬盘设备(包括移动存储设备)在Linux或者其它类Unix系统的表示
IDE 硬盘在Linux或者其它类Unix系统的一般表示为 hd* ,比如hda、hdb ... ... ,我们可以通过 fdisk -l 来查看;有时您可能只有一个硬盘,在操作系统中看到的却是 hdb ,这与硬盘的跳线有关;另外hdc 大多表示是光驱设备;如果您有两块硬盘,大多是 hda和hdb。在这方面说的太多也无用,还是以fdisk -l 为准为好; SCSI 和SATA 硬盘在Linux通常也是表示为 sd* ,比如 sda 、sdb ... ... 以fdisk -l 为准 移动存储设备在linux表示为 sd* ,比如 sda 、sdb ... ... 以fdisk -l 为准
3、合理的规划分区
关于一个磁盘的分区,一个磁盘应该有四个主分区,其中扩展也算一个主分区;存在以下情况:
(1)分区结构之一:
四个主分区,没有扩展分区;(不实用,不能扩展)
这种情况,如果您想在一个磁盘上划分五个以上分区,这样是行不通的; 如果已经分了四个主分区,
不使用扩展分区,那么如果该磁盘上还有自由空间,那么就会无法使用,如上图所示。
一般情况下,只应该使用下面(2)中的分区方式,如下面描述。
(2)最合理的的分区方式
最合理的分区结构:
主分区在前,扩展分区在后,然后在扩展分区中划分逻辑分区;
主分区的个数 + 扩展分区(1个)要控制在4个之内;
比如下面的分区是比较好的:
A.
扩展分区里面可以分很多个逻辑分区,上面画3个只是示意,一块磁盘的逻辑分区上限12个够用了。
除了3个主分区占据的空间,剩下的所有连续空间全部划归扩展分区。
上面的sda1,sda2,sda3,sda5,sda6,sda7 … 泛指各种格式分区的编号,
如EXT3、EXT4、SWAP、FAT32、NTFS,像sda1等只是Linux对分区的编号而已。
sda1可以是Windows的系统分区,也可以是Linux的系统分区,
sda5可以是EXT分区也可以是NTFS分区。
B.
扩展分区里面可以分很多个逻辑分区,上面画3个只是示意,一块磁盘的逻辑分区上限12个够用了。
除了2个主分区占据的空间,剩下的所有连续空间全部划归扩展分区。
上面的sda1,sda2,sda5,sda6,sda7 … 泛指各种格式分区的编号,
如EXT3、EXT4、SWAP、FAT32、NTFS,像sda1等只是Linux对分区的编号而已。
sda1可以是Windows的系统分区,也可以是Linux的系统分区,
sda5可以是EXT分区也可以是NTFS分区。
C.
扩展分区里面可以分很多个逻辑分区,上面画3个只是示意,一块磁盘的逻辑分区上限12个够用了。
除了1个主分区占据的空间,剩下的所有连续空间全部划归扩展分区。
上面的sda1,sda5,sda6,sda7 … 泛指各种格式分区的编号,
如EXT3、EXT4、SWAP、FAT32、NTFS,像sda1等只是Linux对分区的编号而已。
sda1可以是Windows的系统分区,也可以是Linux的系统分区,
sda5可以是EXT分区也可以是NTFS分区。
(3)最不合理的分区结构:
主分区包围扩展分区,比如下面的:
这样[主分区2]和[主分区4]之间的[扩展分区]是有自由度,但[主分区4]后的[空白未分区空间]怎么办?除非把主分区4完全利用扩展分区后的空间,否则您想在主分区4后再划一个分区是不可能的,划分逻辑分区更不可能;虽然类似此种办法也符合一个磁盘四个主分区的标准,但这样主分区包围扩展分区的分区方法实在不可取。
扩展分区管理的是连续的磁盘空间,在主分区4之后的自由空间是无法使用的,不能格式化为主分区,也不能归入扩展分区,这就是有些人划分过多主分区的后果——有自由空间而不能用。
我们根据这个标题,查看一下我们的例子,是不是符合这个标准呢?
4、典型的Linux和Windows分区例子
(1)单Windows系统分区例子
C、D、E、F一般都是NTFS格式的分区。
Windows系统分区C盘一般20GB以上空间。其他盘空间大小随意。
(2)单Linux系统分区例子
一般主分区sda1空间20GB以上,用于安装系统文件。
主分区一个就够了,其他空间可以全划分为扩展分区。
在扩展分区内部创建逻辑分区。
交换分区(相当于Windows系统的虚拟内存)一般为 1 至 2 倍内存大小,这个必须要有。
现在机器的内存较大,如4GB等,这时内存就够用了,
Linux很少用到交换分区,交换分区设置为和内存一样大就行了。
剩下的可以都格式化为一个EXT4分区,作为用户分区:/home 。
一般用户的音频、视频、文档等文件都存储在:/home/用户名/
这是普通用户使用Linux的典型分区,而服务器的按照其服务类型灵活分区,
一般用户用不到,这里不赘述了。
(3)在Windows系统基础上装Linux实现双系统
如果已经安装了Windows,典型分区如下:
在这基础上来装Linux,比如将F盘里面的东西全部复制后,清空F盘,准备安装Linux。
Linux可以直接装到扩展分区里面的逻辑分区,所以不用另外准备单独的主分区,C、D、E盘都不用动。
那么先将F盘逻辑分区删除掉,让它变成未使用的自由空间:
上图就是在Windows眼里的磁盘分区状况。
然后来安装Linux,一般安装Linux时,Linux会将以上分区按照自己的理解并命名为:
(这些命名将来会存储在Linux自己分区,而不会改变原来的Windows分区,Windows分区默认不动。)
Linux检测到一大块自由空间,它自己会根据自由空间和内存大小,自动生成推荐的分区,
如果自由磁盘空间大小是40GB,那么推荐的分区设置比如:
或者使用Linux自带的磁盘分区工具将自由空间划分成上面3个分区。
一个EXT4分区(上图中18GB,如果20GB以上更好)作为Linux系统分区 / ;
一个SWAP分区(上图中2GB)作为交换方分区,和内存大小一样就行了;
剩下的划为一个EXT4分区(上图中20GB)作为用户目录 /home 。
一般Linux会自动检测Windows分区并自动加载,上面是openSUSE典型的加载Windows分区的状况。
以上分区方式和Linux安装分区设置对Windows系统分区是没有影响的。不会改变Windows分区。
双系统都可以正常使用。
5、Linux与Windows内存占用的区别
Linux与Windows不同,Windows不管内存够不够用,全部写磁盘,
无论运行多么小的程序,都会使用虚拟内存,所以很费硬盘。
Linux优先使用内存,运行程序时如果内存没用完,那么只使用内存,而不使用交换分区(虚拟内存),
有些Linux跑起来看着很占用内存,但是它一丁点虚拟内存都没用,基本不写入磁盘,
所以使用Linux是对硬盘的极佳保护。
对于Windows而言,如果它的内存快用完了,就代表它快不行了,因为好几GB的磁盘空间正作为
虚拟内存在不停地写来写去,很容易折耗硬盘。
而对Linux而言,内存快用完了,代表它的内存利用率已经到达最大化,这才刚热身而已,
内存利用完了,才会使用交换分区来缓存运行中的程序的内容。
所以不要拿Linux占用多少内存 与 Windows占用多少内存相提并论。比如系统总共有2GB内存,
Windows占用1GB内存,意味着它还在不停地写入虚拟内存,加上磁盘上虚拟内存的,
其真实使用量很可能是2GB以上 。
而linux占用1GB内存,那就是1GB,一分不多,一分不少。在内存没用完的情况下,
Linux压根不用虚拟内存(交换分区),所以一般用户长年看到Linux的交换分区使用率为零。
如下图:
所以使用Linux,完全不用看它用了多大内存。
内存就用来占用的,留着不用又不能当饭吃,不用白不用。
而windows的逻辑是,内存无限大它也要使用虚拟内存存储程序内容,
硬盘使劲写,写坏了是用户买硬盘,反正不用微软付钱,它无所谓。
希望以后别再出现抱怨Windows开机占用500MB内存而Linux开机占用800MB的事情了,
越这样抱怨,越说明自己无知而已。
来源:LinuxIDC.com