磁盘管理 -- LVM
LVM ? LVM (Logical Volume Manage),逻辑卷管理
? 概念 将众多的物理卷 (PV) 组成 卷组 (VG),再从卷组中划分出逻辑卷(LV) ?零散空间存储 --> 整合的虚拟磁盘 --> 虚拟分区 ?? 物理卷(PV)?????????? 卷组(VG)????????? 逻辑卷(LV)
整个硬盘,或使用fdisk 等工具简历的普通分区,包括许多默认 4M 大小的 PE (Physical Extent,基本单元/物理单元); ??????????
? ? ? ? ? ?
从卷组中分割出一块空间,用于建立分区 ? 创建操作 ? 常用的命令
创建物理卷 ( 物理卷可以不用建立 ) // 可以跟多个分区,连贯的话可以使用 /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更改硬盘物理分区 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |