linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结

本文主要是介绍linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

物理设备的命名规则

在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。Linux系统中常见的硬件设备的文件名称如下所示。
常见的硬件设备及其文件名称

硬件设备文件名称
IDE设备/dev/hd[a-d]
SCSI/SATA/U盘/dev/sd[a-p]
软驱/dev/fd[0-1]
打印机/dev/lp[0-15]
光驱/dev/cdrom
鼠标/dev/mouse
磁带机/dev/st0或/dev/ht0

分区

由于现在的IDE设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配),而且硬盘的分区编号也很有讲究:

主分区或扩展分区的编号从1开始,到4结束;
逻辑分区从编号5开始。

国内很多Linux培训讲师以及很多知名Linux图书在讲到设备和分区名称时,总会讲错两个知识点。第一个知识点是设备名称的理解错误。很多培训讲师和Linux技术图书中会提到,比如/dev/sda表示主板上第一个插槽上的存储设备,学员或读者在实践操作的时候会发现果然如此,因此也就对这条理论知识更加深信不疑。但真相不是这样的,/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。大家以后在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备就是这个道理。

第二个知识点是对分区名称的理解错误。很多Linux培训讲师会告诉学员,分区的编号代表分区的个数。比如sda3表示这是设备上的第三个分区,而学员在做实验的时候确实也会得出这样的结果,但是这个理论知识是错误的,因为分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区。

在填了这两个“坑”之后,再来分析一下/dev/sda5这个设备文件名称包含哪些信息,如图6-2所示。
在这里插入图片描述

首先,/dev/目录中保存的应当是硬件设备文件;其次,sd表示是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备,最后,5表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件”。考虑到我们的很多读者完全没有Linux基础,不太容易理解前面所说的主分区、扩展分区和逻辑分区的概念,因此接下来简单科普一下硬盘相关的知识。

正是因为计算机有了硬盘设备,我们才可以在玩游戏的过程中或游戏通关之后随时存档,而不用每次重头开始。硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446字节,分区表为64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。第一个扇区中的数据信息如图6-3所示。
在这里插入图片描述
现在,问题来了—第一个扇区最多只能创建出4个分区?于是为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4个)的需求。当然,就目前来讲大家只要明白为什么主分区不能超过4个就足够了。主分区、扩展分区、逻辑分区可以像图6-4那样来规划。

所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。

在这里插入图片描述

文件系统介绍

用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。

Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。

Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。

XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

就像拿到了一张未裁切的完整纸张那样,我们首先要进行裁切以方便使用,然后在裁切后的纸张上画格以便能书写工整。在拿到了一块新的硬盘存储设备后,也需要先分区,然后再格式化文件系统,最后才能挂载并正常使用。硬盘的分区操作取决于您的需求和硬盘大小;您也可以选择不进行分区,但是必须对硬盘进行格式化处理。接下来刘遄老师再向大家简单地科普一下硬盘在格式化后发生的事情。再次强调,不用刻意去记住,只要能看懂就行了。

日常在硬盘需要保存的数据实在太多了,因此Linux系统中有一个名为super block的“硬盘地图”。Linux并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

该文件的访问权限(read、write、execute);
该文件的所有者与所属组(owner、group);
该文件的大小(size);
该文件的创建或内容修改时间(ctime);
该文件的最后一次访问时间(atime);
该文件的修改时间(mtime);
文件的特殊权限(SUID、SGID、SBIT);
该文件的真实数据地址(point)。

而文件的实际内容则保存在block块中(大小可以是1KB、2KB或4KB),一个inode的默认大小仅为128B(Ext3),记录一个block则消耗4B。当文件的inode被写满后,Linux系统会自动分配出一个block块,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的block块,有下面两种常见情况(以4KB的block大小为例进行说明)。

情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。
情况2:文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)。

计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。图6-5所示为VFS的架构示意图。从中可见,实际文件系统在VFS下隐藏了自己的特性和细节,这样用户在日常使用时会觉得“文件系统都是一样的”,也就可以随意使用各种命令在任何文件系统中进行各种操作了(比如使用cp命令来复制文件)。

在这里插入图片描述

1. fdisk命令

在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数是交互式的,因此在管理硬盘设备时特别方便,可以根据需求动态调整。

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

1.1:fdisk -l 查看磁盘分区信息

