lvm磁盘管理
1 原理
算是一个介于分区之上,文件系统之下的中间层。
好处就是可以管理灵活,在线扩容。坏处就是退出的时候别暴力插拔,先退出lvm管理。
最下层的物理分区:fdisk -l
物理卷(physical volumes):pvdisplay 与物理分区一一对应,创建pv相当于设置为lvm分区格式,才能提取出来创建成vg
卷组(volumes groups):vgdisplay 可以由不同的pv合并而成,组成一个大的vg
逻辑卷(logical volumes):lvdisplay 在vg中划分出来,相当于逻辑分区,lv就可以直接挂在目录使用了。
2 新增一块硬盘怎么添加到lvm管理呢?
2.1 查看现在环境:
#vgdisplay 可以看到有一个vg(centos)
VG Name centos
...
VG Size 59.41 GiB
#pvdisplay 这个vg是sda2分区做成pv划进来的
PV Name /dev/sda2
VG Name centos
PV Size 59.41 GiB
#lvdisplay 用vg划了 两个lv(root和swap)
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
...
LV Size 55.41 GiB
...
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
...
LV Size 4.00 GiB
2.2 开始将sda3纳入lvm管理
只有60G的一块sda盘,有sda1和sda2两个分区,现在
#fdisk /dev/sda
新增了/dev/sda3,大小100G
#新增将sda3做成pv
pvcreate /dev/sda3
pvdisplay
#若加到新的vg(vg名字datavg、pv名字/dev/sda3为例)
vgcreate datavg /dev/sda3
vgdisplay
#若加到现有vg(vg名字centos、pv名字/dev/sda3为例)
vgextend centos /dev/sda3
vgdisplay
[root@docker-test ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 56G 48G 7.6G 87% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 597M 177M 421M 30% /boot
tmpfs tmpfs 378M 12K 378M 1% /run/user/42
2.3 假设我不想使用旧的逻辑卷,而是新建lv(名字为data1),大小为5G,挂载到/data1
lvcreate -L 5G -n data1 centos #我这里还用的旧的vg centos
lvdisplay
centos7 的文件系统格式默认为xfs,centos6为ext4,通过逻辑卷的LV Path指定逻辑卷
mkfs.xfs /dev/centos/data1
mkdir /data1
mount /dev/centos/data1 /data1
#挂载完成后,通过df -lT 就能看到相应的文件系统
然后将挂载信息写入到/etc/fstab中,使其开机挂载
echo "/dev/centos/data1 /data1 xfs defaults 0 0" >> /etc/fstab
2.4 假设我就想挂载到/,使用旧的vg 旧的lv,也就是调整分区大小
特别注意的是:
resize2fs命令 针对的是ext2、ext3、ext4文件系统
xfs_growfs命令 针对的是xfs文件系统
df -lT 查看下文件系统类型(通过df -hT查出的文件系统路径跟逻辑分区路径不同,不过还是能区分的)
vgdisplay 查看下vg剩余空间
VG Name centos
...
Free PE / Size 24319 / <95.00 GiB
1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)–未测试版本
#调整逻辑分区大小
增大至20G
$ lvextend -L 20G /dev/mapper/centos-test--lv
增加5G
$ lvextend -L +5G /dev/mapper/centos-test--lv
减小至10G
lvreduce -L 10G /dev/mapper/centos-test--lv
#减小3G
$ lvreduce -L -3G /dev/mapper/centos-test--lv
#执行调整
$ resize2fs /dev/mapper/centos-test--lv
2)xfs文件系统的调整命令是xfs_growfs(只支持增大)
调整逻辑分区大小(事实证明用df -lT和LV Path两个路径都可以实现)
#增大至70G(用LV Path)
$ lvextend -L 70G /dev/centos/root
增加5G(用df -lT)
$ lvextend -L +80G /dev/mapper/centos-root
#执行调整
$ xfs_growfs /dev/centos/root
df -lT
此种方法进行的扩缩容,是不会影响到原有数据的,非常的方便好用。
ps:xfs格式不是不支持缩容,而是xfs格式缩容后需要重新格式化才能继续挂载使用,且缩容前需要先卸载挂载,然后在缩容,然后格式化,然后再挂载。这会导致原本的数据丢失,如果实在要缩容,可以提前将数据转移备份好,缩容后再将数据迁移回来。
卸载挂载
$ umount /dev/mapper/centos-test--lv
#缩容
$ lvreduce -L -5G /dev/mapper/centos-test--lv
重新格式化,添加-f参数,强制重写。
$ mkfs.xfs /dev/mapper/centos-test--lv -f
重新挂载
#mount /dev/mapper/centos-test--lv /data
3 退出磁盘管理(未测试版)
在日常使用中,磁盘老旧,故障,需要更换等问题也经常有,此时需要安全退出。
首先,磁盘中的数据,如何需要转移到新的磁盘中,那么首先,先插入新的磁盘,然后创建pv,将pv加入到相同的vg,然后移动逻辑分区和数据到新的磁盘,然后将就旧的磁盘的pv移除出vg,删除pv,就可以移除此磁盘了。
#查看系统磁盘挂载情况
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.7G 0 part /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
└─centos-test--lv 253:0 0 7G 0 lvm
sdc 8:32 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
如上可以看到在sdb磁盘中有一个sdb1的分区,下面有一个lvm的逻辑分区。
#若要安全的退出磁盘,就需要将此磁盘中的所有数据迁移到新的磁盘中,当然如果你不要数据了,那可以不迁移,直接删除逻辑分区,从卷组中删除物理卷即可。
sdc磁盘为刚添加的新磁盘,我们要做的就是将sdb的数据导入到sdc中,然后退出sdb磁盘
#首先,创建sdc磁盘的物理分区和物理卷
#操作过程不赘述了,查看最开头第一步新增创建分区的内容。
#创建完成后,查看物理卷
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 centos lvm2 a-- 20.00g 13.00g
/dev/sdc1 lvm2 --- 20.00g 20.00g
#可以看到新的物理卷还没有加入卷组,空间为全剩余
#将新磁盘的物理卷加入到相同的卷组
$ vgextend centos /dev/sdc1
再查看物理卷,如下
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 centos lvm2 a-- 20.00g 13.00g
/dev/sdc1 centos lvm2 a-- 20.00g 20.00g
下面将/dev/sdb1中的数据移动到卷组中的/dev/sdc1上
$ pvmove /dev/sdb1 /dev/sdc1
#等待一段时间即可,如果数据量过大,可以用下面命令,放到后台执行。
$ pvmove /dev/sdb1 /dev/sdc1 2>error.log >normal.log &
完成后,查看物理卷信息,会发现sdb1上的数据都迁移到了sdc1上。
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 centos lvm2 a-- 20.00g 20.00g
/dev/sdc1 centos lvm2 a-- 20.00g 13.00g
然后将/dev/sdb1的物理卷从卷组中删除
$ vgreduce centos /dev/sdb1
删除后,再看pvs,会发现此物理卷已经没有所属卷组了
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 20.00g 20.00g
/dev/sdc1 centos lvm2 a-- 20.00g 13.00g
然后删除物理卷
$ pvremove /dev/sdb1