pvcreate 创建物理卷

pvcreate 命令用于创建物理卷,即创建PV,这是lvm技术里常用的一个命令,其语法格式如下:

#可以直接将一块磁盘或磁盘分区进行格式为pv,直接将磁盘格式化为pv没必要分区
pvcreate [option] /dev/sdb  /dev/sdc1	

常用参数:
无,一般可不用写参数。

演示示例:

[root@localhost ~]# pvcreate  /dev/sdb /dev/sdc 				#直接将磁盘或某个分区转化为物理卷,
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs											#查看有哪些物理卷
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  11.00g 4.00m
  /dev/sdb      lvm2 ---   8.00g 8.00g
  /dev/sdc      lvm2 ---   6.00g 6.00g

vgcreate 创建卷组

vgcreate 命令用于创建卷组,这是lvm技术中最常用的一个命令,语法格式如下:

vgcreate [参数]  卷组名    物理卷1 物理卷2 .....

常用参数:

-s   指定物理卷中PE的大小,PE可取值 4M(默认值)、8M、16M、32M、64M

演示示例:

[root@localhost ~]# vgcreate my_data /dev/sdb /dev/sdc	#创建一个名为my_data的卷组并将sdb和sdc物理卷加入其中,PE的大小默认为4M

lvcreate 创建逻辑卷

lvcreate 命令用于创建逻辑卷,这是lvm技术中最常用的命令,其语法格式如下:

lvcreate [参数] 卷组名

ps:lvcreate创建一个逻辑卷需要指定卷组,表示在哪个卷组之上创建逻辑卷;

常用参数:

-n :指定逻辑卷名称,如 -n lv_data ;
-L :指定逻辑卷的大小,如 -L 10G,单位可以是bBsSkKmMgGtTpPeE;
-l :使用LE个数来指定逻辑卷的大小,如 -l 200,表示使用200个LE来创建逻辑卷,一般的我们最常用的是-L 来直接指定逻辑卷大小即可。这里重点
说明LE是什么,PE是在卷组中的叫法,而LE是在逻辑卷中的叫法,两者是一一对应的。
-l参数还有一种直接使用剩余空间的百分比的形式来给定大小,如 -l +100%FREE

演示示例:

[root@localhost ~]# vgs			#先查看有哪些卷组,如下,系统有两个卷组,已经在cl上创建了2个lv,my_data卷组还没创建lv
  VG      #PV #LV #SN Attr   VSize  VFree 
  cl        1   2   0 wz--n- 11.00g  4.00m
  my_data   2   0   0 wz--n- 13.99g 13.99g

[root@localhost ~]# lvcreate -n lv_data -L 6G  my_data		#在my_data卷组上创建一个名称叫lv_data的10G的逻辑卷
  Logical volume "lv_data" created.
[root@localhost ~]# 

重点:
当我们lvcreate创建一个逻辑卷的时候,其实相当于生成了一个磁盘设备文件,这是由lvm的mapper机制决定,Linux会新建两个软链接文件,如/dev/vg_name/lv_name、/dev/mapper/vg_name-lv_name,而这2个文件都是指向/dev/dm-X 块设备文件的,所以,当我们使用df -h看到的/dev/mapper/vg_name-lv_name的时候,这个其实就是和/dev/vg_name/lv_name一样的,都是指向/dev/dm-X 块设备文件的。

下面我们来看一下安装Linux系统时默认创建的逻辑卷,如下:

ot@my_data ~]# df -h | grep mapper
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   57G   34G   23G  60% /							#根分区就是逻辑卷

[root@my_data ~]# ll /dev/cl/root 										#发现该逻辑卷实际就是dm-0块设备文件
lrwxrwxrwx 1 root root 7 2022-01-29 21:12 /dev/cl/root -> ../dm-0
[root@my_data ~]# ll /dev/mapper/cl-root								#发现该逻辑卷实际就是dm-0块设备文件
lrwxrwxrwx 1 root root 7 2022-01-29 21:12 /dev/mapper/cl-root -> ../dm-0
[root@my_data ~]# 

mkfs 格式化分区并创建文件系统

