Monday, April 30, 2007

硬盘,磁盘,存储。分区,主分区,拓展分区与逻辑分区。乱谈。

今天在看LPI教程时再次接触到了磁盘分区的概念,回想起自己以前也为这个ambiguous的东西伤透了脑筋,今天是时候自己写写总结了 :)
-------------------------------------------------------------------------------------

1.存储器的分类
哇靠……怎么从这里开始讲起了……不过我实在想输理、萃取以下以前组成原理所学过的东西……
当然,从本质上来分,就是RAM和ROM,或另一个基本相同的角度来说就是易失性与非易失性。RAM一般用于PC机上的内存,从以前的SRAM,DRAM,到SDRAM,再到今天的DDR-RAM,以及DDR2-RAM,已经有了质的飞跃。但是它还是非易失性的,只要关机了,数据就会丢失,这与物理特性相关。
  • OS的待机与睡眠:待机时切断硬盘,显示器等电源,但内存仍然供电,因此可以快速恢复;而睡眠则把所有当前信息(或说context)保存在硬盘里,然后关机。当再次开机时,OS检测到上一次关闭时处于睡眠状态从而把context从硬盘中读取出来,快速恢复上一次休眠时的状态。
而新近几年流行起来的“U盘”则属于一种非易失性的RAM,也称Flash-memory。
所谓的BIOS,即Basic Input Output System,则是用ROM做成的,一般固定于主板(Main board,Mother board)上,存储着用于引导计算机启动,完成一些routine的代码,程序,例程。BIOS这样东西可谓让人又爱又恨,爱在它对于计算机启动的不可缺少,恨在它功能的局限(我觉得这可能是由于IBM PC的架构所致……当时以为够用,谁能预料到PC这东西能发展如此迅速呢?)比如说里面限定了CHS(Cylinder,Head,Sector)大小等。总之,它与整套IBM PC的架构密不可分,磁盘驱动器,总线,CPU等都必须遵循某套必须符合BIOS的规范才能正常工作。(比如说磁盘驱动器的MBR)

而磁盘驱动器则是属于另外一种东西了……它使用磁介质——此处不表。

2.磁盘的MBR(Master Boot Record)
由于种种历史原因,磁盘的MBR位于CHS=001。这里存储了一些关于整块磁盘的元信息(meta data),最重要的,莫过于从018A
-01B7的4个9字节的主分区表入口,从01BE-01FD有4个16字节的主分区表了!这也是为什么人们总说:一块硬盘只能有四个主分区的原因。
这是由PC机硬盘的这种通用分区结构所决定的,这种通用分区结构不管你的电脑中使用的是哪种操作系统:MSDOS、PCDOS、DRDOS、Windows95/98/ME、Windows NT/2000/XP、Linux、Unix、Novell等等,都不能改变这种分区结构。
除非,你的PC不是IBM PC,或说你的PC不是x86/x86-64架构的。

但是,只有四个主分区,显然是不够的。因此,后来又有了拓展分区的概念。
自从1985年12月微软公司发布MS-DOS3.20版以后,上述PC硬盘的分区结构增加了扩展分区的功能,可以将上述4个主分区的其中一个主分区定义为“扩展分区”,在该扩展分区中,又可以建立许多个逻辑分区,因此,扩展分区中就必须有扩展分区表。
要注意的是,拓展分区只是一个抽象的概念,即,实际上不存拓展分区这样东西。而只是组成拓展分区的所有逻辑分区,称为这个磁盘的拓展分区。事实上,拓展分区看作一个整体就是一个主分区。因此硬盘上常见的分区方法是,一个-三个主分区,剩下空间全部用来作为逻辑分区。
如下图所示:

  • 操作系统必须装在主分区?听说Windows与FreeBSD是的……不过Linux绝对不是,因为我一直装在逻辑分区 :)
