硬盘基础知识
从物理的角度来看,一块硬盘是由坚硬金属材料制成的并涂以磁性介质的盘片,用来读取盘片上的信息的磁头,还有帮助磁头进行寻址的臂和控制电子线路组成。一块磁盘可以有一个或多个盘片,盘片的两面都可以存储信息。盘片以高速旋转(一般的SCSI硬盘转速达到15000转每秒),使的磁头和盘片间存在一定的空气间隙,从而使磁头和盘片之间没有物理摩擦。由于磁盘的读写过程中包含了磁头的物理移动,所以其速度相对于内存的读写来说慢很多。现代操作系统都通过内存缓冲的方式尽量减少对磁盘的访问,从而提高系统的性能。同时,现代的磁盘也通过排队,并行等方法来优化对磁盘的访问,从而提供系统性能。
从逻辑的角度来讲,磁盘是用来存储数据的介质,它可以从逻辑上被划分为不同的扇区(sector),磁道(track)和柱面(cylinder)。扇区是磁盘读写的最小单位,通常一个扇区(sector)包含256个字节的存储空间,由于磁盘是块设备系统每次从磁盘上至少读取一个扇区的大小;处于同一个半径,同一个盘片面上的所有扇区组成了一个磁道(track);所有盘片上相同半径处的磁道组成了一个柱面(cylinder)。
在使用PC时,我们已经习惯了分区的概念。在PC上,磁盘被分成不通的分区,包括主分区和逻辑分区。不同的操作系统可以安装的不同的主分区上,并通过存储在磁盘第一个扇区(MBR)的引导程序来boot不同的操作系统。由于UNIX是用在服务器中的,而服务器一般来说都有专用的功能,所以一台服务器只安装一个操作系统,执行指定的任务并长期保持开着的状态。所以在UNIX系统中没有对应的分区的概念,一般都是将操作系统安装在整块磁盘中(FreeBSD,OpenSolaris等等UNIX操作系统都开始使用在桌面系统中,通常会把PC上一个分区看作一块硬盘来处理)。不过UNIX也将一个磁盘分为不同的slice,不同的slice用来存储不同的数据。比如mount在/var上的slice用来保存系统的动态日志数据;mount在/export/home目录上的slice用来保存用户的数据。
磁盘通过不同的接口连接到系统上,常用的接口包括IDE,SCSI,SATA,SAS等。IDE是传统的PC上使用的一种磁盘接口,一个IDE的控制器可以有两个IDE的通道,同一个IDE通道可以连接2个IDE设备;SCSI被广泛使用在服务器中,具有比较高的性能和热插拔特性,当然随之而来的是比较昂贵的价格。IDE和SCSI都是采用并行的方式来传输数据,并行线之间的串扰,使得频率提升的空间越来越小。这个时候,SATA和SAS应运而生,他们分别是IDE和SCSI的继承者,并使用串行的方式传输数据。
OpenSolaris下的磁盘设备文件
OpenSolaris下磁盘设备文件的表示比其他操作系统要显得复杂些。比如,在Linux下面/dev/hda,/dev/hdb代表了系统中的第1,2个IDE硬盘;而/dev/sda,/dev/sdb则代表了系统中的第1,2个SCSI(或SAS或SATA或USB)设备;/dev/hdan,/dev/sdan则代表了其中的第n个分区(Linux中主分区最多为4个,逻辑分区是从你n=5开始的)。
和Linux下简单的表示方式不同的是,在OpenSolaris下表示一个slice是通过c#t#d#s#的方法表示的。其中,
c – 控制器(controller),其后的数字表示了系统中的第几个控制器。
t-目标(target),其后的数字表示了该控制器上的第几个通道。
d-设备(device),其后的数字表示了该通道上的第几个设备。
s-分区(slice),其后的数字表示了该设备上的第几个分区。
如,/dev/dsk/c0t0d0s0就代表了系统中第一个SCSI控制器的ID0上的第一个设备的第一个分区。
在OpenSolaris系统中,所有的设备都3种不同形式的名字,不同的场合下使用不同的名字:
逻辑设备名
物理设备名
实例名
物理设备名存放在/devices目录下,它根据系统中物理设备的连接方式,形成一个物理设备的目录树。该设备树在系统启动的时候枚举产生。典型的devices目录包含下面的文件和目录:
bash-3.00# ls /devices
agpgart iscsi:devctl pci@0,0:intr scsi_vhci
agpgart:agpgart options pci@0,0:reg scsi_vhci:devctl
isa pci@0,0 pseudo xsvc@0,0
iscsi pci@0,0:devctl pseudo:devctl xsvc@0,0:xsvc
逻辑设备名存放在/dev目录下,他们是到/devices下物理设备名的软连接。逻辑设备名一般使用在命令行中对设备的引用。系统中每个磁盘设备都同时存在于/dev/dsk和/dev/rdsk目录下,分别代表了block和raw模式的设备。它们的内容是一致的:
bash-3.00# ls /dev/dsk