在上一篇Blog中我简单的探究了一下Linux中Swap的一些配置对Linux系统性能的影响,这几天有刚好碰到了一些磁盘分区挂载的问题,由于自己的基础不牢在解决这些问题的时候白白浪费了很多时间,所以说基础才是第一生产力啊。话不多说,切入今天的主题 Linux 的磁盘分区与挂载。
1. 硬盘分区
在了解Linux下的磁盘分区之前,首先我们得了解一下硬盘的分区,因为硬盘的分区是和操作系统没有任何关系的,它是在安装操作系统之前进行了。无论什么操作系统在启动时首先会通过MBR(Master Boot Record是位于磁盘最前边的一段引导Loader代码。)来获得操作系统文件所在的分区,所以一个可引导分区是不能缺少的。这也是为什么新买的硬盘不能直接用的原因。说到这你可能会问磁盘为什么要划分多个分区?我所知道的原因有两个:
- 一是为了提高管理效率,所有东西如果都放在一个分区,OS管理其起来效率比较低,因为每次要检索的东西太多。
- 二是提升数据安全性,因为每个分区的数据是分开的,所有系统崩溃以后重装系统并不会影响到数据安全(被覆盖),这样数据恢复起来就比较容易了。在Windows中可能比较直接,而在Linux中需要自己去挂载和管理。
下面我们简单看下硬盘的分区结构:
硬盘主引导扇区 = 硬盘主引导记录(MBR)+ 硬盘分区表(DPT),一共是512个字节,其中MBR是446,分区表一共64字节,然后是2个字节的结束标志。引导扇区存储在硬盘的0头0道1扇区,也就是Boot Sector。操作系统在启动时通过BIOS程序把Boot Sector读入内存,然后执行其中MBR,这个时候BIOS就把启动交给MBR控制;MBR作用是在4个分区表中搜索标志为活动的分区,找到后把活动分区的第一个扇区读入内存,然后开始执行它,运行特定系统的启动程序(LILO,GRUB,NT Loader);这个时候启动的启动就交给了操作系统的引导程序来控制了。然后操作系统进行一系列的初始化,最后把系统交给系统内核进行管理。
2. Linux System分区
上面介绍了硬盘分区结构,下面就简单介绍一下各个分区。硬盘分区一共有3种,主分区,扩展分区和逻辑分区。
- 主分区上可以安装操作系统,因为MBR中记录的主分区信息,系统启动时会到主分区来查找操作系统引导文件,所以操作系统的引导文件必须在主分区中,否则系统就无法启动了。而最多只支持4个主分区(由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据。)。
- 扩展分区并不是一个真实存在的分区,它只是内存管理链表中的一个指针,指示出那一块区域是扩展分区。上面也提到出现扩展分区的原因。所以一个扩展分区也是一个主分区。
- 而通过在扩展分区中在划分逻辑分区对系统分区进行扩展的分区便是逻辑分区。实际上所有的逻辑分区都是在一个分区类,只是逻辑上分开,这也是叫逻辑分区的原因。但对用户来说一切都是透明了,我们看起来系统中有很多分区。
Linux系统中的分区和Windows有很大的区别,对于使Dos或Windows系统来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符(A,B,C,D),然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的。然而对 Linux用户来说无论有几个分区,都得分给目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。 Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区就在Linux的存储空间的某个目录下获得。在网上找到了一张很形象的图:
从上图可以更好的理解, 我们安装系统的时候已经把分区1挂载到 / 目录下了。而这个时候没有挂载其他任何分区,所以/ 目录下的所有其他目录都在这个分区下,也就是说,我在任何目录下读写操作实际都是操作的这个1号分区。如果我们想使用其他分区,就必须把这个分区挂载到一个目录下,这个目录可以是已经存在的目录,比如/home,也可以是我们自己建立的目录,比如/oracle。当然有些目录比如/lib, /dev, /etc, /usr这些都不能挂载其他分区,因为他们都存放着系统需要的文件,一旦被挂载其他分区,那没OS就无法找到所需的文件,系统就会崩溃。比如我们把分区2挂载到/usr/X11目录下时,系统就无法通过X11目录找到分区1上的文件,这个时候系统图形界面就无法使用了。 虽然文件还在硬盘上。但目录 — 分区 是通过挂载吧他们联系起来。你更换了分区,也就破坏了联系,就无法在找到之前的文件了。我们在看分区5和分区6,我们把它挂载到/home/ftp 和 /oracle目录下,这个时候我们在操作这2个目录是,就是操作对用的分区。而WINDOWS就没这么复杂,她不是采用树形的结构,每个分区对应一个盘符,一旦建立映射关系就无法在修改。实际上,LINUX的每个挂载了分区的目录就相当于WINDOWS系统中的盘符,比如上面的,/home/ftp 和 /oracle目录我们就可以把她看做一个盘符和一个分区关联。
更多详细的内容可以参照:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/20.html