mkfs 命令用于格式化分区并创建文件系统,mkfs是make filesystem的缩写,其语法格式如下:

 mkfs [options] [-t <type>] [fs-options] <device> [<size>]

主要参数:

-t, --type= 指定文件系统的类型;
-V 可视化,输出详细过程;

演示示例:

mkfs -t ext4 /dev/sda1				#格式化磁盘分区为ext4文件系统
mkfs -t xfs	/dev/my_data/lv_data	#对上面刚才创建的lv进行格式化并创建xfs类型的文件系统

注意:mkfs命令只是一个综合命令,它会调用正确的文件系统格式化工具,也就是说当你输入mkfs [tab][tab] ,会发现有很多类似的格式化命令。如mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix kfs.vfat
不同的文件系统类型需使用不同的命令,如xfs类型的使用mkfs.xfs,ext4的使用mkfs.ext4,这要根据根分区的文件系统类型决定,其实,mkfs -t [文件系统格式名]===>等同于mkfs.文件系统格式名,即mkfs -t xfs 与 mkfs.xfs相同。这里就不在讲解其他类似的命令了。

mount挂载

#使用mkfs创建好文件系统后就可以挂载使用了
mkdir /data
mount /dev/my_data/lv_data /data

pvs、pvdisplay、pvscan 查看物理卷信息

pvs、pvdisplay、pvscan 这三个命令都可以查看系统中有哪些物理卷PV,其输入的信息详细情况有所不同而已,语法格式如下:

pvs [参数]
pvdisplay  [参数]
pvscan  [参数]

一般都不用写参数;

演示示例:

[root@localhost ~]# pvs											#pvs查看物理卷信息
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  11.00g 4.00m
  /dev/sdb      lvm2 ---   8.00g 8.00g
  /dev/sdc      lvm2 ---   6.00g 6.00g
[root@localhost ~]# pvdisplay									#pvdisplay更加详细查看物理卷信息
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               11.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2815
  Free PE               1
  Allocated PE          2814
  PV UUID               oYhjES-MvEK-hfi1-cmno-INK2-vTtz-O80PNJ
   
  "/dev/sdb" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               mn3meS-mPlJ-nQoA-hdEs-3kdl-85zO-f72vQO
   
  "/dev/sdc" is a new physical volume of "6.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               6.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3u6yis-jF6t-czmS-Rj2i-ghlt-ntP8-IR0T2t
   
[root@localhost ~]# pvscan												#pvscan较为详细的查看物理卷信息
  PV /dev/sda2   VG cl              lvm2 [11.00 GiB / 4.00 MiB free]
  PV /dev/sdb                       lvm2 [8.00 GiB]
  PV /dev/sdc                       lvm2 [6.00 GiB]
  Total: 3 [25.00 GiB] / in use: 1 [11.00 GiB] / in no VG: 2 [14.00 GiB]
[root@localhost ~]# 

vgs、vgdisplay、vgscan 查看卷组

vgs、vgdisplay、vgscan 这3个命令都可以查看卷组的信息,输出内容有详细简略之分而已,其语法格式如下:

vgs [参数]
vgdisplay [参数]
vgscan   [参数]

参数:
一般不用写参数,不指定卷组默认输出全部卷组信息。

演示示例:

root@localhost ~]# vgs								#查看卷组信息,输出信息较为简单
  VG      #PV #LV #SN Attr   VSize  VFree 
  cl        1   2   0 wz--n- 11.00g  4.00m
  mydb   2   0   0 wz--n- 13.99g 13.99g
[root@localhost ~]# vgdisplay						#查看卷组信息,输出信息最详细
  --- Volume group ---
  VG Name               mydb
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               13.99 GiB
  PE Size               4.00 MiB
  Total PE              3582
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3582 / 13.99 GiB
  VG UUID               wj0tKh-yRKD-dtPd-2JHI-R5X6-vf4r-G2t4R2
   
  --- Volume group ---
  VG Name               cl
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               11.00 GiB
  PE Size               4.00 MiB
  Total PE              2815
  Alloc PE / Size       2814 / 10.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               z8fFwU-5ZTc-mAN4-C3Mj-U1Ty-sYxp-40aKSF
   
