- LVM
- 概念
- 创建操作
- 分区监控
- 扩容与缩容
- 将数据快速转移到相同的卷组
- 删除整个逻辑卷
LVM
LVM (Logical Volume Manage) , 逻辑卷管理
- 作用: 整合分散的空间, 动态调整磁盘容量, 从而提高磁盘管理的灵活性;
- WARN: /boot 分区存放引导文件, 不能使用 LVM 创建, 必须独立出来;
概念
将众多的物理卷 (PV) 组成 卷组 (VG) , 再从卷组中划分出逻辑卷(LV)
零散空间存储 --> 整合的虚拟磁盘 --> 虚拟分区
物理卷(PV) 卷组(VG) 逻辑卷(LV)
- PV (Physical Volume), 物理卷
整个硬盘, 或使用fdisk 等工具简历的普通分区, 包括许多默认 4M 大小的 PE (Physical Extent, 基本单元/物理单元);
- VG (Volume Group), 卷组
- LV (Logical Volume), 逻辑卷
从卷组中分割出一块空间, 用于建立分区
创建操作
常用的命令
- 扫描 scan
- pvscan vgscan lvscan
- 建立 create
- pvcreate vgcreate lvcreate
- 显示 display
- pvdisplay vgdisplay lvdisplay
- 删除 remove
- pvremove vgremove lvremove
- 扩展 extend
- vgextend lvextend
- 减少 reduce
- vgreduce lvreduce
- vgreduce lvreduce
创建物理卷 ( 物理卷可以不用建立 )
// 可以跟多个分区, 连贯的话可以使用 /dev/sdb[1234] pvcreate /dev/sdb5 Physical volume "/dev/sdb5" successfully created
创建卷组 VG
// 创建卷组, -s 指定PE的大小, 默认 4M; 下面使用的是四个分区; vgcreate -s 8 vg0 /dev/sdb[1234] Volume group "vg0" successfully created // 查看卷组 vgdisplay /dev/vg0 --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 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 4 Act PV 4 VG Size 99.99 GiB PE Size 8.00 MiB Total PE 25597 Alloc PE / Size 0 / 0 Free PE / Size 25597 / 99.99 GiB VG UUID fYBKCi-YraR-7ABL-NkBR-hpii-lTIC-jGDD0y
创建逻辑卷
// 创建逻辑卷 -L 给的大小 -n 逻辑卷名称 lvcreate -L 10G -n tian vg0 Logical volume "tian" created // 或者可以使用 -l 指定 PE 个数 lvcreate -l 2500 -n tian vg0 // 查看逻辑卷 lvdisplay /dev/vg0/tian --- Logical volume --- LV Path /dev/vg0/tian LV Name tian VG Name vg0 LV UUID kcJcqI-E2xU-phrt-c0RM-cBLa-p1h9-gmI1rx LV Write Access read/write LV Creation host, time localhost.localdomain, 2019-03-25 21:57:43 -0400 LV Status available # open 0 LV Size 19.53 GiB Current LE 2500 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3
格式化逻辑卷
// 格式化(创建)文件系统; mkfs.ext4 /dev/vg0/tian mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1281120 inodes, 5120000 blocks 256000 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 157 block groups 32768 blocks per group, 32768 fragments per group 8160 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
挂载分区
// 挂载到需要的目录, 或者创建挂载点进行挂载 mkdir /tian mount /dev/vg0/tian /tian/ // 配置开机自动挂载, 查看 UUID , 使用 UUID进行挂载, 防止重启后盘符变化导致加载不了磁盘错误; blkid /dev/vg0/tian /dev/vg0/tian: UUID="dd0ca91d-aefb-46fd-97d9-7158f9668b20" TYPE="ext4" vim /etc/fstab ... ... UUID="dd0ca91d-aefb-46fd-97d9-7158f9668b20" /tian ext4 defaults 1 2
分区监控
查看命令
// 查看物理卷 pvs // 查看所有 pvs /dev/sdb1 // 指定分区 PV VG Fmt Attr PSize PFree /dev/sdb1 vg0 lvm2 a-- 10.00g 10.00g pvs /dev/sdb* // 通配符匹配 // 查看物理卷组 vgs // 查看所有卷组 vgs /dev/vg0 // 指定卷组查看 VG #PV #LV #SN Attr VSize VFree vg0 4 1 0 wz--n- 99.99g 80.46g // 查看逻辑卷 lvs // 查看所有逻辑卷 lvs /dev/vg0/tian // 查看指定的逻辑卷 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert tian vg0 -wi-ao---- 19.53g // 查看pv , vg , lv 及指定挂载点 pvs ; echo ------------------------;vgs ; echo ------------------------;lvs ; echo ------------------------;df -hT /tian PV VG Fmt Attr PSize PFree /dev/sda3 vg_centos6 lvm2 a-- 147.80g 0 /dev/sdb1 vg0 lvm2 a-- 10.00g 10.00g /dev/sdb2 vg0 lvm2 a-- 20.01g 488.00m /dev/sdb3 vg0 lvm2 a-- 30.00g 30.00g /dev/sdb4 vg0 lvm2 a-- 39.98g 39.98g ------------------------ VG #PV #LV #SN Attr VSize VFree vg0 4 1 0 wz--n- 99.99g 80.46g vg_centos6 1 3 0 wz--n- 147.80g 0 ------------------------ LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert tian vg0 -wi-ao---- 19.53g LogVol00 vg_centos6 -wi-ao---- 40.00g LogVol01 vg_centos6 -wi-ao---- 40.00g LogVol02 vg_centos6 -wi-ao---- 67.80g ------------------------ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg0-tian ext4 20G 201M 19G 2% /tian
实时监控
// 动态实时查看, 用于监控; watch -n 选项表示多少秒刷新一次; watch -n 1 ' pvs ; echo ------------------------;vgs ; echo ------------------------;lvs ; echo ------------------------;df -hT /tian' // 动态查看只针对与挂载点 watch -n 1 'df -h /tian' Every 10.0s: df -h /tian Mon Mar 25 23:02:01 2019 // 实时时间 Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-tian 20G 352M 18G 2% /tian // 存储空间使用
扩容与缩容
xfs 类型的设备只能扩容, 不能缩容 !!
VG容量够, 扩容 逻辑卷
// 查看文件系统本来大小 df -hT Filesystem Type Size Used Avail Use% Mounted on ... ... /dev/mapper/vg0-tian ext4 20G 172M 19G 1% /tian // 扩容 20个 G lvextend -L +20G /dev/vg0/tian Extending logical volume tian to 39.53 GiB Logical volume tian successfully resized // 扩容到 50G lvextend -L 50G /dev/vg0/tian // 调整(刷新)逻辑卷分区大小 resize2fs /dev/vg0/tian resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vg0/tian is mounted on /tian; on-line resizing required old desc_blocks = 2, new_desc_blocks = 3 Performing an on-line resize of /dev/vg0/tian to 10362880 (4k) blocks. The filesystem on /dev/vg0/tian is now 10362880 blocks long. // 再次查看扩容后的大小 df -hT Filesystem Type Size Used Avail Use% Mounted on ... ... /dev/mapper/vg0-tian ext4 39G 176M 37G 1% /tian // CentOS 7 上的xfs文件系统调整大小 xfs_growfs /dev/vg0/tian
逻辑卷缩小
// xfs 格式的文件系统不能缩小 // 查看没有缩小的时候的大小 df -hT Filesystem Type Size Used Avail Use% Mounted on ... ... /dev/mapper/vg0-tian ext4 30G 233M 28G 1% /tian // 首先,需要卸载文件系统的挂载 umount /tian // 使用 e2fsck 强制检查逻辑卷, 并关注使用空间, 默认块是 4 K; e2fsck -f /dev/vg0/tian e2fsck 1.41.12 (17-May-2010) 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/vg0/tian: 13/1966080 files (15.4% non-contiguous), 182818/7864320 blocks // 使用resize2fs 将文件系统减小到 10 G; resize2fs /dev/vg0/tian 10G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/vg0/tian to 2621440 (4k) blocks. The filesystem on /dev/vg0/tian is now 2621440 blocks long. // 根据使用的大小缩小, 可以预留出足够使用的大小; 两种方式缩小到 10 G; lvreduce -L -20G /dev/vg0/tian lvreduce -L 10G /dev/vg0/tian // 挂载 mount /dev/vg0/tian /tian // 查看挂在后的大小 df -hT Filesystem Type Size Used Avail Use% Mounted on ... ... /dev/mapper/vg0-tian ext4 9.9G 225M 9.2G 3% /tian
扩大卷组 (VG)
// 环境: 硬盘分区sdb[1234] , 123做卷组, 逻辑卷使用满, 卷组空间不足, 需要使用sdb4 进行扩容; vgextend vg0 /dev/sdb4 Volume group "vg0" successfully extended // 查看sdb[1234]各个分区的大小 lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 10G 0 part │ └─vg0-tian (dm-3) 253:3 0 60G 0 lvm /tian ├─sdb2 8:18 0 20G 0 part │ └─vg0-tian (dm-3) 253:3 0 60G 0 lvm /tian ├─sdb3 8:19 0 30G 0 part │ └─vg0-tian (dm-3) 253:3 0 60G 0 lvm /tian └─sdb4 8:20 0 40G 0 part // 查看扩容后的卷组; 大小 100 GiB; vgdisplay /dev/vg0 --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 99.99 GiB PE Size 4.00 MiB Total PE 25597 Alloc PE / Size 15360 / 60.00 GiB Free PE / Size 10237 / 39.99 GiB VG UUID 5DtUCI-dMDj-FVjX-dPZH-wCgf-o5Y1-e04kG5 // 再扩容逻辑卷正常按上面扩容就好
将数据快速转移到相同的卷组
// 将一个新的分区扩容卷组,sdb4 扩容 sdb[123] 的 vg0 卷组; // 通过 pvmove 命令转移空间数据 sdb1 --> sdb4 // 使用 vgreduce 将损坏的磁盘或者分区从卷组中移除 --> sdb1 // 使用 pvremove 将坏的磁盘或者分区从系统中删除(可选) --> sdb1 // 使用一些工具修复磁盘或者手动更换损坏磁盘 vgextend vg0 /dev/sdb4 pvs PV VG Fmt Attr PSize PFree /dev/sda3 vg_centos6 lvm2 a-- 147.80g 0 /dev/sdb1 vg0 lvm2 a-- 10.00g 12.00m /dev/sdb2 vg0 lvm2 a-- 20.01g 0 /dev/sdb3 vg0 lvm2 a-- 30.00g 0 /dev/sdb4 vg0 lvm2 a-- 39.98g 39.98g pvmove /dev/sdb1 /dev/sdb4 vgreduce vg0 /dev/sdb1 Removed "/dev/sdb1" from volume group "vg0" pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped pvs PV VG Fmt Attr PSize PFree /dev/sda3 vg_centos6 lvm2 a-- 147.80g 0 /dev/sdb2 vg0 lvm2 a-- 20.01g 0 /dev/sdb3 vg0 lvm2 a-- 30.00g 0 /dev/sdb4 vg0 lvm2 a-- 39.98g 29.99g // 挂载逻辑卷, 并查看内容, 没有问题
删除整个逻辑卷
// 先卸载mount挂载 // 删除 /etc/fstab 中配置的开机自动挂载 // lvremove 删除逻辑卷 // vgremove 删除卷组 // pvremove 删除物理卷 // 使用fdisk更改硬盘物理分区