一. linux的装置和档案名对应关系如下:
IDE硬盘: /dev/hd[a-d]
SATA/SCSI/USB硬盘: /dev/sd[a-p]
usb闪存: /dev/sd[a-p]
软盘: /dev/fd[0-1]
25针打印机: /dev/lp[0-2]
usb打印机: /dev/usb/lp[0-15]
ps2鼠标: /dev/psaux
usb鼠标: /dev/usb/mouse[0-15]
当前鼠标: /dev/mouse
当前cdrom/dvdrom /dev/cdrom
磁带机: (IDE) /dev/ht0
磁带机: (SCSI) /dev/st0
二. 分区的相关概念。
一般来讲一个扁平电缆有可以接2个IDE接口,而一个电脑通常配备2个扁平电缆,也就是有4个IDE接口(也即可以安装4块硬盘)。
所以通常来讲为hd1,hd2,hd3,hd4。
同一根的扁平电缆的2个IDE接口分为master和slave,故此一般的对应关系如下。
IDE/jumper | master | slave |
IDE1(primary) | /dev/hda | /dev/hdb |
IDE2(secondary) | /dev/hdc | /dev/hdd |
对于一个磁盘来讲,最小单位为磁区(扇区),512bytes。磁盘可以看做事由一个个的磁柱(cylinder)组成。
整个磁盘的第一扇区特别重要,因为他记录了整个磁盘的主要信息。第一扇区主要包含2个部分:
1. MBR(master boot record) 主要启动记录区(可以安装开机管理程序的地方,446bytes)。
2. 分区表(partition table,64bytes)。记录硬盘分割的情况。
由于分区表只有64bytes,所以他只能记录4个分区的记录。每个分区记录包含开始磁柱和结束磁柱的号码。
假如只有一块硬盘,他的档案在/dev/hda,那么他的4个分区分别为/dev/hda1 /dev/hda2 /dev/hda3 /dev/hda4 ,再假设此磁盘共有400个磁柱。且对应关系如下:那么向hda4这个分割槽写入数据,也就是把数据写入到301-400这些磁柱内。
hda1(p1) | 1-100 |
hda2(p2) | 101-200 |
hda3(p3) | 201-300 |
hda4(p4) | 301-400 |
因此从理论上来讲,整个磁盘最多只能分成4个主分区(primary partition)或者扩展分区(extended partition),同时扩展分区(extended partition)最多只能有一个。
所谓“分区”只是针对64bytes的分区表进行设定。而且分区表中的分区只能是主要的(primary)或者扩展的(extended)分区。
分割槽的最小单位为磁柱。
当系统要写磁盘时,一定要参照分区表才能对某个分割槽进行数据的处理。
通过以上的信息我们发现,一个硬盘只能最多分成4个主要的或者扩展的分割槽,那么是不是硬盘的分割就最多只能分成4个呢?当然不是。
无论对于IDE还是SATA来讲,都可以分成10个以上的分割槽。这是用logical partition(逻辑分割)通过额外的扇区记录分割信息来实现的。如下图所示:
p1(primary:1-100) | |||||
p2(extended:101-400) | p5(100-150) | p6(151-200) | p7(201-250) | p8(251-300) | p9(301-400) |
p3(无) | |||||
p4(无) |
可以将hda1作为主要分割区,将hda2作为扩展分割区。在p2的基础上进行logical partition,共分成5个逻辑分区。
则p1,p2,p5,p6,p7,p8,p9在linux中对应的装置名称为:/dev/hda1,/dev/hda2,/dev/hda5,/dev/hda6,/dev/hda7,/dev/hda8,/dev/hda9。
请注意,没有/dev/hda3和/dev/hda4,因为前四个号码都是保留给primary和extended用的,这个一定要记得。
同时,能被格式化以后作为数据存取分割槽的只有primary partition和logical partition,延伸分割(extended partition)是不行的。
逻辑分割的数量依据操作系统的不同而有所区别。在linux中,IDE最多可以有59个逻辑分割(从5号到63号),SATA最多可以有11个逻辑分割(5-15号),故此依据硬盘限制和操作系统的限制:在linux中如果是IDE硬盘,那么最多可以有63个分区(3个主要分区,1个扩展分区,59个逻辑分区);如果是SATA硬盘,那么最多可以有15个分区(3个主要分区,1个扩展分区,11个逻辑分区)。
三. 开机流程
介绍开机流程之前我们要先知道两个概念。CMOS(Complementary Metal Oxide Semiconductor:互补金属氧化物半导体)和BIOS(Basic input output System:基本输入输出系统)。其中CMOS是一个镶嵌在主板上的存储器,他记录了各硬件的信息。而BIOS是一个写入在主板上的韧体(韧体即写入在主板上的软件程序)。开机的流程如下:
1. 开机以后首先启动的是主板上的韧体程序BIOS,BIOS会主动的读取CMOS中的各硬件信息。找到第一个可开机的装置(设备)。(由于BIOS和CMOS都是整合到主板上的,是硬件相关的,所以这步应该不难理解)
2. 第一个可开机的装置找到自己第一扇区的主要启动记录区(MBR),这个记录区有一个软件,即开机管理程序(boot loader)。由于MBR只有446Bytes,所以开机管理程序是非常的短小精悍的。(备注:开机管理程序是安装系统的时候写入到MBR的)
3. 开机管理程序(boot loader)开始读取核心档案来执行。
4. 核心档案:开始操作系统的功能。
通过以上我们可以知道,BIOS和MBR都是计算机硬件支持的功能,而开机管理程序(boot loader)则是操作系统安装时写入到MBR的一个程序。
boot loader 具有以下的功能:
1. 提供选单供客户选择。(比如安装多重引导系统时,boot loader 会列出所有的系统选单供你选择。)
2. 载入核心档案。直接指向开可开机的程序区段来启动操作系统。
3. 转交其他loader。将开机管理的功能托管给其他的loader来执行。
如何转交其他的boot loader呢?一个硬盘不是只有一个MBR吗?
对,一个硬盘是只有一个MBR,但是呢,每个分割槽都有自己的boot sector(启动扇区)。开机管理程序可以写入MBR,也可以写入分割槽的boot sector。
如果你安装了xp(c盘)和redhat(d盘)双系统,那么在开机的时候boot loader 会显示如下:
Windows xp Professional Sp3 |
Redhat Linux 9.0 |
如果你选择了第一个,那么boot loader会加载windows的核心档案,启动windows系统。
如果你选择了第二个,那么boot loader会把开机管理托管给c盘中的Redhat 9.0这个loader,而这个loader直接指向d盘boot sector中的linux的开机管理程序。然后LINUX的boot loader加载linux的核心档案,启动linux系统。
此时无论windows还是linux的核心档案都是放置在自己的分割槽内的。而且每一个分割槽的boot loader都只识别自己的核心档案和其他的loader。(即c盘中的boot loader并不认识d盘中linux的核心档案,他只认识c盘中的另一个loader而已,而c盘中的另一个loader直接指向d盘得boot sector。
知道了以上这些,你就能理解为什么安装windows和linux双系统的时候要先安装windows然后再安装linux系统,为什么呢?
因为windows安装的时候是会直接覆盖MBR和所在分割槽的Boot sector的,你没有机会去选择。而安装linux的时候linux可以让你选择将开机管理程序boot loader安装到MBR还是个别分割槽的启动扇区(如上例是安装在D盘得boot sector了)。而且linux的boot loader可以手动设定选单。这样你就可以把windows的loader也手动添加到linux boot loader 的选单上了。如果后安装windows,那么windows会直接覆盖MBR和c盘得boot sector,这样linux系统的引导区就被覆盖掉了。
四. linux的目录树结构。
上边讲过了,在linux中,一起都是以档案的形式存在的,而这些档案就是以目录树结构存在的(directory tree)。整个目录树最重要的就是根目录(root directory),以【/】来表示。其他所有的档案都是以“/”目录延伸出来的。
如何结合目录树结构和磁盘内的数据呢?这就用到了mount(挂载)的问题。
所谓的挂载即找到一个目录,把磁盘分割槽的数据放到这个目录下,也即进入该目录就可以操作此分割槽内数据的意思,而选择的目录被我们称为挂载点。“/”目录是一定要挂载到某个分割槽的,至于其他的目录,可以依据需求来挂载。如果其他的任何目录都没有挂载,那么根目录以下所有的目录都默认挂载在和根目录一样的分割槽。