- Linux快速入门与实战:基础知识、容器与容器编排、大数据系统运维
- 艾叔编著
- 2387字
- 2022-05-10 17:43:37
3.3.3 Linux存储基本操作
本节介绍Linux存储系统最常用的操作,包括MBR分区和GPT分区的构建操作、格式化操作以及挂载操作等。
1.准备示例环境
在介绍存储操作示例之前,先关闭虚拟机添加一块新的硬盘,名字为2T.vmdk,类型是SCSI,大小是2040GB,存储成一个单独的文件,如图3-22所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/90_01.jpg?sign=1739267762-RB5ofOumuBdV8S8VCsGetmmu0BjGQWgs-0-52f2cf8761bc34c9069835fded02f842)
图3-22 新增虚拟硬盘信息图
2.分区操作
(1)查看分区
系统重启后,使用下面的命令查看分区信息。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/90_02.jpg?sign=1739267762-z7TdQdlyfXF9UI6foi64ESRGrqfuTrd9-0-48308d3983945da1e20554745d03a836)
上述命令执行后,显示结果如下,有三个设备。
1)sda是创建虚拟机时的硬盘,大小是20GB。
2)sdb是新添加的硬盘,大小是2TB。
3)sr0是光驱设备。
sda下面还列出了分区信息,有两个分区:sda1分区大小是1G,sda2分区大小是19G。在sda2分区上还创建了两个逻辑卷:cl-root逻辑卷用于安装操作系统,cl-swap用于交换分区,有关逻辑卷后面还会详细说明。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_01.jpg?sign=1739267762-8aJ5I4KgUaPppBMd7w8d9U2HIaCgiMRw-0-a99a864ed9c04d7d010d6e154323a2a9)
(2)使用fdisk分区
1)使用fdisk对新增的硬盘/dev/sdb分区,它可以创建MBR分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_02.jpg?sign=1739267762-RhbxYqOEfxkMUNypnULchJE2i2p1slVv-0-bb482a2109840821f1169f9997be9dd2)
上述命令执行后,会进入fdisk的交互界面,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_03.jpg?sign=1739267762-r792FBLABuBFKgA7mEJjSDMBHV9meZ6K-0-cf9a5d35f58ba3407fe8d95f28beb272)
2)冒号(:)后面输入fdisk内部命令,例如查看帮助的命令m,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_04.jpg?sign=1739267762-RohbQwJIdj6gcHFRGHoGC3XlHZstvzPl-0-d2443c9153a28409f1ee55dcf37dd4f3)
此时,fdisk会打印其使用帮助,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_05.jpg?sign=1739267762-2JkNWVCiktFe1UOTTMhISHK5JW8JDyXH-0-a4029c6cb8083765106e75ab52f04625)
命令p可以查看硬盘已有的分区。
如果硬盘上已经有分区了,可以使用命令d来删除已有的分区。
如果不想对分区做任何操作,可以使用命令q退出fdisk。
3)输入命令n,创建第一个分区,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_06.jpg?sign=1739267762-xX08uWJJfJyegP7PlUB43Pfs2PgmfqtP-0-31080e467f2f625a1445516a42a3ab76)
4)上述命令执行后,fdisk会提示待创建分区的类型,是主分区,还是扩展分区?分区有两种类型:主分区和扩展分区。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_07.jpg?sign=1739267762-FKjTgA0Y2xCm8R4vJeWCmhqjLHPIbRhR-0-c400b7633fce653c1f6eb62726dbc0b7)
5)先创建一个主分区,命令如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_08.jpg?sign=1739267762-GyoH0hCr9v0lbkH8SqgInz9jcWmAPc1H-0-029bfe901d841797299e05f49846ce36)
6)按〈Enter〉键后,fdisk会提示选择分区号,直接按〈Enter〉键,使用默认编号1。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_09.jpg?sign=1739267762-5nopHUrG2BS1Oazs2UN4b5QpDJCg84Nd-0-9d5440aa07ceb58f3d79c31139fd017b)
7)选择分区的第一个扇区编号,按〈Enter〉键选择默认即可。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_01.jpg?sign=1739267762-kxJiAyX5OftUwRbckj5pYNua8aTHt6b5-0-ca6f21fd9276a51b7f038a45ae0230d1)
8)确定分区大小,如下所示,+100G表示分区的大小为100GB,+100表示大小为100个扇区,+100K表示分区大小为100KB,+100M表示分区大小为100MB,+100T、+100P以此类推。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_02.jpg?sign=1739267762-cAThwvQpb3lhwrdMU9EENqQIAy4Uua8H-0-c5a4d483bd9de056bb76a8a01c6a91eb)
9)按〈Enter〉键后,如果fdisk出现下面的提示,选择Yes。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_03.jpg?sign=1739267762-Yt41bIrHHRfNkxcLuETwiuZu5uJ5wMjV-0-fc9d406cbe52640f3e4e24816abba2d1)
10)此时,第一个主分区就设置好了,输入w,保存并退出,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_04.jpg?sign=1739267762-InSe3MRb4RW6CRYZ9pwp8dlXVq3Mb7nM-0-2fee6a2584e7e80c02e4f8572d618561)
11)使用lsblk命令查看分区,可以看到sdb下面新增了一个分区sdb1,大小为100G,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_05.jpg?sign=1739267762-Fcj458F7q1lH8UroLSWJVTrTHp67fQyJ-0-8f984e87c01d2c67ee624731cd3f7691)
(3)使用parted分区
1)在使用parted分区之前,要先使用fdisk删除上小节所创建的分区/dev/sdb1,删除后的分区应该如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_06.jpg?sign=1739267762-YIBkpWKRFfJGiOWXjubZLeU6qdibmobe-0-72d99fd7a1b62b94ad8d8ff8bc50c74e)
2)使用parted在/dev/sdb上创建GPT分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_07.jpg?sign=1739267762-1dXfG5dU89GGlXBuiiEyxesdN5CFH1lT-0-9b4267b3ec96101a4e578d95855533ad)
3)输入help可以打印命令帮助,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_08.jpg?sign=1739267762-eBgeaKRQTciTgiWaVK8D5SIHKhXWHhS7-0-0edf5690e93c55778d2d72c1d3cf83c1)
帮助内容显示如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_09.jpg?sign=1739267762-xEz0IElfFvslO9Fn0EgGHtOZI4azc6dy-0-968fb56b8d4cadc25f8116c9934f25c8)
4)使用mklabel创建GPT分区,如下所示,mklabel是命令,gpt是分区标签。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_10.jpg?sign=1739267762-x9dMlVV9qkaUnSOuhCuv38gxCXCokIZ8-0-40ca1101c926c75acd3890996c2566d1)
5)在下面的提示中选择Yes。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_11.jpg?sign=1739267762-gG10tyaoeAhWwkuD53TDpUn8daKgCKqK-0-1fc6237a8d1accde5b2a6a0e3835d03a)
6)创建第一个分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_01.jpg?sign=1739267762-QQJZi86QpCGcvyFcRyYVpcle9Zx5Bnzq-0-1162f0f044f05784d428952a68d98498)
上述命令和参数说明如下。
● 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%表示剩下的所有空间。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_02.jpg?sign=1739267762-Aw1KLZOyy2QsRsqqaLHGyar84RWKjbog-0-908b565ce228b8358dec4c76793a0c72)
8)使用命令p打印当前分区信息,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_03.jpg?sign=1739267762-wPRzKeCVSpZr0QJmuAyL3pdy9nuhveKJ-0-44a3c54c813bffecd526289eb7fc4c19)
分区信息显示如下,可以看到/dev/sdb的大小为2190GB、分区表类型为gpt,并且已经创建了两个分区。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_04.jpg?sign=1739267762-B8iTwKbL1neFrFa9wxkZH7e5VZ8wsCSo-0-f118e0f3e1dbdf26b6edadb5ac963f77)
第一个分区的起始位置是1049kB,刚才分区时,设置的参数是2048s,为何两个数字不一样?
2048s的大小是2048*512=1048576B,1048576/1000=1049kB,这里的k是小写,大小为1000,大写的K才是1024。因此,2048s换算成容量单位就是1049kB。
9)如果确定没有问题,使用quit命令退出,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_05.jpg?sign=1739267762-BMOvThrcLyxjszLxlmDdUXjE5r2Yc9fM-0-e14d55e5d8555a09794c97b0f72ae5d8)
如果分区有问题,可以使用rm Number来删除指定的分区,例如rm 2就是删除编号为2的分区。
10)使用lsblk查看分区情况,如下所示,可以看到刚才划分的两个分区sdb1和sdb2。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_01.jpg?sign=1739267762-mJb7RhEX8yUjpZS5dK5M12WkEzJRbQlI-0-b4f44b8f87fce39043751587b3561ce1)
2.格式化操作
格式化操作就是在指定的存储对象上创建文件系统,这个存储对象可以是整个物理块设备、虚拟块设备,也可以是它们的分区,还可以是逻辑卷。
Linux下的格式化命令为mkfs,示例如下。
(1)示例1:在/dev/sdb1上创建Ext4文件系统
创建命令如下,-t ext4表示文件系统类型是Ext4,也可以用其他的文件系统名,如ext2、ext4、xfs等替换ext4,/dev/sdb1是格式化的存储对象。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_02.jpg?sign=1739267762-nzlZb95chyldA2fPat8aMEyTcEM04xs8-0-16c9402d015828abacac84d429419a65)
使用lsblk-f可以查看/dev/sdb1的文件系统类型,如下所示,sdb1的类型为Ext4。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_03.jpg?sign=1739267762-NtPVQ1l01IeA7NfjTpixHwJWTDPRzSgc-0-5aa9ed9f61d627c914bd5f51b4cb525d)
其实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字节。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_04.jpg?sign=1739267762-xeidcicbmjdIDVYSTkbCFqgqNB5DGXzt-0-0b0530f8d26f2c71434fe6e6db497659)
查看/dev/sdb1的Block信息,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_05.jpg?sign=1739267762-EsXMQqO0TU3fDxlJQ6JdJ6kk8gIuYIB3-0-7bb6a5e27f7a23fbb11d19230f2c23fe)
Block的大小信息如下,为1024字节。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_06.jpg?sign=1739267762-rs3icBoFUWcJdSiXPOu4fHBHx35AFgGS-0-cd30574354f1a6c147100f738be7a359)
Ext4还支持clustered block allocation,可以认为是更大的Block,其大小是Block大小*2的幂次方,默认值是16个Block,即2的4次方。
3.挂载操作
挂载操作会将文件系统A同目录B关联起来,这样目录B下的内容就是文件系统A的内容,向目录B写入的文件就会存储到文件系统A上,目录B称为挂载点。
挂载操作的命令为mount,示例如下,将/dev/sdb1挂载到/mnt上,挂载点为/mnt。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/95_01.jpg?sign=1739267762-T2MFNSpVEoWrtJXKKPIovzv09uIoOt3x-0-7109acf99662ee8fb52a460ba0e85679)
使用lsblk可以查看挂载情况如下,sdb1已经挂载到/mnt上了。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/95_02.jpg?sign=1739267762-IGLVhgx6HG2TiPJbT13I3MTa5lWItby7-0-c43250c954b10f20b7b869fef8bb2d15)
注意,mount命令后面跟的参数是/dev/sdb1,它是一个分区,但是在mount操作中,它表示的是这个分区上的文件系统,因为/dev/sdb1如果不格式化,是无法挂载的。