TL;dr

cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

exp

## 创建磁盘
qemu-img create -f qcow2 disk000.qcow2 200G

## 挂载磁盘
virsh attach-disk \
--domain demo-server \
--source /data/images/disk000.qcow2 \
--target vdb \
--targetbus virtio \
--driver qemu \
--subdriver qcow2 \
--cache none \
--persistent

## 反挂载磁盘
virsh detach-disk \
--domain demo-server /data/images/disk000.qcow2 \
--persistent

## 启动虚机
virsh start demo-server

yum install lvm2

ls /dev/vd*
/dev/vda  /dev/vda1  /dev/vda2  /dev/vdb

vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g 4.00m


fdisk /dev/vdb
# (echo n; echo p; echo 1; echo ; echo ; echo w) | fdisk /dev/vdb


fdisk -l /dev/vdb

Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 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: 0xa07d338c

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048   419430399   209714176   83  Linux

fdisk /dev/vdb
t
8e
w
#  或者直接执行这个命令
(echo t; echo 8e; echo w) | fdisk /dev/vdb
pvcreate /dev/vdb1

# pvdisplay

vgcreate vg1 /dev/vdb1

# vgdisplay

lvcreate --size 60G --name lv1 vg1
lvcreate --size 60G --name lv2 vg1
lvcreate --size 70G --name lv3 vg1


# lvdisplay

ls -l /dev/vg1
total 0
lrwxrwxrwx. 1 root root 7 Jan 31 12:49 lv1 -> ../dm-2
lrwxrwxrwx. 1 root root 7 Jan 31 12:49 lv2 -> ../dm-3
lrwxrwxrwx. 1 root root 7 Jan 31 12:49 lv3 -> ../dm-4


lsblk -l /dev/vdb
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb     252:16   0  200G  0 disk
vdb1    252:17   0  200G  0 part
vg1-lv3 253:4    0   70G  0 lvm
vg1-lv1 253:2    0   60G  0 lvm
vg1-lv2 253:3    0   60G  0 lvm


mkfs.xfs /dev/vg1/lv1
mkfs.xfs /dev/vg1/lv2
mkfs.xfs /dev/vg1/lv3

echo "/dev/vg1/lv1 /var/lib/docker/                     xfs     defaults        0 0" >> /etc/fstab
echo "/dev/vg1/lv2 /var/lib/containerd/                     xfs     defaults        0 0" >> /etc/fstab
echo "/dev/vg1/lv3 /var/lib/kubelet                       xfs     defaults        0 0" >> /etc/fstab



[root@localhost lib]$ df
Filesystem              1K-blocks     Used Available Use% Mounted on
devtmpfs                  2004520        0   2004520   0% /dev
tmpfs                     2017796        0   2017796   0% /dev/shm
tmpfs                     2017796     8732   2009064   1% /run
tmpfs                     2017796        0   2017796   0% /sys/fs/cgroup
/dev/mapper/centos-root  49250820 17657692  31593128  36% /
/dev/vda1                 1038336   216460    821876  21% /boot
/dev/mapper/vg1-lv1      62883840    33220  62850620   1% /var/lib/docker
/dev/mapper/vg1-lv2      62883840    33112  62850728   1% /var/lib/containerd
/dev/mapper/vg1-lv3      73364480    32992  73331488   1% /var/lib/kubelet
tmpfs                      403560        0    403560   0% /run/user/1000