[root@localhost ~]# vgscan										#查看卷组信息,输出信息最简单
  Reading volume groups from cache.
  Found volume group "mydb" using metadata type lvm2
  Found volume group "cl" using metadata type lvm2
[root@localhost ~]# 

lvs、lvdisplay、lvscan 查看逻辑卷

lvs、lvdisplay、lvscan 命令用于查看逻辑卷信息,语法格式如下:

lvs [参数]
lvdisplay [参数]
lvscan   [参数]

常用参数:
一般不用写参数,默认输出显示全部的逻辑卷信息。

演示示例:

[root@localhost ~]# lvs							#查看系统中全部逻辑卷信息,输出信息较为详细
  LV      VG      Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    cl      -wi-ao---- 9.79g                                                    
  swap    cl      -wi-ao---- 1.20g                                                    
  lv_data my_data -wi-a----- 6.00g                                                    
[root@localhost ~]# lvdisplay					#查看系统中全部逻辑卷信息,输出信息最为详细
  --- Logical volume ---
  LV Path                /dev/my_data/lv_data	#当创建一个lv时,系统会自动在/dev/下以vg名字和lv名字创建一个文件
  LV Name                lv_data
  VG Name                my_data
  LV UUID                5NG9C1-O5GU-oLEf-Dxok-lMdZ-klfA-JpSBN6
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 16:25:12 +0800
  LV Status              available
  # open                 0
  LV Size                6.00 GiB
  Current LE             1536
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                y5kxXD-75vw-amAS-2Doe-u1SI-FQ30-scHOfD
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 14:02:19 +0800
  LV Status              available
  # open                 2
  LV Size                1.20 GiB
  Current LE             307
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                mQuBmu-3HVs-Fb04-A1YA-2gHN-4t10-mPTlPF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-25 14:02:19 +0800
  LV Status              available
  # open                 1
  LV Size                9.79 GiB
  Current LE             2507
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@localhost ~]# lvscan										#查看系统中全部逻辑卷信息,输出信息最为简单
  ACTIVE            '/dev/my_data/lv_data' [6.00 GiB] inherit
  ACTIVE            '/dev/cl/swap' [1.20 GiB] inherit
  ACTIVE            '/dev/cl/root' [9.79 GiB] inherit
[root@localhost ~]# 

注意:当我们创建一个lv时,系统会自动在/dev/下以vg名字和lv名字创建一个文件,如/dev/my_data/lv_data,这就是为什么我们在dev下会看到有一个/dev/cl/root文件的缘由了,然后实际上,/dev/cl/root是一个软链接,链接到/dev/dm-Xdm-X才真正是一个块文件。

vgextend 扩容卷组,即把物理卷加入卷组

vgextend 命令用于扩容卷组大小,其语法格式如下:

vgextend [参数] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath ...]

常用参数:
无,一般不用接参数;

演示示例:

#vgextend 命令把sdd1物理卷加入my_data卷组(sdd1已经是物理卷了,my_data是卷组名称)
[root@localhost /]# vgextend my_data /dev/sdd1	

lvextend 逻辑卷扩容(xfs_growfs、resize2fs配合扩展文件系统)

查看另一篇:《lvextend 逻辑卷扩容(xfs_growfs、resize2fs配合扩展文件系统)》https://editor.csdn.net/md/?articleId=120475752

lv缩容

缩容lv一般是腾出空间给同vg的其他lv,这并不是一种安全的做法,一般情况下没有人会这么干,一般当lv卷磁盘空间满的时候,会加磁盘来扩容,而不是从同vg下的其他lv腾空间出来,这里仅做出示例:

umount /dev/mapper/my_data-lv_data				#卸载lv
e2fsck -f /dev/mapper/my_data-lv_data			#先扫描、检查磁盘在执行resize2fs,不然它会提示你先执行e2fsck -f命令的
resize2fs /dev/mapper/my_data-lv_data 100G		#缩容文件系统到100G
lvreduce -L 100G /dev/mapper/my_data-lv_data	#缩容,lv到100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
lvreduce -L -100G /dev/mapper/my_data-lv_data	#缩容,lv缩减100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
mount /dev/mapper/my_data-lv_data /my_data/		#重新挂载,此时文件系统就是100G大小