有三种分区类型:主分区、逻辑分区 和 扩展分区。分区表 在硬盘的主引导记录(master boot record,MBR)上。MBR 是硬盘上的第一个扇区,所以分区表不能在其中占据太大空间。这将一个硬盘上的主分区数限制为 4 个。如果需要超过 4 个分区(这种情况很常见),那么主分区之一必须变成扩展分区。一个硬盘只能包含一个扩展分区。 扩展分区 只是逻辑分区的容器。MS DOS 和 PC DOS 原来使用这种分区方案,这种方案允许 DOS、Windows 或 Linux 系统使用 PC 硬盘。
Linux 将主分区或扩展分区编号为 1 到 4,dev hda 可以有四个主分区,即 /dev/hda1、/dev/hda2、/dev/hda3 和 /dev/hda4。也可以有一个主分区 /dev/hda1 和一个扩展分区 /dev/hda2。如果定义逻辑分区,它们的编号从 5 开始,所以 /dev/hda 上的第一个逻辑分区是 /dev/hda5,即使硬盘上没有主分区,只有一个扩展分区(/dev/hda1)。
在我的机器上执行fdisk -l的结果
[root@localhost ~]# fdisk -l

Disk /dev/hda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 892 7164958+ 12 Compaq diagnostics
/dev/hda2 * 893 4156 26218080 c W95 FAT32 (LBA)
/dev/hda3 4157 9371 41889456 c W95 FAT32 (LBA)
/dev/hda4 9372 14593 41945715 f W95 Ext'd (LBA)
/dev/hda5 9372 11982 20972826 b W95 FAT32
/dev/hda6 11983 11995 104391 83 Linux
/dev/hda7 11996 12256 2096451 82 Linux swap / Solaris
/dev/hda8 12257 14593 18771921 83 Linux

可以看到,我的硬盘大小为120GB,共有120034123776个字节,255个“磁头”(head,其实指一个碟片的一个面),63个扇区,14593个柱面,每个扇区大小为标准的512字节。

hda1(主分区1)被我的笔记本制造商用来做成诊断盘了……不表。hda2(主分区2)则是用于启动的分区(?),使用了LBA,可以看到hda3,hda4都是主分区。而hda4是一个拓展分区(可以计算得到,hda5-hda8的大小正好是:20972826+104391+2096451+18771921=41945589,为什么不一致?41945715-41945589=126,我猜想是用一些空间来保存拓展分区表信息的)

小历史:
IBM PC发展至今,数据交换经历过一段历史。基本上数据总线由现在已经淘汰的ISA,到广泛使用的PCI(貌似也开始没落了),到AGP,再到PCI-E。而磁盘所使用的数据总线叫IBM-AT(Advanced Technology)。后来改名为ATA(AT Attachment),当串行总线出现后(S-ATA)又叫做(P-ATA,P stands for Parallel)。使用PATA的硬盘也叫做IDE硬盘(由于Western Digital公司某个规范所遗留的名称,Integrated Drive Electronics,我想这也是为什么SATA在机器上被认作SCSI硬盘的原因吧……)

关于主盘与从盘(Master / Slave)
相信很多人像我以前一样对主从盘有着错误的理解。其实主、从盘都不是主人……都是奴隶(slave)阿……
像上面提到的ATA cable,可以看到除了两端有一个40针的接口外,中间比较偏向某端的也有一个40针的接口。原来,这就是从盘的接口。
  • 误解一:以为两条ATA cable接的两个硬盘有一个是主盘,有一个是从盘。其实,在同一条IDE线上连的两个硬盘才分主/从盘。这也是一个术语“跳线”所指的东西,如果两个硬盘接在两条cable上,根本不用跳线。跳线只是为了指定哪个是主盘,哪个是从盘。
  • 误解二:主盘比从盘好。其实不然,这只不过是一个index的问题。两个连在一条ATA cable上的磁盘都受到同一个主板接口的限制,或说,都受到磁盘控制器的限制。它们其实并无主次之分。因此,无论是访问速度还是访问优先级,都是平等的。
  • 误解三:两个盘会有共享介质冲突。由于已经使用了某些并行访问技术,使得可以错开始终周期进行磁盘读写,因此,一条cable上的两个盘完全独立!因此两个速度不同的磁盘不会出现所谓的瓶颈效应,也不会出现“同一时间只能读一个硬盘”的限制。
