LINUX学习笔记一——磁盘设备

LINUX磁盘设备

linux与设备文件

各个组件或设备在linux下都是文件,几乎所有硬件设备都在/dev目录下。
IDE接口的硬盘的文件名即为/dev/hd[a-d]。(hd即hard disk ,a到d是区分不同硬盘的标志)
SATA/USB/SCSI硬盘以及U盘是/dev/sd[a-p]
打印机是/dev/lp0
软盘是/dev/fd0
更多设备见下图:
LINUX学习笔记一——磁盘设备

磁盘文件名与组成

常见的磁盘接口有两种,IDE与SATA。
对于IDE接口来说,一个IDE扁平电缆可以连接两个IDE设备,而主机一般又提供两个IDE接口,因此一般主机可以接到四个IDE设备,即hda - hdd,名字由实际插槽决定。
而对于SATA接口来说,SATA/USB/SCSI等磁盘接口都是使用SCSI模块来驱动的,所以这些磁盘设备文件名都是sd[a-p]的格式,具体名字由linux内核检测到磁盘的顺序决定。
除此之外,每个磁盘驱动器的磁盘分区不同时,其磁盘文件名还会改变,即根据分区位置在文件名后加数字,比如hda1,hda2等。

磁盘主要由盘片、机械手臂、磁头等部分组成,其中最重要的是盘片。
盘片其实就是数据存储的地方,由于单一盘片的容量有限,有的硬盘内部会有两个以上的盘片。
一张盘片上有许多扇形的区域,被称为扇区,是磁盘的最小存储单位,每一个扇区都是512bytes大小。
许多扇区组成的圆被称为磁道,在所有盘片上的同一磁道可以组成一个柱面,柱面也是分割磁盘的最小单位。

整块磁盘的第一个扇区特别重要,因为它记录了主引导分区(MBR)分区表这两个特别重要的信息。
MBR是安装引导加载程序的地方,有446bytes。
分区表则记录了整块硬盘分区的状态,有64bytes。

开机流程(BIOS、MBR、Boot loader)

BIOS是写入到主板上的一个软件程序,也是开机时计算机系统会主动执行的第一个程序。
BIOS会进行一些硬件检测与初始化工作,然后去分析计算机有哪些存储设备(硬盘或者软盘,U盘等),以硬盘为例,BIOS会根据用户设置取得能够开机的硬盘,并读取该硬盘的第一个扇区的MBR位置。
MBR里面放着引导加载程序(Boot loader),当BIOS读取MBR完成后,也就是BIOS执行完毕后,就会执行boot loader程序。
boot loader程序的主要任务是提供菜单,让用户可以选择不同的开机选项,然后载入内核文件(或者转交其他loader)。
举个例子,假如个人电脑里只有一块硬盘,里面分成四个分区,其中第一与第二分区分别安装了windows和linux,那么boot loader的工作就是选择window或者linux开机,具体流程如下:
0. 前提:MBR内安装的是可同时识别Windows/Linux操作系统的引导加载程序。

  1. 引导加载程序提供菜单,菜单上有两个选项。选项一可以直接加载Windows的内核文件来开机;选项二则是将引导加载工作交给第二个分区的启动扇区(boot sector)。(每个分区都拥有自己的启动扇区)
  2. 如果用户选择选项二,就会启动第二分区的启动扇区内的引导加载程序,该引导加载程序只有一个开机菜单,因此能使用Linux内核文件开机。

问:为什么装双系统时一般先装windows,再装linux?
答:
linux安装的时候,用户可以选择将引导加载程序安装在MBR或个别分区的启动扇区,而且linux的loader可以手动设置菜单,用户可以在boot loader里面加上windows开机的选项。
而windows安装的时候,安装程序会主动覆盖掉MBR以及自己所在分区的启动扇区,用户没有选择的机会。
所以如果先装linux,再装windows,MBR会被覆盖,引导加载程序就只会有Windows的选项,而不会有Linux的选项。(但这也可以补救,比如spfdisk等软件或者linux的救援模式。)

磁盘分区

windows下的C、D、E等盘就是对磁盘进行分区后的结果。
而linux下也需要对磁盘进行分区。
分区主要是出于两方面目的:

  1. 数据安全性(重装系统一般只会影响系统所在盘的数据,不会影响其他盘的数据)
  2. 系统性能(数据集中有利于提高系统性能,也就是计算机的局部性原理)

之前提到过,柱面是分区的最小单位(其实它也是文件系统的最小单位)。
之前还提到过整块磁盘的第一个扇区中除了MBR外,还有分区表,它记录了整块硬盘分区的状态。
磁盘分区表只有64字节,而每个分区信息需要16个字节,所以最多只能写入四组分区信息(其实就是该区段的起始与结束的柱面号码)。这四组分区我们就称为主分区或者扩展分区。(扩展分区可以没有,最多只能有一个,这个是操作系统限制的。)
四个分区很可能不够用,这时候就可以使用额外的扇区来记录分区信息,将扩展分区继续分成若干个逻辑分区
逻辑分区的设备名称从5号开始,因为前四个号码都是保留给主分区或者扩展分区。
举个例子,假如一块硬盘被分成一个主分区和一个扩展分区,扩展分区又被分成两个逻辑分区,那么这四个分区的名字就分别是hda1,hda2,hda5,hda6。