#以上缩容发现,一个是需要卸载,这点可以影响业务,其次缩容后重新挂载,原来的文件仍存在,没有丢失。

#下面是一个例子
/dev/mapper/vg--data-lv1T 1008G   77M  957G   1% /gpt1
/dev/mapper/vg--data-lv2   2.0T   81M  1.9T   1% /gpt2
[root@kubernetes ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  centos    1   2   0 wz--n- <19.00g    0 
  vg-data   1   2   0 wz--n-  <3.00t    0 
[root@kubernetes ~]# lvdisplay /dev/vg-data/lv1T /dev/vg-data/lv2
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB
  Current LE             262144
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/vg-data/lv2
  LV Name                lv2
  VG Name                vg-data
  LV UUID                APJ81S-hOEC-LCfp-Oamo-5OTk-C8pA-GLhN2L
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:21:08 +0800
  LV Status              available
  # open                 1
  LV Size                <2.00 TiB
  Current LE             524287
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
[root@kubernetes ~]# 

#打算对/gpt1缩减100G,腾出空间给/gpt2:
umount  /gpt1
e2fsck -f  /dev/mapper/vg--data-lv1T
#注意这条命令是缩减文件系统到多少G,957-100=857
resize2fs /dev/mapper/vg--data-lv1T  857G

#重新挂载,现在是844G
mount /dev/mapper/vg--data-lv1T /gpt1/
[root@kubernetes ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1


# 文件系统缩减了但是lv没有缩减呀,你看看:
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB			#和没缩减文件系统时一模一样
  Current LE             262144			#和没缩减文件系统时一模一样
  Segments               1	
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
# 所以现在开始缩减lv,这里我们写-100G
lvresize -L -100G  /dev/vg-data/lv1T

#缩减成功,但是好像不对,lv显示924G,挂载之后的文件系统怎么才844G
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                924.00 GiB
  Current LE             236544
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
 
[root@kubernetes ~]# vgs	#vg多了100G
  VG      #PV #LV #SN Attr   VSize   VFree  
  vg-data   1   2   0 wz--n-  <3.00t 100.00g
  
[root@kubernetes ~]# df -h /dev/vg-data/lv1T
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1
[root@kubernetes ~]# 重新卸载重新挂载也是一样的,怎么回事?

lvremove 删除逻辑卷

lvremove 命令用于删除逻辑卷,当一个逻辑卷不再需要之后,可以把它删除,其语法格式如下:

lvremove  [参数]   lv名或lv路径

常用参数;
无,一般不需要接参数;

演示示例:

[root@localhost ~]# umount  /dev/mapper/my_data-lv_data			#删除一个lv之前必须先卸载文件系统
[root@localhost ~]# lvremove /dev/my_data/lv_data				#删除逻辑卷,如果不知道lv的路径,可以通过lvdisplay命令查看
Do you really want to remove active logical volume my_data/lv_data? [y/n]: y
  Logical volume "lv_data" successfully removed

vgremove 删除卷组

vgremove 命令用于删除卷组,当不再不需要某个卷组之后,可以删除卷组,语法格式如下;

vgremove [参数]  VolumeGroupName

常用参数:

无,一般不需要参数;

演示示例:

[root@localhost ~]# vgremove  my_data					#删除整个卷组
Do you really want to remove volume group "my_data" containing 1 logical volumes? [y/n]: y
  Volume group "my_data" is removed

pvremove删除物理卷

pvremove 命令用于删除物理卷,当不再不需要某个物理卷之后,可以删除物理卷,语法格式如下;

pvremove [参数]  PhysicalVolume

常用参数:
无,一般不需要参数;

演示示例:

#删除物理卷,该物理卷必须从vg中卸载下来,使用vgreduce my_data /dev/sdd1卸载即可
[root@localhost ~]# pvremove /dev/sdd1
  Removed "/dev/sdd1" from volume group "my_data"
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