[root@localhost ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb             252:16   0  200G  0 disk
└─vdb1          252:17   0  200G  0 part
  ├─vg1-lv3     253:4    0   70G  0 lvm  /var/lib/kubelet
  ├─vg1-lv1     253:2    0   60G  0 lvm  /var/lib/docker
  └─vg1-lv2     253:3    0   60G  0 lvm  /var/lib/containerd
vda             252:0    0   50G  0 disk
├─vda2          252:2    0   49G  0 part
│ ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
│ └─centos-root 253:0    0   47G  0 lvm  /
└─vda1          252:1    0    1G  0 part /boot


pvscan
lvscan


lvchange -ay /dev/vg1/lv1
[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg1/lv1' [60.00 GiB] inherit
  inactive          '/dev/vg1/lv2' [60.00 GiB] inherit
  inactive          '/dev/vg1/lv3' [70.00 GiB] inherit

# 卸下挂载中的Vol01逻辑卷
umount /dev/VolGroup0/Vol01
# 检查文件系统的完整性
e2fsck –f /dev/VolGroup0/Vol01
# 将文件系统减小1G
resize2fs /dev/VolGroup0/Vol01 1G
# 关闭逻辑卷
lvchange –an /dev/VolGroup0/Vol01
# 减小Vol01逻辑卷1G的空间
lvreduce –L -1G /dev/VolGroup0/Vol01
# 打开逻辑卷
lvchange –ay /dev/VolGroup0/Vol01
# 如果不做lvchange操作而直接做减小逻辑卷,可能会导致数据寸坏
# 查看Vol01的大小已减少1G为
lvs
# 缩小逻辑卷组
# 将hda5中的数据传到hda6中
pvmove /dev/hda5 /dev/hda6
# 若VG由hda5 和hda6组成,这里去掉hda5就缩小了VG
vgreduce VolGroup0 /dev/hda5
# 将hda5从物理卷中移除
pvremove /dev/hda5
# 删除逻辑卷:
# 卸下正在使用的逻辑卷
mount /dev/VolGroup0/Vol01
# 关闭逻辑卷
lvchange –an /dev/VolGroup0/Vol01
#  删除逻辑卷Vol01
lvremove /dev/VolGroup0/Vol01
lvs
# 删除卷组:
vgchange –an /dev/VolGroup0
vgremove VolGroup0




# PV:物理卷
# VG:卷组(物理层面上一个VG由一个或多个PV组成)
# LV:逻辑卷(逻辑层面上一个VG由一个或多个LV组成)
# 建立逻辑卷,选定hda5来做逻辑,首先要确认hda5处于umount状态
# 查看挂载状态 hda5在mount状态
df –h
# 卸下hda5
umount /dev/hda5
# 将hda5创建为物理卷
pvcreate /dev/hda5
# 查看当前所有的物理卷,确认有hda5
pvscan
# 创建卷组VolGroup0 ,将hda5添加到卷组中
vgcreate VolGroup0 /dev/hda5
# 查看当前所有的卷组,确认有VolGroup0
vgscan
# 创建一个5G的逻辑卷Vol01 ,指定卷组为VolGroup0
lvcreate –L 5G –n Vol01 VolGroup0
# 查看当前所有的逻辑卷,确认有Vol01
lvscan
# 格式化新建的逻辑卷Vol01
mkfs.ext3  /dev/VolGroup0/Vol01
# 创建一个目录
mkdir  /test
# 将逻辑卷Vol01挂载到test目录下
mount /dev/VolGroup0/Vol01 /test

 
########################################################
# 扩展逻辑卷:VG的空间足够大,只扩展LV
########################################################
# 给逻辑卷Vol01加2G的空间
lvextend –L +2G /dev/VolGroup0/Vol01
# 重置Vol01的大小
resize2fs /dev/VolGroup0/Vol01
lvscan
reboot
df –h
########################################################
# 扩展逻辑卷:VG的空间不足,扩展VG
########################################################

# 扩展VG的前提是你的硬盘还有剩余未分配空间
# 新建一个5G的扩展分区 分区号是6
fdisk /dev/hda n -> e -> 6 -> +5G -> w
# 格式化新建的hda6
mkfs.ext3 /dev/hda6
fdisk –l

# 将hda6创建为物理卷
pvcreate /dev/hda6
pvscan
# 将hda6加入到VolGroup0卷组中
vgextend VolGroup0 /dev/hda6
vgs

# 查看磁盘uuid
ls -l /dev/disk/by-uuid
blkid -s UUID /dev/sda1
tune2fs -l /dev/sda1 |grep 'UUID'
dumpe2fs /dev/sda1 |grep 'UUID'
命令命令解释
lvchange修改指定LV的一些属性,包括是否是激活状态、是否只读……
lvconvert转换指定LV的属性,从线性转化为镜像或者快照
lvcreate创建LV
lvs简略地查看系统内的LV情况
lvdisplay详细地查看系统内的LV情况
lvextend扩展指定LV的容量大小
lvm管理LVM的一个shell工具
lvmconfLVM配置修改器
lvmconfig查看LVM配置的工具
lvmdiskscan扫描所有LVM2可见的设备
lvmdump创建LVM的dump文件,用于诊断
lvmetad缓存LVM元数据的守护程序
lvmpolldLVM操作命令的轮询守护程序
lvreduce缩容指定的LV
lvremove删除指定的LV
lvrename重命名指定的LV
lvresize调整指定LV的大小,即可以扩容也可以缩容
lvscan扫描系统的LV

ref