linux分区

每次安装linux的时候,都会选择分区和挂载点。但是基本上没怎么研究过linux分区的细节,今天回顾了一下《鸟哥的linux私房菜》,总结一下分区的相关知识。

磁盘的组成

磁盘

磁道(Track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。

柱面(Cylinder):在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)。

扇区(Sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。

磁头(Heads)

盘片(Platters)

每个碟片都有两面,因此也会相对应每碟片有2个磁头。

硬盘的物理结构一般由磁头与碟片、电动机、主控芯片与排线等部件组成;当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁头悬浮在碟面上画出一个与碟片同心的圆形轨道(磁轨或称柱面),这时由磁头的磁感线圈感应碟面上的磁性与使用硬盘厂商指定的读取时间或数据间隔定位扇区,从而得到该扇区的数据内容;

磁盘的第一个扇区记录了整块磁盘的重要信息,主要有两个:

1.主引导分区:可以安装引导加载程序的地方,有446bytes

2.分区表:记录整块音盘的分区状况,有64bytes

开机流程

简单梳理一下开机流程:

计算机开机后,会主动执行BIOS程序,BIOS是写入到主板上面的一个软件程序。接下来BIOS会去分析计算机中有哪些存储设备,然后依据用户的设置获取可以开机的硬盘(比如我们设置从usb启动),
然后到读取该硬盘中的第一个扇区MBR位置。MBR中放置着基本的引导加载程序,接下来就是MBR内的引导加载程序加载内核文件。这个引导加载程序是操作系统在安装时提供的。

磁盘分区表

分区不难理解,在windows中,就意味着C,D,E等不同的盘,其实这些c盘,d盘往往都是属于同一块磁盘,将同一块磁盘划分开来,这就是分区。那为什么要分区呢?

1.数据安全

很好理解。比如我们在重装win操作系统的时候,往往只需要重装c盘即可,d盘等其他分区里的数据并不受重装系统的影响。

2.性能

将磁盘分区后,提高了数据读取的速度。我们在寻找某个分区的数据时,只需要扫描该分区对应磁盘的位置即可,并不需要全盘扫描。

那么,到底是如何分区呢?

柱面

上图中,不同颜色的柱面范围就代表了不同的分区。分区利用了柱面号码的方式来处理。在分区表所在的64bytes中,总共分为四组记录,每组记录该分区的起始与结束柱面号码。

我们将上图中从圆心到周长中间切出一条长方形来看:

分区

上图假设硬盘有400个柱面,分成四个分区。所谓的分区其实就是针对分区表进行设置而已。分区表最多可以容纳四个分区(只能记录四条数据),这四个分区被称为主分区或者扩展分区。
系统要写磁盘时,首先会参考磁盘分区表,然后才对某个分区的数据进行处理。

假设这个磁盘在linux中的设备文件名为/dev/hda,那么这四个分区的文件名分别为:

p1:/dev/hda1 p2:/dev/hda2 p3:/dev/hda3 p4:/dev/hda4

那么如何可以分得更多的分区呢?装过操作系统的人都知道分区不仅仅可以分四个,我们可以有c,d,e,f,g等等多个磁盘的划分。这都是通过扩展分区来做到的。

扩展分区的原理就是利用额外的扇区来记录更多的分区信息,从而继续分出更多的分区来。由扩展分区分出来的分区叫做逻辑分区。

分区

上图中,我们将磁盘/dev/sdb 分为了六个分区,分别是

三个主分区:/dev/sdb1,/dev/sdb2/,/dev/sdb3

三个逻辑分区:/dev/sdb5,/dev/sdb6/,/dev/sdb7

为什么没有sdb4呢?那是因为1-4是保留给主分区或者扩展分区使用的。

注意以下几点:

主分区和扩展分区最多只能有四个;

扩展分区只能有一个;

逻辑分区是有扩展分区再切割而来的;

扩展分区不能够格式化,所以无法直接使用,必须分为逻辑分区后才可以访问;

所以说,如果我们想要分出四个以上的分区时,务必要设置一个扩展分区,而不能将四个分区全部划为主分区。

多重引导

前面的开机流程中提到,计算机通过读取MBR中的引导加载程序,使用该程序读取内核文件,启动操作系统。如果我们安装了双系统的话,又是如何指定启动哪一个操作系统呢?

引导加载程序主要有下面几个功能:

提供不同的开机选项;

载入内核文件;

将引导加载功能转交给其他引导加载程序;

其中第三点,转交给其他引导加载程序,表明我们可以安装不同的引导加载程序到硬盘上面,但是MBR只有一个,也只能安装一个引导加载程序。
其他的引导加载程序,可以安装在不同分区的引导扇区上面。

分区

上图中,我们假设分别在两块分区上安装了windows和linux。当MBR中的引导加载程序开始工作时,会提供两个开机选项供我们选择:

如果我们选择windows,引导加载程序直接加载windows的内核文件开机;

如果我们选择linux,引导加载程序会把工作交给第二个分区的启动扇区中的引导加载程序。第二个引导加载程序启动后,加载该分区内的内核文件开机。

那么,为什么安装双系统时,常常要求先安装windows,后安装linux呢?

那是因为windows在安装的时候,会主动覆盖掉MBR及自己所在分区的启动扇区,并且也没有提供不同的开机选项菜单;而安装linux,可以选择将引导程序安装在MBR或者其他分区的启动扇区,并且也提供了手动设置开机菜单的功能。

如果我们先安装了linux,再安装windows的时候就会把linux在MBR内的引导加载程序覆盖掉,并且也不会提供linux选项,而是直接进入windows系统。

挂载点

安装linux的时候,都会让我们选择挂载点。这个挂载点又与分区有什么关系呢?

我们知道linux中所有的数据都以文件的形式存在,而文件数据是放在磁盘的分区当中的。所有的文件都是又根目录/衍生而来,我们想要取得/home/yukai/data.txt这个文件时,系统又根目录开始找,
找到home,然后找到yukai,最后找到data.txt这个文件。如何由目录树找到磁盘分区中的数据,就是挂载点的意义。

所谓的挂载就是利用一个目录当作进入点,去访问挂载在这个目录上的分区内的文件,即进入该目录就可以读取该分区,该目录是该分区的入口。我们想要访问一个分区时,必须将该分区挂载到某个目录上面,这个目录就是挂载点。

所以说在安装linux的时候,要选择分区和挂载点,意思就是把不同的数据放置到不同的分区上的意思,比如我们把 /dev/sda1的挂载点设置为/home,就意味着/home下所有的数据都存放在/dev/sda1这个分区上面。