# TL;dr ```bash cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) ``` # exp ```bash ## 创建磁盘 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 ``` ```bash 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 ``` ```bash fdisk /dev/vdb t 8e w # 或者直接执行这个命令 (echo t; echo 8e; echo w) | fdisk /dev/vdb ``` ```bash 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工具 | | lvmconf | LVM配置修改器 | | lvmconfig | 查看LVM配置的工具 | | lvmdiskscan | 扫描所有LVM2可见的设备 | | lvmdump | 创建LVM的dump文件,用于诊断 | | lvmetad | 缓存LVM元数据的守护程序 | | lvmpolld | LVM操作命令的轮询守护程序 | | lvreduce | 缩容指定的LV | | lvremove | 删除指定的LV | | lvrename | 重命名指定的LV | | lvresize | 调整指定LV的大小,即可以扩容也可以缩容 | | lvscan | 扫描系统的LV | # ref * [LVM pvcreate,vgcreate,lvcreate,mkfs](https://www.cnblogs.com/softidea/p/5147090.html) * [Linux 磁盘与磁盘分区](https://www.cnblogs.com/sparkdev/p/10095916.html) * [虚拟机 /dev/mapper/centos-root 动态扩容](https://mengkang.net/1353.html) * [Linux命令:lvcreate巧用](https://blog.csdn.net/debimeng/article/details/72470030) * [Linux系统/dev/mapper目录浅谈](https://blog.51cto.com/7981477/2345614) * [LVM逻辑卷管理器配置使用详解](https://www.cnblogs.com/1584779745qq/p/6862374.html)