逻辑卷 LVM: logical volume management
逻辑意义上将多块块设备组织起来当做一个设备来使用。
Abstract layer 抽象层:隐藏了底层的硬件细节,而输出给用户更高意义上的逻辑设备。
动态地扩大或者缩小磁盘空间。
版本:lvm lvm2普遍使用
PV Pysical Volume 物理卷,就是我们的实体磁盘或者分区 ,类似于/dev/sda2, /dev/sda3等等,由PE Physical Extends(物理磁盘块,类似于chunk)组成。多个PV可以组合起来形成一个VG(卷组 Volume Group)。
PE (Physical Extend) 建立VG的时候指定的block块大小,默认是4MB。一个VG最大可以容许65534个PE。
VG (Volume Group 卷组) 将一个或者多个PV组合起来形成一个大的磁盘。最大容量与PE有关,默认最大的LVM可达到256G。
在卷组的层次上,把多个底层不同的分区或者硬盘输出给用户空间,使得用户看起来就像一个设备一样,卷组可以增大或者缩减。
卷组类似于扩展分区,不能直接使用。需要在卷组的基础上继续构建一个层次,称之为LV
(Logical Volume 逻辑卷)
LV (Logical Volume 逻辑卷) 由VG分割出来,可以被系统使用。f
PE,VG,LV的关系
LV创建过程
常用命令:
显示:pvdisplay vgdisplay lvdisplay
扫描:pvscan vgscan lvscan
创建:pvcreate vgcreate lvcreate
移除:pvremvoe vgremove lvremove
扩展:vgextend lvextend
缩减:vgreduce lgreduce
创建一个LV的过程:
创建两个分区:/dev/sda14 /dev/sda15
创建物理卷:
[root@server27 ~]# pvcreate /dev/sda14
Physical volume "/dev/sda14" successfully created
[root@server27 ~]# pvcreate /dev/sda15
Physical volume "/dev/sda15" successfully created
[root@server27 ~]# pvdisplay
创建卷组:
[root@server27 ~]# vgcreate myvg /dev/sda14
Volume group "myvg" successfully created
[root@server27 ~]# vgdisplay
创建逻辑卷
[root@server27 ~]# lvcreate -L 100M -n lv1 myvg
Logical volume "lv1" created
-L 创建逻辑卷的大小
-n 逻辑卷的名字
myvg 在哪个卷组中创建
[root@server27 ~]# lvdisplay myvg
下面就可以格式化,正常挂载使用了。
[root@server27 ~]# mkfs -t ext3 /dev/myvg/lv1
[root@server27 ~]# mount /dev/myvg/lv1 /lvm
[root@server27 ~]# cd /lvm
[root@server27 lvm]# ls
lost+found
[root@server27 lvm]# cp /etc/fstab ./
[root@server27 lvm]# ls
fstab lost+found
扩展逻辑卷:
PS: lvcreate -L 200M /dev/myvg/lv1 扩展到200M
lvcreate -L +200M /dev/myvg/lv1 在原有的基础上再扩展200M
-l 指定PE的个数
[root@server27 lvm]# lvextend -l +25 /dev/myvg/lv1
Extending logical volume lv1 to 200.00 MB
Logical volume lv1 successfully resized
没有增大,怎么回事?
逻辑卷的增大要分两个步骤。默认情况下,刚创建完一个分区并格式化后,逻辑边界和物理边界一样大,当使用lvextend只是将物理边界给扩大了,逻辑边界依然没有变。此时需要将逻辑边界也扩大一下,使用resizefs命令。
[root@server27 ~]# resize2fs -p /dev/myvg/lv1
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/myvg/lv1 is mounted on /lvm; on-line resizing required
Performing an on-line resize of /dev/myvg/lv1 to 204800 (1k) blocks.
The filesystem on /dev/myvg/lv1 is now 204800 blocks long.
文件正常,不受影响。
先扩展VG,再扩展LV的操作:
[root@server27 lvm]# vgextend myvg /dev/sda15
Volume group "myvg" successfully extended
[root@server27 lvm]# vgdisplay
缩减逻辑卷:在不影响文件使用的前提下,对逻辑卷空间的缩减。
先缩减逻辑边界 再缩减物理边界
fsck file system check 文件系统一致性检查
先卸载:
[root@server27 lvm]# umount /lvm
umount: /lvm: device is busy
umount: /lvm: device is busy
[root@server27 ~]# fuser -km /dev/myvg/lv1
/dev/myvg/lv1: 10854c
[root@server27 ~]# umount /lvm
文件系统一致性检查
[root@server27 ~]# e2fsck -f /dev/myvg/lv1
缩减逻辑边界
[root@server27 ~]# resize2fs /dev/myvg/lv1 100M
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/myvg/lv1 to 102400 (1k) blocks.
The filesystem on /dev/myvg/lv1 is now 102400 blocks long.
[root@server27 ~]# lvreduce -L 100M /dev/myvg/lv1
WARNING: Reducing active logical volume to 100.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
Reducing logical volume lv1 to 100.00 MB
Logical volume lv1 successfully resized
数据未受影响
Q:如果删除的PV上有数据呢?
pvmove 移动数据到其他物理卷中
PS:pvrmove 移除物理卷
[root@server27 ~]# pvmove /dev/sda14
/dev/sda14: Moved: 60.0%
/dev/sda14: Moved: 100.0%
[root@server27 ~]# vgreduce myvg /dev/sda14
Removed "/dev/sda14" from volume group "myvg"
[root@server27 ~]# pvdisplay
数据正常,未受影响
将/dev/sda14移除,再显示一下PV已经看不到了。
[root@server27 lvm]# pvremove /dev/sda14
Labels on physical volume "/dev/sda14" successfully wiped
[root@server27 lvm]# pvdisplay
Snapshot 快照
快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与档案系统共享。
左图为最初建置系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块) 作为资料存放处。 此时快照区内并没有任何资料,而快照区与系统区共享所有的 PE 资料, 因此你会看到快照区的内容与档案系统是一模一样的。 等到系统运作一阵子后,假设 A 区域的资料被更动了 (上面右图所示),则更动前系统会将该区域的资料移动到快照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与档案系统共享!
快照区与被快照的 LV 必须要在同一个 VG 上头。
备份工具:dump - ext2/3 filesystem backup
-level# 指定备份级别 0---9 0完全备份 1---9 增量备份:只备份上一次比此次级别低的到这一刻为止的内容
-f 把备份的结果保存到的位置
-u 在每次成功备份之后,将备份信息更新到/etc/dumpdates 文件中。
恢复工具:
restore
-r 重建文件系统
-f file 从文件中恢复,可以是一个特殊设备例如 /dev/st0(磁带设备)或者/dev/sda1或者是一个普通文件
创建一个快照卷:
[root@server27 lvm]# lvcreate -L 10M -s -n snap_lv1 /dev/myvg/lv1
Rounding up size to full physical extent 12.00 MB
Logical volume "snap_lv1" created
[root@server27 lvm]# lvdisplay
创建之后就可以挂载了
[root@server27 lvm]# mkdir /snap
[root@server27 lvm]# mount -o ro /dev/myvg/snap_lv1 /snap
[root@server27 lvm]# cd /snap/
[root@server27 snap]# ls
fstab lost+found
PS:当改变的数据超过10M时,快照就会发生崩溃的情况。
对快照备份:
[root@server27 snap]# dump -0u -f /tmp/lv1.backuo /snap
恢复
[root@server27 lvm]# restore -rf /tmp/lv1.backuo
[root@server27 lvm]# ls
fstab lost+found restoresymtable
PS:redo 重做日志,undo 撤销重做
事务:把多个语句放在一起当做整体来执行。
undo.log保证数据永远处于一致。