Linux快速入门与实战:基础知识、容器与容器编排、大数据系统运维
上QQ阅读APP看书,第一时间看更新

3.3.3 Linux存储基本操作

本节介绍Linux存储系统最常用的操作,包括MBR分区和GPT分区的构建操作、格式化操作以及挂载操作等。

1.准备示例环境

在介绍存储操作示例之前,先关闭虚拟机添加一块新的硬盘,名字为2T.vmdk,类型是SCSI,大小是2040GB,存储成一个单独的文件,如图3-22所示。

图3-22 新增虚拟硬盘信息图

2.分区操作

(1)查看分区

系统重启后,使用下面的命令查看分区信息。

上述命令执行后,显示结果如下,有三个设备。

1)sda是创建虚拟机时的硬盘,大小是20GB。

2)sdb是新添加的硬盘,大小是2TB。

3)sr0是光驱设备。

sda下面还列出了分区信息,有两个分区:sda1分区大小是1G,sda2分区大小是19G。在sda2分区上还创建了两个逻辑卷:cl-root逻辑卷用于安装操作系统,cl-swap用于交换分区,有关逻辑卷后面还会详细说明。

(2)使用fdisk分区

1)使用fdisk对新增的硬盘/dev/sdb分区,它可以创建MBR分区,命令如下。

上述命令执行后,会进入fdisk的交互界面,如下所示。

2)冒号(:)后面输入fdisk内部命令,例如查看帮助的命令m,如下所示。

此时,fdisk会打印其使用帮助,如下所示。

命令p可以查看硬盘已有的分区。

如果硬盘上已经有分区了,可以使用命令d来删除已有的分区。

如果不想对分区做任何操作,可以使用命令q退出fdisk。

3)输入命令n,创建第一个分区,如下所示。

4)上述命令执行后,fdisk会提示待创建分区的类型,是主分区,还是扩展分区?分区有两种类型:主分区和扩展分区。

5)先创建一个主分区,命令如下所示。

6)按〈Enter〉键后,fdisk会提示选择分区号,直接按〈Enter〉键,使用默认编号1。

7)选择分区的第一个扇区编号,按〈Enter〉键选择默认即可。

8)确定分区大小,如下所示,+100G表示分区的大小为100GB,+100表示大小为100个扇区,+100K表示分区大小为100KB,+100M表示分区大小为100MB,+100T、+100P以此类推。

9)按〈Enter〉键后,如果fdisk出现下面的提示,选择Yes。

10)此时,第一个主分区就设置好了,输入w,保存并退出,如下所示。

11)使用lsblk命令查看分区,可以看到sdb下面新增了一个分区sdb1,大小为100G,如下所示。

(3)使用parted分区

1)在使用parted分区之前,要先使用fdisk删除上小节所创建的分区/dev/sdb1,删除后的分区应该如下所示。

2)使用parted在/dev/sdb上创建GPT分区,命令如下。

3)输入help可以打印命令帮助,如下所示。

帮助内容显示如下。

4)使用mklabel创建GPT分区,如下所示,mklabel是命令,gpt是分区标签。

5)在下面的提示中选择Yes。

6)创建第一个分区,命令如下。

上述命令和参数说明如下。

mkpart是分区创建命令。

p1是分区名字,因为GPT分区没有主分区和扩展分区之分,因此,mkpart后面直接跟分区名字,注意mkpart和p1之间要有空格。

Ext4是分区的文件系统类型。

2048s是分区的起始位置,其中s表示扇区(Sector),也可以使用百分比,例如10%,即从磁盘空间的10%处开始,也可以使用K/M/G等存储容量单位,例如2048K,即从磁盘的2048KB处开始。

分区的起始位置要特别注意,如果填入的数字不合适,会有下面的提示:“Warning: The resulting partition is not properly aligned for best performance:XXs%2048s!=0s”。这是因为分区的起始位置并没有和某个数字对齐,如果分区不对齐的话,对存储性能会有很大影响。

那这个数字应该怎样确定呢?这里有个好方法,告警提示中“XXs % 2048s != 0s”,这个2048s就是需要对齐的数字,即2048个扇区。

200G是分区的结束位置,其格式同分区起始位置一样,可以用扇区数、百分比和存储容量来表示。

7)创建第二个分区,分区名为p2,文件系统为Ext4,空间为剩余的所有空间,命令如下,其中100%表示剩下的所有空间。

8)使用命令p打印当前分区信息,命令如下。

分区信息显示如下,可以看到/dev/sdb的大小为2190GB、分区表类型为gpt,并且已经创建了两个分区。

第一个分区的起始位置是1049kB,刚才分区时,设置的参数是2048s,为何两个数字不一样?

2048s的大小是2048*512=1048576B,1048576/1000=1049kB,这里的k是小写,大小为1000,大写的K才是1024。因此,2048s换算成容量单位就是1049kB。

9)如果确定没有问题,使用quit命令退出,如下所示。

如果分区有问题,可以使用rm Number来删除指定的分区,例如rm 2就是删除编号为2的分区。

10)使用lsblk查看分区情况,如下所示,可以看到刚才划分的两个分区sdb1和sdb2。

2.格式化操作

格式化操作就是在指定的存储对象上创建文件系统,这个存储对象可以是整个物理块设备、虚拟块设备,也可以是它们的分区,还可以是逻辑卷。

Linux下的格式化命令为mkfs,示例如下。

(1)示例1:在/dev/sdb1上创建Ext4文件系统

创建命令如下,-t ext4表示文件系统类型是Ext4,也可以用其他的文件系统名,如ext2、ext4、xfs等替换ext4,/dev/sdb1是格式化的存储对象。

使用lsblk-f可以查看/dev/sdb1的文件系统类型,如下所示,sdb1的类型为Ext4。

其实mkfs并不会执行具体格式化操作,它只是一个包装(Wrapper),它会根据传入的参数选择具体的格式化命令进行操作,上述示例中调用的就是/usr/sbin/mkfs.ext4。

(2)示例2:设置文件系统的Block大小

文件系统中最重要的一个参数就是Block大小,Block是文件系统操作的最小单位,它由若干个扇区组成。如果Block越小,则文件系统空间浪费得越少,特别适合小文件(KB甚至更小的级别)较多的应用场景,其缺点是文件系统本身的开销会比较大。如果Block越大,则文件系统本身的开销会比较小,文件的碎片数会比较少,而且文件系统操作的速度会提升,特别适合存储大文件(GB以上),或者磁盘本身空间比较大(TB级)的场景。

Block的取值范围因文件系统而异,以Ext2/Ext3/Ext4为例,它们的Block大小可以是1024、2048或4096字节。下面重新对/dev/sdb1格式化,将Block设置为1024字节,命令如下,其中-b 1024用来指定Block大小为1024字节。

查看/dev/sdb1的Block信息,命令如下。

Block的大小信息如下,为1024字节。

Ext4还支持clustered block allocation,可以认为是更大的Block,其大小是Block大小*2的幂次方,默认值是16个Block,即2的4次方。

3.挂载操作

挂载操作会将文件系统A同目录B关联起来,这样目录B下的内容就是文件系统A的内容,向目录B写入的文件就会存储到文件系统A上,目录B称为挂载点。

挂载操作的命令为mount,示例如下,将/dev/sdb1挂载到/mnt上,挂载点为/mnt。

使用lsblk可以查看挂载情况如下,sdb1已经挂载到/mnt上了。

注意,mount命令后面跟的参数是/dev/sdb1,它是一个分区,但是在mount操作中,它表示的是这个分区上的文件系统,因为/dev/sdb1如果不格式化,是无法挂载的。