Linux系统分区知识

1. 分区

1.1 磁盘分区

系统分区也即磁盘分区,是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。磁盘划分成数个分区(Patition)以后,不同类的目录与文件可以存储进不同的分区。

如果不分区会怎样?就像橱柜中没有分小隔间,所有东西都堆在一起,存放和取东西都十分不方便。同样的,磁盘数据量很大,不分区则读取数据和写入数据的效率会大大降低。例如,C盘放操作系统,D盘放娱乐资料。

1.2 分区类型

  • 主分区:最多只有4个
  • 扩展分区:主分区有限,可以在主分区之上建立扩展分区
    • 一块硬盘上最多只能有1个
    • 一块磁盘上,主分区+扩展分区:总个数最多4个
    • 扩展分区本身不能写入数据,也不能格式化;扩展分区唯一的作用就是包含更多逻辑分区。
  • 逻辑分区:可以正确的读写数据、格式化

以上限制不是linux系统的限制,而是磁盘的限制,只要硬盘的结构不发生变化这种限制依然存在。

2. 格式化

硬盘正确分区之后还不能写入数据,还需要格式化才能读写数据。

格式化指的是高级格式化(还有低级格式化是硬盘的操作,不是操作系统的操作,不研究),是系统的操作,又称逻辑格式化。

  • 格式化的目的是为了在硬盘中写入文件系统。两个工作:
    • 格式化最主要的工作就是按照文件系统的规则将硬盘分割成等大小的数据块,数据块叫做Block。可以理解成柜子中加入隔断,但是隔断布局有一定的规则。EXT4的格式化是将分区变成一个一个等大小的数据块,默认的标准大小是4KB,假设一个数据是10KB,会拆成三个数据块,最后一个数据块内容有2KB但本身还是4KB,剩余的2KB空间不能再被占用;磁盘也不是连续保存这三个数据块的,而是分散在不同位置分别保存着三个数据块,所以windows中有磁盘碎片整理工具,原理就是保存文件的不同数据块尽量放在一起,这样更加利于数据的读取。
    • 建立一个inode列表。当用户需要读取文件时,根据表来查找文件放在那些数据块中。文件的编号成为i节点号(inode),通过i节点号来找到文件的元数据信息,从而得知文件保存在哪几个数据块中,然后取出这些数据块,拼凑起来成为完整文件。
  • 文件系统
    • windows可以识别的有FAT16、FAT32、NTFS
    • linux可以识别的有EXT2、EXT3、EXT4;新版本CentOs中默认使用ETX4

3 设备文件名(系统自动识别)

3.1 硬盘设备文件名

如果是windows,硬盘进行了分区→格式化→分配盘符→可以直接使用了。因为windows有完善的图形界面,可以通过图形界面看到分区在哪,所以可以直接分配盘符。

但是linux最早出现的时候没有图形界面,要让系统知道给哪个分区分配盘符,就必须先给每个硬件设备起一个设备文件名。
分区→格式化→给设备(分区)起文件名→挂载→可以使用了

注意:在linux中,所有硬件设备都是文件,比如 /dev下的文件都是设备文件名;
这些设备文件名是固定的,系统自动检测的,我们能够看懂就行。

硬件 设备文件名
IDE接口的硬盘 /dev/hd[a-d]
SCSI/SATA/USB接口的硬盘 /dev/sd[a-p]
光驱 /dev/cdrom或/dev/sr0
打印机(USB) /dev/usb/lp[0-15]
鼠标 /dev/mouse

比如有一块硬盘就是sda,两块就是sda、sdb

  • IDE硬盘最古老,理论的最高传输速度是133MB/s(基本淘汰)
  • SCSI硬盘与IDE同时代,更加昂贵理论传输速度200MB/s;主要用在服务器上,因为贵(基本淘汰)
  • SATA接口硬盘,小口的,现在使用最多,SATA三代理论传输速度可以达到500MB/s;目前不管服务器还是个人PC的硬盘接口一般都是SATA接口的硬盘(现在虚拟机模拟的接口也都是SATA接口硬盘)

3.2.分区文件名

硬盘有设备文件名,硬盘上的分区也要有设备文件名

规则:在硬盘文件名之后加分区号即可

  • /dev/sda1 : 表示SATA硬盘中的第一个分区
  • 分区方式一,在sda这块硬盘上:
    • 分了三个主分区文件命名为sda1、sda2、sda3
    • 一个扩展分区文件命名sda4;里面有两个逻辑分区文件命名为sda5、sda6
  • 分区方式二(更常用),在sdb这个硬盘上:
    • 一个主分区,对应文件命名为sdb1
    • 一个扩展分区,对应文件命名为sdb2;里面又分多个逻辑分区,分别命名为sdb5、sdb6、sdb7。注意:逻辑分区是从sdb5开始命名的,因为sdb1\2\3\4只能给主分区或者扩展分区使用,就算硬盘上没有分够四个分区,逻辑分区也不能用sdb1\2\3\4。所以sdb5一定是第一个逻辑分区。

以上过程是系统自动识别,我们需要明白其命名规则就行。

4 挂载

分区指定挂载点的过程称为挂载(挂载点就是windows中的盘符的说法,windos中用C\D\E\F作为盘符,linux中用空的目录名称作为挂载点)。

  • 必须分区
    • /(根分区):最高一级目录,一定要给他一个分区(也即 必须有一个分区必须以/作为挂载点),否则/目录下数据没地方保存
    • swap分区([美]死哇破):交换分区,可以理解为硬盘上的虚拟内存,当内存不够用的时候,可以用这部分磁盘空间来当内存用。内存2倍,不超过2Gb,给更多也不会带来性能的提升反而占磁盘空间。
  • 推荐分区
    • /boot:启动分区,大约200Mb。任何一个操作系统正常启动都必须有一定的剩余空间,如果磁盘被写满,会导致linux启动不起来,所以一般都会给/boot单独一个分区,因为/boot是专门保存系统启动时需要的数据。

注意:由于/目录下的子目录可以分配独立的分区,所以,如果往/boot中写入数据,实际上写入sda磁盘的第一个分区中。从linux系统上看,/boot是/的子目录;从硬盘上来看,每个目录都可以有独立的硬盘空间(分区)。

5 总结

  1. 分区:把大硬盘分为小的分区
  2. 格式化:写入文件系统
  3. 分区设备文件名:给每个分区(命名)定义设备文件名
  4. 挂载:给每个分区分配挂载点(即目录)

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器