![Linux快速入门与实战:基础知识、容器与容器编排、大数据系统运维](https://wfqqreader-1252317822.image.myqcloud.com/cover/769/43806769/b_43806769.jpg)
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=1739135243-nkougsnlLf5fXHf1BPQcZBANKoDqPHu1-0-f5f30773944f03d54369deb1bd54a1de)
图3-22 新增虚拟硬盘信息图
2.分区操作
(1)查看分区
系统重启后,使用下面的命令查看分区信息。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/90_02.jpg?sign=1739135243-BJEwsymO97Rc0zHeXeJ949iHrkl8PR3y-0-7375c6ad6ea380d81aadfdc8e3635471)
上述命令执行后,显示结果如下,有三个设备。
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=1739135243-8mHeu9RGgxi2g879wM5ZOMeM1XT6LEPG-0-bad8a51546204d8e40c215fdd58c9dce)
(2)使用fdisk分区
1)使用fdisk对新增的硬盘/dev/sdb分区,它可以创建MBR分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_02.jpg?sign=1739135243-WQHu3nwhsmtZDmDVYX7tYoWjMlSESaPy-0-eb3e2efa70fe527939e916cc4026bb8b)
上述命令执行后,会进入fdisk的交互界面,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_03.jpg?sign=1739135243-57zvLxQUbMXnJRAF2TyZpI43imsOqxjE-0-bf8837c4d8950c9bc1dfa38778e43a7b)
2)冒号(:)后面输入fdisk内部命令,例如查看帮助的命令m,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_04.jpg?sign=1739135243-FGfw8nMf5MpedbbntBtTLNMd9Zsc52YG-0-cd6950b10fe233edf2449a64ced98844)
此时,fdisk会打印其使用帮助,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_05.jpg?sign=1739135243-6R5fWFqwid0zZLWtuFBPlqdFfCfNwzyE-0-a192f73d6a3e75580c7c5f8719ba769c)
命令p可以查看硬盘已有的分区。
如果硬盘上已经有分区了,可以使用命令d来删除已有的分区。
如果不想对分区做任何操作,可以使用命令q退出fdisk。
3)输入命令n,创建第一个分区,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_06.jpg?sign=1739135243-nM56D6zCWAkPegE5VOhDQdIx2pvZluEM-0-676f6a844543c7772d412e553aecef4b)
4)上述命令执行后,fdisk会提示待创建分区的类型,是主分区,还是扩展分区?分区有两种类型:主分区和扩展分区。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_07.jpg?sign=1739135243-aSb7iWJnDIWn63RH0wfEsWJ0vzmoVdwg-0-59dcebc36ce8810d213e7bca310f612e)
5)先创建一个主分区,命令如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_08.jpg?sign=1739135243-O2U7g3kwabQ75gXZSk0KslSWR3KBB4y8-0-3857f0049828357031b5c435403cdd12)
6)按〈Enter〉键后,fdisk会提示选择分区号,直接按〈Enter〉键,使用默认编号1。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/91_09.jpg?sign=1739135243-ORJI5FrsDH95t3pFrhuWWGZmAX7E9Dpa-0-2f5eaec5c3eb6c32be45e4d33532ffcc)
7)选择分区的第一个扇区编号,按〈Enter〉键选择默认即可。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_01.jpg?sign=1739135243-kupAHeAWlTgvqGVswqgVVKIZehGkt3zk-0-40e1be3a806ace83a828bd9bffcc192a)
8)确定分区大小,如下所示,+100G表示分区的大小为100GB,+100表示大小为100个扇区,+100K表示分区大小为100KB,+100M表示分区大小为100MB,+100T、+100P以此类推。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_02.jpg?sign=1739135243-w4ZNGyMCgfWpNzmXwUpGp1OcQi3gqlWc-0-754c3017f3727d22eb0fb519689eb554)
9)按〈Enter〉键后,如果fdisk出现下面的提示,选择Yes。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_03.jpg?sign=1739135243-Ao2jvkc5k82GlzcWTrWqgmfQTBY94hNI-0-cc7f9ec237065daf858e81673d90ff39)
10)此时,第一个主分区就设置好了,输入w,保存并退出,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_04.jpg?sign=1739135243-zaPjEEvqGhZUZV4zWfFkSjRIgS4gvu0D-0-4506f435a68dd6a231b3ee067859d929)
11)使用lsblk命令查看分区,可以看到sdb下面新增了一个分区sdb1,大小为100G,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_05.jpg?sign=1739135243-5C2fn068rtXYu92Eh4wwzjIHSwjbfvd9-0-9c81d2e720730154c7d90a4e20e670a9)
(3)使用parted分区
1)在使用parted分区之前,要先使用fdisk删除上小节所创建的分区/dev/sdb1,删除后的分区应该如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_06.jpg?sign=1739135243-5FLxr5xdO2A81oLY0cZcr2TKf1FiLo7Z-0-7427b5b776a3518d7883963a1a333f28)
2)使用parted在/dev/sdb上创建GPT分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_07.jpg?sign=1739135243-SajLtLmt1GyaJVzU5bDMO8RHQgoCE29v-0-118007ed5087ee62384fce59b367189d)
3)输入help可以打印命令帮助,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_08.jpg?sign=1739135243-WnrwHLRvZQWRJm0xX15aC9kd4l56apYC-0-120769163a8375099aa28cf2dc3aa6f3)
帮助内容显示如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_09.jpg?sign=1739135243-272YLerqByOJgI9wCw9V20OXqeeKpgDA-0-bb25639d0dcfe161abf376f9f3cf9489)
4)使用mklabel创建GPT分区,如下所示,mklabel是命令,gpt是分区标签。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_10.jpg?sign=1739135243-X1vh1Lk5F1bmrmaKrHW8yuanJwr4v82y-0-07f8090e17a2ba4b969385ba6357c580)
5)在下面的提示中选择Yes。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/92_11.jpg?sign=1739135243-LSXD0UK8xi6qHNimvuvEhzQJv3sFF8v4-0-14e8cdbaf9ec3ae7d93b836fe6eec863)
6)创建第一个分区,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_01.jpg?sign=1739135243-3RUdHAS4iILN6gvsDJWelHpe61PFYutM-0-9adf2574c3bde3a44bd7f25f0b7868ee)
上述命令和参数说明如下。
● 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=1739135243-v0p4l1Hzf3VGzuqtxq6rLTcUzauxteyX-0-5da2ada918745d17a8d86c40cf7333b9)
8)使用命令p打印当前分区信息,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_03.jpg?sign=1739135243-M2qVyzJSErlVFX1yxhkX30ijbWn3yjTY-0-2c8921c014802d58905e0d32feafefc1)
分区信息显示如下,可以看到/dev/sdb的大小为2190GB、分区表类型为gpt,并且已经创建了两个分区。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/93_04.jpg?sign=1739135243-KrNw2rWguKpYuOiubLvMoJp0uB20TFKL-0-173604831a4eff5489fb4a7befad6d07)
第一个分区的起始位置是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=1739135243-F3YgKuUxqXsaaPmiLkloVenitI31WGO5-0-827fa62ced8f92063c930dd54771b21f)
如果分区有问题,可以使用rm Number来删除指定的分区,例如rm 2就是删除编号为2的分区。
10)使用lsblk查看分区情况,如下所示,可以看到刚才划分的两个分区sdb1和sdb2。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_01.jpg?sign=1739135243-V7DrAvt864arCIna87lfmE4SiZfCPDHN-0-838f9707c5af08c81264f77df66fc6cf)
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=1739135243-iZUGe3Na0dhtLztPcizMaH235cUuDKgU-0-0580d651922518cd2ad688ad827bb533)
使用lsblk-f可以查看/dev/sdb1的文件系统类型,如下所示,sdb1的类型为Ext4。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_03.jpg?sign=1739135243-9oTfy7o1oS6jqJeZS4JdfbjD1ZoP0Uhh-0-317f7f8701911493d25872770c6c1402)
其实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=1739135243-RE0VV2x8P6H8v38nUmKFcwSGdM898mI1-0-59c72a2437a17e4f401fddd48a842287)
查看/dev/sdb1的Block信息,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_05.jpg?sign=1739135243-6lUqmxu0Ys1nWvRQ9zrJi4ryy7IsH2bk-0-3489e41749ea98f68e74b1859c56b874)
Block的大小信息如下,为1024字节。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/94_06.jpg?sign=1739135243-2kDzYupSlu1V3828ak9tM0FGid5vliw7-0-902f3262b4a90ed7a4f332f9419f8c02)
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=1739135243-tFCJWRO63Xw2s2ETE18pfZhIxHxZw6Gj-0-f27f79ed5f449512232aa57f3134b2c6)
使用lsblk可以查看挂载情况如下,sdb1已经挂载到/mnt上了。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/95_02.jpg?sign=1739135243-Peid67ZCFcdfSW4VeYs36mY3qfuZOpti-0-6bef65c7865fa7e5463a6a7a9269e8b5)
注意,mount命令后面跟的参数是/dev/sdb1,它是一个分区,但是在mount操作中,它表示的是这个分区上的文件系统,因为/dev/sdb1如果不格式化,是无法挂载的。