先查看下是否有磁盘没有分区
在这里插入图片描述
详细信息解释

[root@localhost ~]# fdisk -l磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c928b设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     4605951     2097152   82  Linux swap / Solaris
/dev/sda3         4605952    41943039    18668544   83  Linux磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3ca78df9设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   8e  Linux LVM
/dev/sdb2         2099200     4196351     1048576   8e  Linux LVM
/dev/sdb3         4196352     6293503     1048576   8e  Linux LVM
[root@localhost ~]# 

1.2: 新增分区

在这里插入图片描述

1.2.1:新增分区解释

第1步:我们首先使用fdisk命令来尝试管理/dev/sdb硬盘设备。在看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:
第2步:输入参数n尝试添加新的分区。系统会要求您是选择继续输入参数p来创建主分区,还是输入参数e来创建扩展分区。这里输入参数p来创建一个主分区:

第3步:在确认创建一个主分区后,系统要求您先输入主分区的编号。主分区的编号范围是1~4,因此这里输入默认的1就可以了。接下来系统会提示定义起始的扇区位置,这不需要改动,我们敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。最后,系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只需要输入+1G即可创建出一个容量为1GB的硬盘分区。

Command (m for help): n
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
Partition 1 of type Linux and of size 1 GiB is set

第4步:再次使用参数p来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起始扇区位置为2048、结束扇区位置为4196351的主分区了。这时候千万不要直接关闭窗口,而应该敲击参数w后回车,这样分区信息才是真正的写入成功啦。
第5步:在上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件。我们可以使用file命令查看该文件的属性,但是刘遄老师在讲课和工作中发现,有些时候系统并没有自动把分区信息同步给Linux内核,而且这种情况似乎还比较常见(但不能算作是严重的bug)。我们可以输入partprobe命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。如果使用这个命令都无法解决问题,那么就重启计算机吧,这个杀手锏百试百灵,一定会有用的。

[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: cannot open (No such file or directory)
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: block special

详细信息描述

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。命令(输入 m 获取帮助):p磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3ca78df9设备 Boot      Start         End      Blocks   Id  System命令(输入 m 获取帮助):n
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519)+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB命令(输入 m 获取帮助):p磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3ca78df9设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码)8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):p磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3ca78df9设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   8e  Linux LVM

1.2: 修改分区类型为8e

t 更改类型, 8e 代表lvm

[root@linuxprobe /]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'Command (m for help): pDisk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcdd05104Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   8e  Linux LVMCommand (m for help): w
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.

1.3:删除分区

在这里插入图片描述

2. 格式化分区

如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。在Linux系统中用于格式化操作的命令是mkfs。这条命令很有意思,因为在Shell终端中输入mkfs名后再敲击两下用于补齐命令的Tab键,会有如下所示的效果:

