青蛙学Linux—为系统添加新硬盘
如果当前主机的存储空间不够用了,就需要添加硬盘进行扩容了。这就需要对新添加的硬盘进行分区和格式化了。
在对硬盘进行分区前,我们先来了解下两种硬盘分区表格式MBR和GPT。
1、MBR和GPT
分区表对于一个硬盘是非常重要的,分区表告诉硬盘如何读取和写入数据,一旦分区表被破坏,那么就无法对硬盘上的数据进行操作了。现在主流的硬盘分区表格式有MBR和GPT两种,而GPT也在渐渐的取代MBR。
1.1、主引导记录MBR
MBR,Main Boot Record,是位于硬盘最前边的一段引导代码。它负责对磁盘进行读写时分区合法性的判断、分区引导信息的定位,在对硬盘进行初始化时产生。
通常,我们将包含MBR引导代码的扇区称为主引导扇区。因为在这一扇区中,引导代码占用绝大部分的空间,故而将这部分扇区称为MBR扇区(简称MBR)。由于这一扇区承担有不同于磁盘上其他普通空间的管理功能,它不属于磁盘上的任何分区,因而分区格式化命令不能清除主引导记录信息。MBR由以下三个部分组成,一共占用512个字节:
- 主引导记录MBR,446个字节,用于在硬盘启动时将系统控制转给用户指定的并在分区表中登记的某个操作系统
- 磁盘分区表项DPT,64字节,负责说明磁盘上的分区情况
- 结束标志,2字节,值为AA55,由于存储时低位在前高位在后,所以看上去是55AA
MBR的缺点:由于MBR中分区表项只占64字节,而每一个分区表有16字节,所以只能划分4个分区,多于4个分区就必须使用主分区+扩展分区的方案;MBR最大只能支持2TB的硬盘,超过2TB将不会被识别。
1.2、GUID磁盘分区表GPT
GPT,GUID Partition Table,全局唯一标识磁盘分区表,是可扩展固件接口EFI标准的一部分,用于替代MBR。GPT没有分区个数的限制,可以管理最大18EB的硬盘;由于它是EFI标准的一部分,如果使用GPT格式的磁盘作为系统盘,需要UEFI主板和操作系统的支持,非系统盘则无此要求;另外GPT只支持64位的操作系统。
随着硬盘容量的扩大和UEFI的流行,GPT正在替代MBR成为主流。
2、常用磁盘分区工具
一个硬盘只有对其进行分区后,才可以使用。这里介绍两款Linux下的常用磁盘分区工具fdisk和parted。fdisk仅支持MBR,不支持GPT,如果需要建立GPT格式的分区表需要使用parted。
这里以为当前主机添加一块20GB的磁盘为例,介绍两种工具的使用方法。当前操作系统为CentOS 7.5.1804。
2.1、fdisk
fdisk是Linux下一款功能强大的磁盘分区管理工具,可以用来查看磁盘的使用情况,也可以对磁盘进行分区。仅支持创建MBR格式的分区表,故不支持大于2TB的硬盘。
fdisk有查询模式和交互模式两种使用方法。
查看磁盘的使用情况时,我们通常使用:
fdisk -l
当需要对一个硬盘进行分区时,通常使用以下命令进入交互模式:
fdisk 设备名
交互模式下的常用功能选项:
- d:删除一个分区
- l:查看支持的磁盘分区格式
- m:帮助
- n:增加一个新的分区
- p:显示分区信息
- q:不保存退出
- t:改变分区类型
- w:保存退出
我们先查看当前磁盘的使用情况:
当前主机只有一块硬盘,为/dev/sda,下面我们为其增加一块20GB的硬盘,并查看:
这里可以看到新添加的硬盘(红框处),设备名为/dev/sdb,接下去要使用fdisk工具将其分为两个分区,一个分区10G,剩余空间给另一个分区,首先进入fdisk的交互模式:
输入n,创建新的分区:
首先提示我们的是创建主分区还是扩展分区,并会标识出当前分区的数量,我们输入p创建一个主分区:
提示我们设置分区号,这里直接回车使用默认:
设置分区的起始扇区,直接回车使用默认:
设置结束扇区,当前要划分的10GB大小的分区,这里根据提示输入+10G:
提示我们已经建立了一个10GB大小的分区,查看现在的分区状态:
可以看到分区已经创建成功,为/dev/sdb1。接下来重复以上的动作,继续划分另外一个分区,分区完成后输入w保存退出。
2.2、parted
parted也有查询模式和交互模式两种使用方法。
查看磁盘的使用情况时,我们通常使用:
parted -l
当需要对一个硬盘进行分区时,通常使用以下命令进入交互模式:
parted 设备名
常用的交互模式命令:
- mklabel:创建分区表,设置磁盘使用何种分区表格式。如使用GPT:mklabel gpt
- mkpart:创建新分区,命令格式为mkpart 分区类型 [文件系统类型] 起始位置 结束位置。分区类型即为主分区primary、扩展分区extended和逻辑分区logical;文件系统类型一般不指定,等分区完成后使用mkfs命令格式化
- print:输出分区信息,可简写为p。该命令有三个选项,free显示当前磁盘的所有信息,并显示剩余空间;number显示指定分区的信息;all或list显示所有磁盘的信息
- rm:删除分区
- select:选择硬盘。
- quit:退出(parted会自动保存对硬盘的修改),可简写为q
我们先查看当前的磁盘信息:
红框处就是我们添加的新硬盘,当前还没有分区信息。同上还是将这个硬盘分割为一个10GB和一个包含剩余空间的两个分区,进入parted的交互模式:
首先,我们为这块硬盘使用GPT格式:
这里会提示是否执行,如果执行该硬盘上的所有数据将丢失,输入yes确认执行,然后查看当前磁盘的信息:
注意Partiton Table项,已经从最上面的msdos变成gpt了。接下去新建一个分区:
这里可以看到,10GB的分区已经建立,接下去重复上面动作创建另一个分区(确定另一个分区的起始点时可使用print free查看):
查看分区信息:
分区划分成功,输入q退出即可自动保存。
提示修改/etc/fstab,可以使分区自动挂载。
3、对新的分区进行格式化并挂载
分区创建完成后必须经过格式化才能使用。格式化就是用指定的文件系统对磁盘分区进行初始化,而文件系统是操作系统用来在磁盘上组织文件的方法。所以只有当一个分区被格式化后,才能在上面进行数据的存储。
在Linux下可以使用mkfs命令对分区进行格式化。命令语法如下:
mkfs.文件系统类型 [选项] 设备名
常用选项:
- -f:当分区已存在文件系统时使用该选项强制重写
格式化后的分区必须挂载到一个目录下才可以在其中进行数据存储。如果该分区需要开机自动挂载,则必须在/etc/fstab文件中添加该分区,否则只要主机重启就必须重新进行挂载操作。
一个例子:对上面通过parted分割的两个分区进行格式化并挂载到/data1和/data2目录
我们首先查看当前的磁盘分区状况(重点在/dev/sdb部分):
通过分区号可以得知两个分区分别为/dev/sdb1和/dev/sdb2。我们将/dev/sdb1格式化成xfs,/dev/sdb2格式化成ext4:
格式化完成,我们通过查看磁盘分区状况来验证下是否格式化成功:
通过显示的信息得知格式化成功,接下来通过df命令查看分区及其对应的挂载点:
当前还无法看到/dev/sdb1和/dev/sdb2两个分区,所以我们接下来要进行挂载操作:
通过df命令查看是否挂载成功:
OK,已经可以看到/dev/sdb1和/dev/sdb2两个分区和它们对应的挂载点了,现在就可以cd到对应的目录下进行文件的存取操作了。