磁盘管理
主次设备号与驱动
当内核运行起来之后就会接管所有的硬件,任何程序都不得直接与硬件进行通信,任何程序都要通过内核才可以与硬件进行通信。那么内核是为什么可以接管所有的硬件?因为内核当中有各个硬件的驱动程序,这些程序集成在内核当中,其目的就是为了接管硬件。这些驱动都是市面上常见的,相对来讲比较老旧的。比如我们买了一个最新的硬盘,但是内核当中并没有此品牌类型的驱动程序的话,那么内核便不能使用此硬盘(即无法识别),所以当我们在一个硬盘装系统的时候发现内核并不能使用此硬盘的话,除去物理原因很有可能就是驱动问题,那么解决的办法就是先加载驱动到内核当中,然后内核再使用驱动来装入。每一种硬件因为其物理特性的不同,在linux上便有不同的数据标识,比如用2来标识硬件,用3来标识显卡等等,但是如果有多个同样的物理设备呢?所以就有了主次设备号,第一个硬件用2标识,那么第二个硬盘就有可能用2.2来标识,第一个2就是主设备号(major),那么第二个设备号就是次设备号(minor number)。
linux是一切皆文件,每一个硬件也是在linux上映射成一个块文件,用b来标识,这个块设备文件是关联到了内核当中对应的设备的驱动之上了,每当系统想调用某个硬件做某事的时候,就会调用这个块文件,调用这些块文件实际就是调用的硬盘驱动。
磁盘与分区
盘片上有多个嵌套的圆,最外侧的圆就是0磁道(track),不断向内增加,靠外侧的磁道一般都分配给活动分区使用,因为在单位的时间内被磁头读取的数据最多,最流畅,;有的硬盘有多个盘片,而每个盘片上都有相同的磁道,不同的盘片上的相同的编号的磁道就是柱面(cylinder):第个磁道又有扇开的区域又叫做扇区(secotr),每一个扇区能存储512个位。当我们分区的时候其实就是对柱面进行分区的,每个柱面只能属于一个分区。
硬盘的工作效率受到多方面的影响,其主要的是还是其转速与接口的影响。比如每分钟可以转的圈数,主流的7200转/分钟,更高级还有15000转/分钟。硬盘的接口主要是分为二种(除固态):并口与串口,串口是比较快,因为是为时间频率的,提到时钟频率又不得不提一下(同步与异步)。
1. 并行:IDE接口(133M/S)、SCSI接口(MB/S)
2. 串口:SATA(6Gb/s)、SAS(6Gb/s)、USB(480M/s)
0磁道就是最外侧的磁道。0磁道的第一个扇区就是存放着主引导记录,正好占满512位。这512个位存放的是主引导记录(master boot record),其中446位是存放引导加载器(boot loader),还有64位是存在分区表,每个分区表占用16位,所以只能记录4个主分区嘛!还有2位是标识此引导记录的有效性。说白了分区就是在分区表中写入分区所对应的起始与结束柱面而已,并没有对磁盘做物理上的划分,我们所谓的分区不过就是在分区表中写入了一些数据。
linux有多个分区的工具,最常见的就是fdisk这个工具,这个工具可以在一块硬盘上最多分成15个区。分区的时候先分主分区,一般分三个主分区,第四个要分成扩展分区,扩展分区不成直接使用,想要使用的话,需要在扩展分区之间再划分逻辑分区,逻辑分区的标识是从五开始的。使用扩展分区的目的是使用额外的扇区在记录分区信息,因为主引导记录里面只能存放四个分区的地址,想要使用更多的分区就得从别的地方划分空间存放柱面信息,而扩展分区就是这样一个地方。
1. 为什么要分区?
有了分区重装系统之后只会重装系统所有的分区,其余分区的数据不丢失。
2.提高性能
一般分区是都是三个主分区+一个扩展分区,然后在扩展分区里面再划分多个逻辑分区,其实穿上扩展分区也是一段空间,不过这段空间不能存在真正的数据,而是存放的是其它分区的柱面范围。
硬盘设备文件的命名
IDE类型都是用hd命名,第一块使用hda,第二块使用hdb,余下的所有的类型都是用sd命名,第一块叫做sda,第二块sdb……,第一块上的不同的分区用sda1,sda2……;hda1,
不同的接口的硬盘用hd和sd区别,同一种类型的不同硬盘使用a/b/c……,同一块硬盘的不同分区使用数字标识。
查看磁盘分区信息
[root@localhost ~]# fdisk -l /dev/sda #列出磁盘的分区信息 磁盘 /dev/sda:536.9 GB, 536870912000 字节,1048576000 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x00020f59 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 20482047 10240000 83 Linux /dev/sda2 20482048 1048575999 514046976 8e Linux LVM
[root@localhost ~]# fdisk /dev/sda 命令(输入 m 获取帮助):m d delete a partition l list known partition types m print this menu n add a new partition p print the partition table q quit without saving changes t change a partition's system id w write table to disk and exit
创建完后并不意味着大功告成中,创建完成是写入到内存当中,创建完成并按下w意味着向硬盘当中执行,但是常常在执行这一步的出错,所以当我们按下w之后 ,还要查看内核是否已经识别新的分区:
//通过查看/proc/partitions文件,查看分区有没有成功 [root@localhost ~]# cat /proc/partitions //如果没有识别的话我们要通过parts命令通知内核重新读取硬盘的分区表 [root@localhost ~]# partx -a /dev/sda centos5使用partprobb /dev/sda