首页 > 代码库 > lvm的实现
lvm的实现
lvm,logic volume admin,逻辑卷管理.主要功能就是能灵活地为分区,增大,减小,删除,增加,不管有多少硬盘都可以识为一个整体,进行整体管理.并没有性能和安全的功能,只为灵活分区.
要实现lv有三个步骤:
第一个pv,physical volume,物理卷.也就是将硬盘弄成lv需要的格式.准备好硬盘.比如,我们将 /dev/sd{h,i,j}弄成lv的格式.
查看这两块硬盘: blkid /dev/sd{h,i} 如果没有使用,将不会显示任何东西.语法:pvcreate DISK_LIST
pvcreate /dev/sd{h,i} 将这两块格式化成pv格式.
再查看这两块硬盘: blkid /dev/sd{h,i}
[root@mydg ~]# blkid /dev/sd{h,i}
/dev/sdh: UUID="HyAkte-P1LL-nuJZ-Ue6B-5g46-xGi1-hTwM0t" TYPE="LVM2_member"
/dev/sdi: UUID="MFXDkw-CLuQ-tXzf-NEpn-d4wd-uB5b-SFmkj3" TYPE="LVM2_member"
这样lv的地基就打好了,以后就可以用这两块做lv了.
pv的增,删,改,查.这个命令很简单.
pvcreate pvcreate /dev/sd{h,i} 建立pv
pvscan 查看已建立的pv
pvdisplay 查看已建立的pv,详细
pvremove pvremove /dev/sd{h,i} 抹除lv标志,变为普通硬盘
第二步就要做vg,volume group,卷组.也就是将上面建的物理卷建出一个组.放到一个组里来.vg有 建立/删除,查看/详细,增大/缩小这些用法.
建立vg,语法:vgcreate VG_NAME PV_LIST
比如将上面两个pv盘建立成一个卷组:vgcreate vg0 /dev/sd{h,i}。这样就建好了,查看vgscan/vgdisplay
当不用这个vg了,把数据全部备份出去后就可以撤销这个vg,vgremove VG_NAME.撤销之前必须把数据全部备份出来.
比如撤销将上面建立vg0 vgremove vg0.
当用久了之后发现这两块盘空间不够了,这个时候就可以扩展vg.扩展之前得先建立一个pv.比如:pvcreate /dev/sde.扩展vg,语法:vgextend VG_NAME PV_LIST. vgextend vg0 /dev/sde
假如发现空间有很大的浪费,想拿一块硬盘出来.这个时候就要用以缩减功能了.比如我是三块500G的盘/dev/sd{e,h,i},也有就1.5T空间,最多用500,所以现在决定把e盘拿掉。比例我们先查看vg0有哪些成员盘:pvdisplay |grep -B 1 "vg0"
[root@mydg ~]# pvdisplay |grep -B 1 "vg0"
PV Name /dev/sdh
VG Name vg0
--
PV Name /dev/sdi
VG Name vg0
--
PV Name /dev/sde
VG Name vg
在拿掉一块盘之前必须先把这盘的数据转移到其他盘:pvmove /dev/sde ,vgreduce vg0 /dev/sde.
将e从vg0中移出。再看vg0成员:
[root@mydg ~]# pvdisplay |grep -B 1 "vg0"
PV Name /dev/sdh
VG Name vg0
--
PV Name /dev/sdi
VG Name vg0
接下来说说PE
pe就是通过vg将pv划分成一个个的小块。默认为4M。lv之所以能灵活地动态调整大小其实动态地调整PE的个数。查看一个VG的pe信息:
[root@mydg ~]# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
……
VG Size 3.98 TiB
PE Size 4.00 MiB
Total PE 1044478
Alloc PE / Size 0 / 0
Free PE / Size 1044478 / 3.98 TiB
VG UUID zzNjU6-hr2N-LbPZ-Re3y-HvWS-L75X-gjeUos
可以看见PE大小为默认的4M,总个数为1044478,已分配0个。因为创建lv时才分配pe,所以现在还是已分配0个。vgcreate -s $:创建时手动指定PE大小。一般为默认。
第三步就要做最重要的LV了。
可以将lv视作一个硬盘,并且可以随时调整其大小。可以直接格式化挂载来使用。
lvcreate -l pe个数/-L 指定空间大小 -n LV_NAME VG_NAME
比如,将上面的vg全部来建立一个lv
先查看所有的PE个数:
[root@mydg ~]# vgdisplay |grep Total
Total PE 1044478
[root@mydg ~]# lvcreate -l 1044478 -n lv0 vg0
Logical volume "lv0" created
查看建立的lv:
[root@mydg ~]# lvscan
ACTIVE ‘/dev/vg0/lv0‘ [3.98 TiB] inherit
[root@mydg ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/lv0
LV Name lv0
VG Name vg0
LV UUID bktGuQ-Lzjx-qji2-BOc9-luYT-cqUo-CmULvY
LV Write Access read/write
LV Creation host, time mydg.localdomain, 2017-02-09 16:03:10 +0800
LV Status available
# open 0
LV Size 3.98 TiB
Current LE 1044478
……
移出并建立一个3T大小的空间。
[root@mydg ~]# echo "y"|lvremove /dev/vg0/lv0
Do you really want to remove active logical volume lv0? [y/n]: Logical volume "lv0" successfully removed
[root@mydg ~]# lvcreate -L 3000G -n lv0 vg0
Logical volume "lv0" created
格式化,挂载,查看大小:
[root@mydg ~]# mkfs -t ext4 -T largefile /dev/vg0/lv0
[root@mydg ~]# mount /dev/vg0/lv0 /mnt/
[root@mydg ~]# df -Ph
文件系统 容量 已用 可用 已用%% 挂载点
……
/dev/mapper/vg0-lv0 3.0T 200M 2.8T 1% /mnt
接下来,将lv0大小扩展到3.5T。命令lvextend -l pe个数/-L 指定空间大小 LV_NAME,参数跟建立差不多。
[root@mydg ~]# lvextend -L 3500G /dev/vg0/lv0
Extending logical volume lv0 to 3.42 TiB
Logical volume lv0 successfully resized
还要应用到文件系统:
[root@mydg ~]# resize2fs -p /dev/vg0/lv0 这个-p就是指应用全部空间。
再查看:
[root@mydg ~]# df -lPh
文件系统 容量 已用 可用 已用%% 挂载点
……
/dev/mapper/vg0-lv0 3.5T 198M 3.3T 1% /mnt
应用成功。
缩减空间比较危险,空间丢失数据,硬盘读写比较高,用得少就不写了。
这个lv还有很多的功能比如快照,多路径。磁盘综合运用只是其中一个功能。
lvm的实现