[root@linuxprobe ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat

对!这个mkfs命令很贴心地把常用的文件系统名称用后缀的方式保存成了多个命令文件,用起来也非常简单—mkfs.文件类型名称。例如要格式分区为XFS的文件系统,则命令应为mkfs.ext4 /dev/sdb1。

[root@linuxprobe dev]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:32768, 98304, 163840, 229376Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

3.挂载和取消挂载

什么是挂载

我们在用惯了Windows系统后总觉得一切都是理所当然的,平时把U盘插入到电脑后也从来没有考虑过Windows系统做了哪些事情,才使得我们可以访问这个U盘的。接下来我们会逐一学习在Linux系统中挂载和卸载存储设备的方法,以便大家更好地了解Linux系统添加硬件设备的工作原理和流程。前面讲到,在拿到一块全新的硬盘存储设备后要先分区,然后格式化,最后才能挂载并正常使用。“分区”和“格式化”大家以前经常听到,但“挂载”又是什么呢?在这里给您一个最简单、最贴切的解释—当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。

mount命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。mount命令中可用的参数及作用如表6-3所示。挂载是在使用硬件设备前所执行的最后一步操作。只需使用mount命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断。而mount 中的-a参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。

参数作用
-a挂载所有在/etc/fstab中定义的文件系统
-t指定文件系统的类型

3.1创建挂载点,并进行挂载

终于完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了。与之相关的步骤也非常简单:首先是创建一个用于挂载设备的挂载点目录;然后使用mount命令将存储设备与挂载点进行关联;最后使用df -h命令来查看挂载状态和硬盘使用量信息。

[root@linuxprobe /]# mkdir -p java
[root@linuxprobe /]# mount /dev/sdb1 /java/
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/sdb1                         976M  2.6M  907M   1% /java

3.2取消挂载

卸载挂载点

$ umount /dev/hda1
$ umount /java
参数可以是设备文件或安装点

[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64

3.3 让挂在永久有效

虽然按照上面的方法执行mount命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说我们需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”(各字段的意义见表6-4)写入到/etc/fstab文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。
用于挂载信息的指定填写格式中,各字段所表示的意义

字段意义
设备文件一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录指定要挂载到的目录,需在挂载前创建好
格式类型指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检若为1则开机后自动进行磁盘自检,为0则不自检

如果想将文件系统为ext4的硬件设备/dev/sdb2在开机后自动挂载到/backup目录上,并保持默认权限且无需开机自检,就需要在/etc/fstab文件中写入下面的信息,这样在系统重启后也会成功挂载。

[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
/dev/sdb2 /backup ext4 defaults 0 0

4.LVM逻辑卷管理器的使用

前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—LVM(逻辑卷管理器)。LVM可以允许用户对硬盘资源进行动态调整。

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图所示。
在这里插入图片描述
在这里插入图片描述

  • 物理存储介质(The physical media)
    这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
  • 物理卷(physicalvolume)
    物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
  • 卷组(Volume Group)
    LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  • 逻辑卷(logicalvolume)
    LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  • PV(physical volume,PV)
    物理卷,它的文件格式不是ext4这些,而是具有LVM管理功能的LVM格式
  • VG(Volume Group,VG)
    卷组,卷组是在PV物理卷的基础上创建的,卷组是由一个或多个物理卷组成的,卷组可以在物理卷PV的基础上扩展和缩小。
  • LV(logical volume,LV)
    逻辑卷,在VG的基础上创建,可以进行格式化、可以创建文件系统、可以被挂载。对于用户相当于一个磁盘分区,不过实际上是在VG上逻辑出来的,可以在VG的基础上实现扩展和缩小,扩展的边界是不能超过VG的。
  • PE(Physical Extents)
    物理块、PE相当于block块,默认是4M,一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,VG是由这些PE块组成,也是VG可以自由扩展和缩小的关键原因。
  • LE(Logical Extent)
    逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应

为了帮助大家理解,刘遄老师来举一个吃货的例子。比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大面团分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。

我们可以通过部署LVM来解决上述问题。部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。常用的部署命令如表7-2所示。

命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce

4.1物理卷的使用

4.1.1创建物理卷

让新sdb的主分区1支持LVM技术。
若是创建物理卷失败,有可能磁盘挂载了(umount /mnt)

[root@linuxprobe /]# pvscanPV /dev/sda2   VG rhel_linuxprobe   lvm2 [19.51 GiB / 0    free]Total: 1 [19.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 0 [0   ]
[root@linuxprobe /]# pvcreate /dev/sdb1
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n] yWiping ext4 signature on /dev/sdb1.Physical volume "/dev/sdb1" successfully created
[root@linuxprobe /]# pvscanPV /dev/sda2   VG rhel_linuxprobe   lvm2 [19.51 GiB / 0    free]PV /dev/sdb1                        lvm2 [1.00 GiB]Total: 2 [20.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 1 [1.00 GiB]

4.1.2删除物理卷

[root@linuxprobe /]# pvremove /dev/sdb1Labels on physical volume "/dev/sdb1" successfully wiped

4.1.3查看物理卷

pvdisplay和pvs命令

[root@linuxprobe /]# pvcreate /dev/sdb1Physical volume "/dev/sdb1" successfully created
[root@linuxprobe /]# pvsPV         VG              Fmt  Attr PSize  PFree/dev/sda2  rhel_linuxprobe lvm2 a--  19.51g    0/dev/sdb1                  lvm2 a--   1.00g 1.00g
[root@linuxprobe /]# pvdisplay--- Physical volume ---PV Name               /dev/sda2VG Name               rhel_linuxprobePV Size               19.51 GiB / not usable 3.00 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              4994Free PE               0Allocated PE          4994PV UUID               vgri2e-8lV9-46Lw-F6tk-D9hQ-JkrR-c4xzP1"/dev/sdb1" is a new physical volume of "1.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb1VG NamePV Size               1.00 GiBAllocatable           NOPE Size               0Total PE              0Free PE               0Allocated PE          0PV UUID               2Zej1y-de1v-SfhX-5jId-qNiX-RngU-6Qu69I

4.2卷组

4.2.1创建卷组

  • vgcreate 命令,创建卷组
  • 格式:vgcreate vg1 /dev/sdb1 /dev/sdb2 两个物理卷创建一个卷组“vg1”

把名字为/dev/sdb1的物理卷加入到卷组中,并且卷组命名为javavg

[root@linuxprobe /]# vgcreate javavg /dev/sdb1Volume group "javavg" successfully created
[root@linuxprobe /]# vgsVG              #PV #LV #SN Attr   VSize    VFreejavavg            1   0   0 wz--n- 1020.00m 1020.00mrhel_linuxprobe   1   2   0 wz--n-   19.51g       0
[root@linuxprobe /]# vgdisplay javavg--- Volume group ---VG Name               javavgSystem IDFormat                lvm2Metadata Areas        1Metadata Sequence No  1VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                1Act PV                1VG Size               1020.00 MiBPE Size               4.00 MiBTotal PE              255Alloc PE / Size       0 / 0Free  PE / Size       255 / 1020.00 MiBVG UUID               45kAcN-flU1-0n2a-BylI-Xrn2-vDTi-CEzc0T

4.2.2查看卷组

vgdisplay和vgs命令

[root@linuxprobe /]# vgsVG              #PV #LV #SN Attr   VSize    VFreejavavg            1   0   0 wz--n- 1020.00m 1020.00mrhel_linuxprobe   1   2   0 wz--n-   19.51g       0
[root@linuxprobe /]# vgdisplay javavg--- Volume group ---VG Name               javavgSystem IDFormat                lvm2Metadata Areas        1Metadata Sequence No  1VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                1Act PV                1VG Size               1020.00 MiBPE Size               4.00 MiBTotal PE              255Alloc PE / Size       0 / 0Free  PE / Size       255 / 1020.00 MiBVG UUID               45kAcN-flU1-0n2a-BylI-Xrn2-vDTi-CEzc0T

4.2.3删除卷组

删除逻辑卷的时候可以只写卷组的名称,不需要设备的绝对路径
删除名字为storage的卷组

[root@linuxprobe /]# vgremove storageVolume group "storage" successfully removed
[root@linuxprobe /]# pvdisplay--- Physical volume ---PV Name               /dev/sda2VG Name               rhel_linuxprobePV Size               19.51 GiB / not usable 3.00 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              4994Free PE               0Allocated PE          4994PV UUID               vgri2e-8lV9-46Lw-F6tk-D9hQ-JkrR-c4xzP1"/dev/sdb1" is a new physical volume of "1.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb1VG NamePV Size               1.00 GiBAllocatable           NOPE Size               0Total PE              0Free PE               0Allocated PE          0PV UUID               8o6Fvh-SOI3-U1Q2-gRFZ-eof4-XgOC-jt33th

4.3逻辑卷

4.3.1创卷逻辑卷

lvcreate命令,创建逻辑卷

  • -L 参数,指定逻辑卷的大小
  • -n 参数,指定逻辑卷的名称,并划分出来
[root@linuxprobe /]# lvcreate -L 900M -n javalv javavgLogical volume "javalv" created
[root@linuxprobe /]# lvsLV     VG              Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convertjavalv javavg          -wi-a----- 900.00mroot   rhel_linuxprobe -wi-ao----  17.51gswap   rhel_linuxprobe -wi-ao----   2.00g
[root@linuxprobe /]# lvdisplay--- Logical volume ---LV Path                /dev/rhel_linuxprobe/swapLV Name                swapVG Name                rhel_linuxprobeLV UUID                hzHRjg-GD1i-0mff-K3QN-AlaN-dsSv-cId1zLLV Write Access        read/writeLV Creation host, time localhost, 2019-09-18 08:16:52 +0800LV Status              available# open                 2LV Size                2.00 GiBCurrent LE             512Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:0--- Logical volume ---LV Path                /dev/rhel_linuxprobe/rootLV Name                rootVG Name                rhel_linuxprobeLV UUID                h7VYfL-xiF5-Wt2w-HaB9-Qfpp-7MM9-38xOSsLV Write Access        read/writeLV Creation host, time localhost, 2019-09-18 08:16:53 +0800LV Status              available# open                 1LV Size                17.51 GiBCurrent LE             4482Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:1--- Logical volume ---LV Path                /dev/javavg/javalvLV Name                javalvVG Name                javavgLV UUID                ZebZis-KjJi-2GUx-3e5Q-f2Gl-L0Tp-JVVZ1dLV Write Access        read/writeLV Creation host, time linuxprobe.com, 2020-06-07 16:36:05 +0800LV Status              available# open                 0LV Size                900.00 MiBCurrent LE             225Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     8192Block device           253:2

4.3.2格式化逻辑卷

mkfs.ext4 /dev/javavg/javalv
若格式化xfs文件系统,在后续的扩容或缩容会受到一定的影响

[root@linuxprobe /]# mkfs.ext4 /dev/javavg/javalv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
57600 inodes, 230400 blocks
11520 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=236978176
8 block groups
32768 blocks per group, 32768 fragments per group
7200 inodes per group
Superblock backups stored on blocks:32768, 98304, 163840, 229376Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

4.3.2查看逻辑卷

lvdisplay和lvs命令

[root@linuxprobe /]# lvdisplay /dev/javavg/javalv--- Logical volume ---LV Path                /dev/javavg/javalvLV Name                javalvVG Name                javavgLV UUID                ZebZis-KjJi-2GUx-3e5Q-f2Gl-L0Tp-JVVZ1dLV Write Access        read/writeLV Creation host, time linuxprobe.com, 2020-06-07 16:36:05 +0800LV Status              available# open                 0LV Size                900.00 MiBCurrent LE             225Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     8192Block device           253:2[root@linuxprobe /]# lvsLV     VG              Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convertjavalv javavg          -wi-a----- 900.00mroot   rhel_linuxprobe -wi-ao----  17.51gswap   rhel_linuxprobe -wi-ao----   2.00g

4.3.3删除逻辑卷

删除逻辑卷的时候需要执行逻辑卷路径
lvremove /dev/javavg/javalv

[root@linuxprobe /]# lvremove /dev/javavg/javalv
Do you really want to remove active logical volume javalv? [y/n]: yLogical volume "javalv" successfully removed
[root@linuxprobe /]# lvsLV   VG              Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convertroot rhel_linuxprobe -wi-ao---- 17.51gswap rhel_linuxprobe -wi-ao----  2.00g

4.4挂载逻辑卷

mount命令,挂载磁盘

  • 格式:mount /dev/javavg/javalv /java/ 挂载到 /java/ 目录下
[root@linuxprobe /]# mount /dev/javavg/javalv /java
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv          93M  1.6M   85M   2% /java

这里会发现,明明mount的是/dev/javavg/javalv 这个文件,显示的却是/dev/mapper/javavg-javalv这个文件,下面会看到它们指向的是同一个文件 /dm-2 文件

[root@linuxprobe /]# ls -l /dev/javavg/javalv
lrwxrwxrwx. 1 root root 7 Jun  7 16:49 /dev/javavg/javalv -> ../dm-2
[root@linuxprobe /]# ls -l /dev/mapper/javavg-javalv
lrwxrwxrwx. 1 root root 7 Jun  7 16:49 /dev/mapper/javavg-javalv -> ../dm-2

永久挂载

虽然按照上面的方法执行mount命令后就能立即使用文件系统了,但是系统在重启后挂载就会失效,也就是说我们需要每次开机后都手动挂载一下。如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式"设备文件,挂载目录,文件类型,权限选项,是否备份,是否自检"(各字段的意义见表)写入到/etc/fstab文件中。这个文件包含着挂载所需要的诸多信息项目,一点配置好之后就能一劳永逸了。
如果想将文件系统为ext4的逻辑卷在开机后自动挂载所在目录上,并保持默认权限且无需开机自检,就需要在/etc/fstab文件中写入如下信息,这样在系统重新启动后也会挂载成功。
在这里插入图片描述

在这里插入图片描述

4.5在挂在点创建文件夹并创建文件

[root@linuxprobe /]# cd java
[root@linuxprobe java]# mkdir -p test
[root@linuxprobe java]# cd test
[root@linuxprobe test]# echo "hello world" >> test1.txt
[root@linuxprobe test]# cat test1.txt
hello world
[root@linuxprobe test]#

4.5 查看一个或多个文件占用了多大的硬盘空间

[root@linuxprobe test]# du -sh /java
17K	/java
[root@linuxprobe test]# du -sh /java/test/test1.txt
2.0K	/java/test/test1.txt

4.6 查看逻辑卷剩余大小

df -h

[root@linuxprobe test]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv          93M  1.6M   85M   2% /java

4.7 取消挂载,并且扩容逻辑卷

4.7.1 取消挂载

[root@linuxprobe ~]# umount /java
[root@linuxprobe ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64

4.8 重新设置逻辑卷大小

4.8.1 逻辑卷的扩容

  • umout /java 取消挂载
  • lvextend -L 900M /dev/javavg/javalv 扩容至900M
  • e2fsck -f /dev/javavg/javalv 检查磁盘完整性
  • resize2fs /dev/javavg/javalv 重置磁盘容量
  • !mount 重新挂载
[root@linuxprobe /]# lvsLV     VG              Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convertjavalv javavg          -wi-ao---- 100.00mroot   rhel_linuxprobe -wi-ao----  17.51gswap   rhel_linuxprobe -wi-ao----   2.00g
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv          93M  1.6M   85M   2% /java
[root@linuxprobe /]# umount /java
[root@linuxprobe /]# lvextend -L 900M /dev/javavg/javalvExtending logical volume javalv to 900.00 MiBLogical volume javalv successfully resized
[root@linuxprobe /]# e2fsck -f /dev/javavg/javalv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/javavg/javalv: 13/25688 files (7.7% non-contiguous), 8899/102400 blocks
[root@linuxprobe /]# resize2fs /dev/javavg/javalv
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/javavg/javalv to 921600 (1k) blocks.
The filesystem on /dev/javavg/javalv is now 921600 blocks long.[root@linuxprobe /]# !mount
mount /dev/javavg/javalv /java
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv         869M  2.5M  817M   1% /java

4.8.2 逻辑卷的缩小

  • umout /java 取消挂载
  • e2fsck -f /dev/javavg/javalv 检查磁盘完整性
  • resize2fs /dev/javavg/javalv 100M 重置磁盘容量
  • lvreduce -L 100M /dev/javavg/javalv 缩小至100M
  • !mount 重新挂载
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv         869M  2.5M  817M   1% /java
[root@linuxprobe /]#
[root@linuxprobe /]#
[root@linuxprobe /]#
[root@linuxprobe /]# clear
[root@linuxprobe /]# umount /java
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
[root@linuxprobe /]# e2fsck -f /dev/javavg/javalv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/javavg/javalv: 13/223288 files (7.7% non-contiguous), 34831/921600 blocks
[root@linuxprobe /]# resize2fs /dev/javavg/javalv 100M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/javavg/javalv to 102400 (1k) blocks.
The filesystem on /dev/javavg/javalv is now 102400 blocks long.[root@linuxprobe /]# lvreduce -L 100M /dev/javavg/javalvWARNING: Reducing active logical volume to 100.00 MiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce javalv? [y/n]: yReducing logical volume javalv to 100.00 MiBLogical volume javalv successfully resized
[root@linuxprobe /]# !mount
mount /dev/javavg/javalv /java
[root@linuxprobe /]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/rhel_linuxprobe-root   18G  6.2G   12G  35% /
devtmpfs                          905M     0  905M   0% /dev
tmpfs                             914M   92K  914M   1% /dev/shm
tmpfs                             914M  8.9M  905M   1% /run
tmpfs                             914M     0  914M   0% /sys/fs/cgroup
/dev/sda1                         497M  119M  379M  24% /boot
/dev/sr0                          3.5G  3.5G     0 100% /run/media/linuxprobe/RHEL-7.0 Server.x86_64
/dev/mapper/javavg-javalv          93M  1.6M   85M   2% /java

4.9 重新设置卷组的大小

4.9.1 卷组的扩容

  • 先准备好分区
  • 格式化分区
  • 把该分区制作成物理卷
  • vgextend 卷组名称 物理卷名称 — vgextend vg1 /dev/sdb5 将物理卷添加到卷组中(扩容卷组)
    先扩容卷组,再扩容逻辑卷

4.10 xfs文件系统扩容

xfs文件系统扩容
xfs文件系统不支持缩容,只能扩容

在xfs文件系统扩容的时候,不需要卸载,可直接扩容

xfs文件系统扩容,几大步骤:

首先卸载,格式化成xfs文件系统,然后再次挂载
设置逻辑卷的大小,lvresize -L 300M /dev/vg1/lv1
xfs文件系统执行这条命令执行xfs_growfs /dev/vg1/lv1,便可看到扩容成功

[root@hf-01 ~]# !umount    先取消挂载
umount /mnt/
[root@hf-01 ~]# mkfs.xfs -f /dev/vg1/lv1    格式化成xfs文件系统
meta-data=/dev/vg1/lv1           isize=256    agcount=4, agsize=6400 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@hf-01 ~]# !mount        再次挂载
mount /dev/vg1/lv1 /mnt/
[root@hf-01 ~]# ls /mnt/        这里会看到之前的文件目录不存在了
[root@hf-01 ~]# touch /mnt/233.txt
[root@hf-01 ~]# echo "aaa" > !$
echo "aaa" > /mnt/233.txt
[root@hf-01 ~]# cat !$
cat /mnt/233.txt
aaa
[root@hf-01 ~]# lvs    查看逻辑卷大小LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertlv1  vg1 -wi-ao---- 100.00m                                                    
[root@hf-01 ~]# lvresize -L 300M /dev/vg1/lv1        扩容到300M(这里不需要先卸载,直接扩容)Size of logical volume vg1/lv1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents).Logical volume vg1/lv1 successfully resized.
[root@hf-01 ~]# lvs        会发现逻辑卷扩容到300MLV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertlv1  vg1 -wi-ao---- 300.00m                                                    
[root@hf-01 ~]# df -h        但是查看的时候,看看到还是100M(还需执行命令)
文件系统             容量  已用  可用 已用% 挂载点
/dev/sda3             18G  2.4G   16G   14% /
devtmpfs             489M     0  489M    0% /dev
tmpfs                494M     0  494M    0% /dev/shm
tmpfs                494M  6.7M  487M    2% /run
tmpfs                494M     0  494M    0% /sys/fs/cgroup
/dev/sda1            197M   75M  123M   38% /boot
/dev/mapper/vg1-lv1   97M  5.2M   92M    6% /mnt
[root@hf-01 ~]# xfs_growfs /dev/vg1/lv1        执行这条运行,xfs文件系统才是成功扩容
meta-data=/dev/mapper/vg1-lv1    isize=256    agcount=4, agsize=6400 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 25600 to 76800
[root@hf-01 ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
/dev/sda3             18G  2.4G   16G   14% /
devtmpfs             489M     0  489M    0% /dev
tmpfs                494M     0  494M    0% /dev/shm
tmpfs                494M  6.7M  487M    2% /run
tmpfs                494M     0  494M    0% /sys/fs/cgroup
/dev/sda1            197M   75M  123M   38% /boot
/dev/mapper/vg1-lv1  297M  5.5M  292M    2% /mnt

4.11 实验问题

  • 逻辑卷的扩容和缩容操作都需要先取消逻辑卷与目录的挂载关联;扩容操作是先扩容后检查文件系统完整性,而缩容操作为了保证数据的安全,需要先检查文件系统完整性再缩容。
  • LVM的删除顺序是一次移除逻辑卷,卷组,物理卷的
  • 在做实验的时候,写入一行配置到/etc/fstab中去,在做完 lvm实验之后,reboot重启之后,会发现进入不了系统(如下图类似的界面)
    在这里插入图片描述
    本来应该是显示中文,但是在vm终端下,中文不支持,所以看到几个小方块,就是让我们输入root用户密码,
    在生产环境出现类似问题,往往是磁盘挂载出现问题,不能正常挂载到挂载点
    输入root密码,就可进入界面(和正常登录系统类似)
    进入vi /etc/fstab中删除/dev/sdb这一行(快捷键dd),然后保存退出
    再次重启,会恢复正常

这篇关于linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705859

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip