Linux之LVM

准备工作

首先,使用命令

df - TH

查看挂载情况
挂载信息
挂载之前我们看一下磁盘的情况:

fdisk -l

加盘前硬盘信息
加上新硬盘
重启虚拟机进入终端查看磁盘挂载情况:

fdisk -l

挂载新盘后的硬盘信息
如图所示,多出来了一块107.4G的盘。直接用是不行的,需要先进行格式化,并且创建文件系统,根据需求什么文件系统都可以,例如xfs,ext4等等。我这里就以xfs为例。
创建文件系统
如图,sdb被成功格式化。

LVM操作

创建pv

使用命令

pvcreate /dev/sdb

进行创建,其中sdb不一定是sdb,要根据设备实际情况来,可能你的机器本身有3块盘,那此时你的新盘多半是sdd,如果你的机器本身有5块盘,那此时你的新盘多半是sdf。
执行后会有如图的提示
擦去信息提示
提示你继续下去这个盘上的数据将会丢失,一般创建pv时都是新盘,或者原数据也是不需要保留的,都选y即可。
操作完成

创建vg

使用命令

vgcreate myvg /dev/sdb

进行创建,和上面一样,sdb不是固定的。testvg是你vg的名字,可以是myvg,可以是testvg,甚至可以是abc,这个是无所谓的。
创建vg

检查vg

使用命令

vgdisplay

可以查看本机内的所有vg。下面那个Name为centos的是系统创建的。
vg信息
注:这里要解释一下,为什么VG Size是"<100.00 GiB",这是什么意思呢?
请读者注意,下面写了PE Size和Total PE,我们可以算一下:25599块*4MiB=102396MiB,而102396MiB/1024=99.996094GiB,很接近100G。
这是由于vg是由pe块组成的,而pe块单位大小为4MB,所以当vg大小不是4MB的整数倍时,就会出现这种“差一点点”的情况,我特意创建了一个新块,大小为整1G,请读者看:
4M整数倍
当pe块的数量合适的时候,vg的大小就会是一个整数了。

扩容vg

先再加一块硬盘,并创建pv
流程和上面的一样,我这里加了一块50G的新盘,按顺序来到了sdc。
添加新硬盘
命令参考:

fdisk -l
mkfs -t xfs /dev/sdc
pvcreate /dev/sdc

完成后可以查看一下pv信息,命令是

pvdisplay

pv信息
然后进行扩展,把这块新pv加入到vg

vgextend myvg /dev/sdc

vg扩展
此时已经完成,可以再次使用下面的语句检查一下

vgdisplay

vg信息

创建lv

命令如下

lvcreate -L 30G -n mylv myvg

解释一下:
lvcreate 创建lv
-L 30G 指定大小为30G
-n mylv 指定lv名字为mylv
myvg 从myvg里拿空间
同样的,mylv也是自己随便写的,也可以是test,aaa,甚至helloworld
创建lv

检查lv

使用命令

lvdisplay

lv信息
如图,第一个lv就是刚刚创建的。

给lv扩容

命令是:

lvextend -L +3G /dev/myvg/mylv

效果:从myvg这个vg拿3G空间给mylv
lv扩容
看图中提示可知,空间已经从30G扩大到33G了,le块数从7680变成了8448
可以再使用display查看一下
在这里插入图片描述

在vg基础上创建另一个lv

lvcreate -L 20G -n mylv2 myvg

新lv
再次查看lv信息
lv信息
可知新的lv已经创建成功了

拿取全部空间

可以在空间大小处使用+100%free,这样就不用去计算到底还有多少空间,所有空闲空间都会被分配过来。

lvextend -l +100%free /dev/myvg/mylv2

拿取全部空间

格式化lv

在使用lv前,需要先以某种文件系统来格式化这块空间,以xfs为例,命令如下:

mkfs.xfs /dev/myvg/mylv
mkfs.xfs /dev/myvg/mylv2

格式化

临时挂载

假设我们要将mylv挂载到/nginxdata目录下,mylv2挂载到/tomcatdata目录下,便可使用命令如下:

mount /dev/myvg/mylv /nginxdata
mount /dev/myvg/mylv2 /tomcatdata

执行后没有任何提示,效果如图:
临时挂载完成
挂载前要确保有这两个目录,没有可以自己创建(命令:mkdir /nginxdata && mkdir /tomcatdata)或者挂载到其他地方。
挂载后使用命令

df -TH

查看挂载情况
挂载情况
如图最后两项,已经挂载完成了。

持久化挂载

挂载需要持久化,去配置开机自动挂载,重启也不会影响挂载了。
需要手动打开一个配置文件,自己添加一些语句

vi /etc/fstab

用上述命令打开配置文件

/dev/myvg/mylv /nginxdata xfs defaults 0 0
/dev/myvg/mylv2 /tomcatdata xfs defaults 0 0

添加到最后即可。
挂载持久化

挂载持久化的拓展

在fstab文件中加上那两句,我们lvm工作就完成了,但是我们要知其然知其所以然,为什么这么写,这是什么意思?
不难看出,这个命令被分成了6块,其实他们分别叫:fs_spec、fs_file、fs_type、fs_options、fs_dump和fs_pass.咱们依次解释:

  1. 被挂载的盘,即你新做的lvm。
  2. 挂载到哪里,即挂载点。
  3. 文件格式,常见的有ext2,ext3,ext4,xfs,swap,tmpfs,proc等。
  4. 挂载选项,一般默认defaults,满足绝大部分情况,目前我已知的可选项还有
命令含义
exec是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行
noexec二进制文件不允许执行
user允许任何用户挂载设备
nouser只允许root用户挂载。这是默认设置
ro挂载为只读权限
rw挂载为读写权限
auto在启动或在终端中输入mount -a时自动挂载
noauto设备(分区)只能手动挂载
  1. 备份指令,在 Linux 当中,可以利用 dump 这个指令来进行系统的备份。而 dump 指令则会针对 /etc/fstab 的设定值,去选择是否要将该 partition 进行备份的动作。0 代表不要做 dump 备份, 1 代表要进行 dump 的动作。 2 也代表要做 dump 备份动作, 不过,该 partition 重要度比 1 小。
  2. 检验指令,开机的过程中,系统预设会以 fsck 检验我们的 partition 内的 filesystem 是否完整 (clean)。 不过,某些 filesystem 是不需要检验的,例如虚拟内存 swap ,或者是特殊档案系统, 例如 /proc 与 /sys 等等。所以,在这个字段中,我们可以设定是否要以 fsck 检验该 filesystem 。和上面的差不多,0 是不要检验, 1 是要检验, 2 也是要检验,不过 1 会比较早被检验, 一般来说,根目录设定为 1 ,其它的要检验的 filesystem 都设定为 2 就可以。

重启检查

这一步不是必须的,不过如果是自己练手,建议重启一下试试,可能会有惊喜。
重启后的挂载情况
如图,我这里没有什么问题。

惊喜

惊喜
那么什么是惊喜呢?
挂载硬盘时,如果在fstab中使用盘分区名(比如文中用到的sdb,sdc等硬盘)标识文件系统,如果盘的挂载顺序变更(这是可能发生的,Linux先读取到哪块盘,哪块就是sda),盘分区可能不会被正确地挂载(mount)到原来的挂载点。报错信息会如下图所示。
注意:这里和上面的挂载LVM不是一回事,是使用mount挂硬盘,其实是额外的内容
报错信息
那应该怎么做来避免呢?
很简单,使用uuid来挂载。

拓展:UUID是国际标准化组织(ISO)提出的一个概念。UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。这样一来,客户端在查找一个服务时,只需要在它的服务查找请求中指出与某类服务(或某个特定服务)有关的UUID,如果服务的提供者能将可用的服务与这个UUID相匹配,就返回一个响应。
UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。UUID可以被任何人独立创建,并按需发布。UUID没有集中管理机构,因为它们是不会被复制的独特标识符。属性协议允许设备使用UUID识别属性类>型,从而不需要用读/写请求来识别它们的本地句柄。

说人话:设备的身份证号。

以uuid挂载

查看硬盘uuid,这里我新加入了一块sdd(图中最后一项)

blkid

这里我新加入了一块sdd

得到数据后再次打开fstab,更改挂载信息

vi /etc/fstab

以UUID挂载sdd

再次重启,检查挂载情况(图中正数第6项)

df -TH

UUID挂载sdd

如此,顺序就不会因为sda和sdb的顺序发生改变而出现问题。
有人可能会疑问,那创建lvm时要不要使用uuid呀?其实是不用,因为盘符的变化只在boot或者reboot时出现,你操作到一半,盘符是不会变化的。
那又有人有疑问了,你创建lvm不也用的/etc/sdb,/etc/sdc这样的路径吗,也没有使用uuid呀!会不会有隐患呢?
有人可能会说,哪有那么多问题,是谁有这样的疑问?其实是我。我百思不得其解,找遍了中文互联网,全是复制粘贴的没意义的口水话,最后我终于在红帽的LVM官方手册里终于找到了回答!

手册路径:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_logical_volumes/index
PV具体部分

翻译一下:将块设备初始化为物理卷后LVM会在接近设备起始的位置放置一个标签。LVM 标签为物理设备提供正确的标识和设备排序。未标记的非 LVM 设备可以在重新引导后更改名称,具体取决于系统在启动过程中发现它们的顺序。LVM 标签在重新引导时具有持久性并在整个集群中可用。LVM 标签可将该设备识别为 LVM 物理卷。它包含一个随机唯一标识符,即物理卷的 UUID。它还以字节为单位保存块设备的大小,并记录 LVM 元数据存储在该设备中的位置。默认情况下,LVM 标签是放在第二个 512 字节扇区。您可以在创建物理卷时将标签放在前 4 个扇区的任意一个扇区,从而覆盖此默认设置。如果需要,LVM 卷可与其它使用这些扇区的用户共同存在。

所以,只要PV被创建好了,就不必再担心盘符的变化,虽然我们指定的是本次开机的盘符路径,但是LVM系统相当于还是使用的UUID进行的绑定,嗯,很科学的做法。

  • 36
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值