3.CHS,LBA,Large
N年前,还是由于历史原因,BIOS对CHS有限制,即限制了最大的C,H,S。(具体没必要知道),因此造成了BIOS可以访问到的最大磁盘容量是137GB(好象是)。但是君不见现在的磁盘动辄上百G……因此有必要对这套scheme进行改进。这就引入了所谓的LBA(Logical Block Adressing).LBA把磁盘的地址重新编号,比如CHS=001,002编号为1,2,而OS等访问则可以不需知道CHS地址,而是知道LBA地址后通过磁盘控制器这个中间层进行访问。这样则可以使用逻辑地址访问,而不需直接使用物理地址了。下面摘抄一段:
LBA(Logical Block Addressing)逻辑块寻址模式。管理的硬盘空间可达 8.4GB。在 LBA 模式下,设置的柱面、磁头、扇区等参数并不是实际硬盘的物理参数。在访问硬盘时,由 IDE 控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的物理地址。在 LBA 模式下,可设置的最大磁头数为 255,其余参数与普通模式相同,由此可以计算出可访问的硬盘容量为:512x63x255x1025=8.4GB。不过现在新主板的 BIOS 对 INT13 进行了扩展,使得 LBA 能支持 100GB 以上的硬盘。
LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。
在这三种硬盘模式中,现在 LBA 模式使用最多。
4.IRQ
在BIOS设置里,经常可以见到一些关于PCI设备的IRQ设置。不过我从99年接触PC以来好像还没有见过不是设置为Auto的。事实上,IRQ=Interrupt ReQuest。指的就是中断请求。 最初,每个设备都有自己的私有IRQ。比如说,IRQ5 通常用于声卡 或者 第二个 并行端口(打印机)。如果两个都要使用,那么不得不去寻找一个能够配置的卡(通常是通过硬件跳线设置)来使用另一个 IRQ,比如 IRQ15。(以上IRQ值基于标准IRQ建议)。而现在(我认为是所有的)PCI设备都是共享IRQ的了。即用了所谓的PnP(Plug and Play)技术(还记得以前开机没有splash screen时的右上角的Energy Star和Plug & Play徽标吗 ?),所以,当某个设备中断 CPU 时,会有一个中断处理程序检查它并判断那个中断是否为它所用的中断, 如果不是,则将它传递给链中的下一个处理程序。


5.IO端口
既然说到了IRQ,就要说说IO port了。
当 CPU 需要与某个外围设备通信时,它要通过一个 IO 端口来进行通信(事实上,这个IO端口具体在什么地方,是指什么呢……我现在还不知道 :)不过我猜可能是指系统数据总线的某个地址吧?)。当 CPU 需要向外围设备 发送数据或者控制信息时,它向某个端口写入数据。当设备为 CPU 准备好了数据或者状态,CPU 从某个端口去读取数据或状态。 大部分设备都拥有不止一个与之相关联的端口,通常是 2 的若干次幂(指数较小),比如 8、16 或者 32。数据传输通常是每次一个或 两个字节。设备不能共享端口,所以,如果有 ISA 卡,那么必须确保每个设备都有其分配到了自己的端口。以前,这需要通过设备卡 上的开关或者跳线来实现。现在完全没接触过ISA卡……我只知道,
所有PCI卡都有PnP,都是自动分配端口的.
在Linux中输入cat /proc/ioports可以查看设备占用的IO端口。
6.吹一吹Linux文件系统与Windows文件系统
网上关于这方面的文章已经好多了,我为什么还要写?
我也不知道,不过,UNIX文件系统给我的感觉是,越学习越能体会到其中之道。

先说说Windows。其实,Windows的文件系统,包括FAT16/32,NTFS,我现在看来都可以看作是一种与UNIX文件系统类似的树状结构——但是,它不止一棵树,而是可以有24可棵。每个逻辑的"盘"分配一个"盘符"——26个英文字母里的一个。但是由于A,B是默认分配给floppy的,所以只能从C-Z中选一个(不区分大小写)。而且由于C盘必须是主分区,因此只剩下D-Z作为逻辑分区了。每个盘就是一棵树,那么Windows文件系统就可以看作是一片森林了。
对于Win32,我一般采用如下的分区策略:
  • C盘是系统盘(System)。只分配安装好系统后剩余几G的空间。除了系统以及必要的驱动程序外,什么也不安装。
  • D盘是媒体盘(Media)。用来装图片,音乐,电影等多媒体资料。
  • E盘是游戏盘(Game)。用来专门放游戏。
  • F盘是工具盘(Tool)。用来安装工具。
  • G盘是资料盘(Document)。用来放文档,电子书,以及ghost镜像。
然后是UNIX文件系统。按照上面所介绍的逻辑分区,主分区的概念给物理硬盘分区后,它们依次可以挂载到以"/"为根的树中。根据FHS(File Hierachical Standard)的定义,/ 下面有/tmp ,/usr, /root, /boot, /home 等标准目录,而每个分好的区就可以分配给这些目录。这就是所谓的挂载。不仅本地磁盘可以挂在,连网络磁盘也可以挂载;CD-ROM,USB memory等都是可以挂载到这上面去的。

Linux 文件系统包含了分配在磁盘或其他块存储设备备上的一些文件(以目录的形式)。与许多其他系统一样,Linux 系统上的目录可以包含其他目录,这称为 子目录。Microsoft® Windows® 等系统根据不同的盘符(A:,C:,等等)来分隔文件系统,但是 Linux 文件系统只是一个树型结构,它以 / 目录作为 目录。

您可能会奇怪,既然文件系统只是一个大的树型结构,那么硬盘布局为什么还重要呢。实际情况是,每个块设备(比如硬盘驱动器分区、CD-ROM 或软盘)上都有一个文件系统。通过将不同设备上的文件系统 挂装(mounting) 在树型结构中的某一个叫做挂装点(mount point) 的点上,就创建了文件系统的单一树型视图。

通 常,在挂装过程中,首先将某一硬盘分区上的文件系统挂装为 /。可以将其他硬盘分区挂装为 /boot、/tmp 或 /home。例如,可以将软盘驱动器上的文件系统挂装为 /mnt/floppy,将 CD-ROM 上的文件系统挂装为 /media/cdrom1。还可以使用连网的文件系统(比如 NFS),挂装来自其他系统的文件。还有其他文件挂装类型,但是您只要理解这个过程就行了。挂装过程实际上是挂装某一设备上的文件系统,但是常常说“挂装这个设备”,这就表示“挂装这个设备上的文件系统”。

现 在,假设您刚挂装了根文件系统(/),并想在挂装点 /media/cdrom 上挂装一个 IDE CD-ROM,/dev/hdd。在挂装这个 CD-ROM 之前,这个挂装点必须存在。在挂装 CD-ROM 时,CD-ROM 上的文件和子目录就变成了 /media/cdrom 之内和之下的文件和子目录。/media/cdrom 中原来已经存在的任何文件或子目录就不再可见了,尽管它们仍然存在于包含挂装点 /media/cdrom 的块设备上。如果卸载 CD-ROM,那么原来的文件和子目录重新可见。在打算作为挂装点使用的目录中,应该不放置任何文件,这样可以避免这个问题。

表 3 显示了 Filesystem Hierarchy Standard 要求在 / 中存在的目录(关于 FHS 的更多细节,请参阅 参考资料)。


表 3. / 中的 FHS 目录
目录描述
bin基本命令的二进制代码
boot引导装载程序的静态文件
dev设备文件
etc主机特有的系统配置
lib基本的共享库和内核模块
media可移除介质的挂装点
mnt临时挂装文件系统的挂装点
opt附加的应用程序软件
sbin基本的系统二进制代码
srv这个系统提供的服务的数据
tmp临时文件
usr次级层次结构
var可变数据


以上内容摘自:IBM dw
LPI 证书 101 考试准备: Linux 安装与包管理




No comments: