LVM逻辑卷
逻辑卷管理(LVM)指系统将物理卷管理抽象到更高的层次,常常会形成更简单的管理模式。通过使用 LVM,所有物理磁盘和分区,无论它们的大小和分布方式如何,都被抽象为单一存储(single storage)源。
LVM 可以将分区和磁盘聚合成一个虚拟磁盘(virtual disk),从而用小的存储空间组成一个统一的大空间。这个虚拟磁盘在 LVM 术语中称为卷组(volume group)。
LVM2 是一个新的用户空间工具集,它为 Linux 提供逻辑卷管理功能。它完全向后兼容原来的 LVM 工具集。
LVM的结构
LVM被组织为三种元素:
卷(Volume):物理和逻辑卷和卷组
区段(Extent):物理和逻辑区段
设备映射器(Device mapper):Linux内核模块
卷(Volume):Linux LVM 组织为物理卷(PV)、卷组(VG)和逻辑卷(LV)。物理卷是物理磁盘或物理磁盘分区(比如 /dev/hda 或 /dev/hdb1)。卷组是物理卷的集合。卷组可以在逻辑上划分成多个逻辑卷。
区段(Extent):为了实现 n-to-m 物理到逻辑卷映射,PV 和 VG 的基本块必须具有相同的大小;这些基本块称为物理区段(PE)和逻辑区段(LE)。尽管 n 个物理卷映射到 m 个逻辑卷,但是 PE 和 LE 总是一对一映射的。在使用 LVM2 时,对于每个 PV/LV 的最大区段数量并没有限制。默认的区段大小是 4MB,对于大多数配置不需要修改这个设置,因为区段的大小并不影响 I/O 性能。但是,区段数量太多会降低 LVM 工具的效率,所以可以使用比较大的区段,从而降低区段数量。但是注意,在一个 VG 中不能混用不同的区段大小,而且用 LVM 修改区段大小是一种不安全的操作,会破坏数据。所以建议在初始设置时选择一个区段大小,以后不再修改。不同的区段大小意味着不同的 VG 粒度。例如,如果选择的区段大小是 4GB,那么只能以 4GB 的整数倍缩小或扩展 LV。
物理PE到逻辑LE区段的映射图
另外,请注意图 中的区段分配策略。LVM2 并非总是连续分配 PE;细节参见关于 lvm 的 Linux 手册页(见 参考资料 中的链接)。系统管理员可以设置不同的分配策略,但是一般不需要这么做,因为默认策略(名为一般分配策略(normal allocation policy))使用符合常规的规则,比如不把并行的条带放在同一物理卷上。
设备映射器(Device mapper):是一个 Linux 内核模块(也可以是内置的),最早出现在 2.6.9 内核中。它的作用是对设备进行映射 —— LVM2 必须使用这个模块。DM(device mapper)模块支持如镜像,LVM快照,磁盘访问多路径,LVM2逻辑卷,软RAID功能。在大多数主流发行版中,设备映射器会被默认安装。在创建 VG 和 LV 时, 可以给它们起一个有意义的名称。设备映射器的作用就是将这些名称正确地映射到物理设备。设备映射器会在/dev文件系统中创建下面的设备节点:/dev/VG0/LV0 会是/dev/mapper/VG0-LV0节点的链接。
LVM的管理命令
物理卷管理(PV)
1 2 3 4 5 |
pvcreate /dev/sda5 #创建物理卷 pvremove /dev/sda5 #删除一个物理卷数据都会丢失 pvmove /dev/sda5 #移除一个物理卷的数据到其他物理卷 pvscan #扫描物理卷 pvs #显示物理卷信息 |
卷组管理VG
1 2 3 4 5 6 7 8 |
vgcreate VG_NAME /dev/PV #创建卷组根据PV vgcreate -s # VG_NAME /dev/PV #创建卷组指定PE大小默认4M vgremove VG_NAME #删除卷组 vgrename VG_NAME NEW_NAME #重命名卷组 vgreduce VG_NAME /dev/VG #在卷组中减少物理卷;要先移除数据 vgextend VG_NAME /dev/VG #在卷组中扩展物理卷 vgscan #扫描卷组 vgs #显示卷组 |
逻辑卷管理LV
1 2 3 4 |
lvcreate -L +10G -n LV_NAME VG_NAME #创建逻辑卷 lvremove /dev/VG/LV #删除逻辑卷 lvscan #扫描卷组 lvs #查看逻辑卷信息 |
扩展LV
1 2 |
lvextend -L +10G /dev/VG_NAME/LV_NAME #扩展逻辑卷 resize2fs -p /dev/VG_NAME/LV_NAME #扩展逻辑边界到物理边界 |
缩减LV
1)不能在线缩减需先卸载:命令(df -lh)
2)确保缩减后的空间依然可以存储原有的所有数据:命令(umount)
3)在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态:命令(fce2fs -f)
然后先缩减逻辑边界,在缩减物理边界
1 2 |
resize2fs /dev/VG_NAME/LV_NAME 10G #缩减逻辑边界至10G lvreduce -L 10G /dev/VG_NAME/LV_NAME #缩减物理边界至10G |
实例:创建一个逻辑卷并挂载使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
1.先创建两个主分区类型为8e [root@localhost ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) [root@localhost ~]# partprobe [root@localhost ~]# cat /proc/partitions | grep sdb 8 16 20971520 sdb 8 17 5253223 sdb1 2.创建物理卷 [root@localhost ~]# pvcreate /dev/sdb1 3.创建卷组,组名vg [root@localhost ~]# vgcreate vg /dev/sdb1 4.创建逻辑卷,卷名lv,大小2G [root@localhost ~]# lvcreate -L +2G -n lv vg 5.格式化逻辑卷 [root@localhost ~]# mkfs -t ext3 /dev/vg/lv 6.挂载逻辑卷 [root@localhost ~]# mount /dev/vg/lv /mnt/ [root@localhost ~]# df -H | grep /mnt /dev/mapper/vg-lv 2.2G 71M 2.0G 4% /mnt 7.自动挂载逻辑卷(/etc/fstab文件中添加一行) /dev/vg/lv /tmp ext3 defaults 0 2 8.扩展逻辑卷 [root@localhost ~]# lvextend -L +2G /dev/vg/lv [root@localhost ~]# resize2fs -p /dev/vg/lv [root@localhost ~]# df -H | grep /mnt /dev/mapper/vg-lv 4.3G 72M 4.0G 2% /mnt 9.创建文件 [root@localhost ~]# mkdir /mnt/ywnds && touch /mnt/1.txt [root@localhost ~]# ls /mnt/ lost+found ywnds 1.txt 10.查看逻辑卷的状态 [root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/vg/lv LV Name lv VG Name vg LV UUID yOFy4U-1kao-o3A6-GPHd-bDko-sOPw-vwi8sV LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-08-25 06:08:50 +0800 LV Status available # open 1 LV Size 4.00 GiB Current LE 1024 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 |
PS:最后说一下,有人可能会有疑惑,为什么挂载之后的大小跟我们分给LV的不同,这就是因为上面提到的区段PE大小的原因,因为PE和LE是一一对应的所以在创建LV时会根据PE大小的倍数进行创建。
快照卷Snapshot
Linux LVM 实现了一种称为快照(Snapshot)的特性,它的作用就像是 “拍摄” 逻辑卷在某一时刻的照片。通过使用快照, 可以获得同一 LV 的两个拷贝 —— 一个可以用于备份,另一个继续用于日常操作。
快照卷的好处:
1)快照的创建非常快,不需要停止生产环境;
2)建立两个拷贝,但是它们的大小并不一样。快照使用的空间仅仅是存储两个 LV 之间的差异所需的空间;
注意事项:
3)生命周期为整个数据时长,在这段时长内,数据的增长不能超出快照卷大小;
4)快照卷是只读的;
5)快照卷应该跟原卷在同一个卷组(默认都是在VG下);
快照卷的使用方式(接着上一个实例做)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
11.为LV创建快照卷 [root@localhost ~]# lvcreate -s -L 200M -n snap /dev/vg/lv 12.查看快照卷状态 [root@localhost ~]# lvdisplay /dev/vg/snap 13.挂载快照卷(就可以复制数据进行备份了) [root@localhost ~]# mount /dev/vg/snap /media [root@localhost ~]# ls /media/ 1.txt lost+found ywnds 14.移除快照卷 [root@localhost ~]# umount /media/ [root@localhost ~]# lvremove /dev/VG/SNAPSHOT |
更好的容错能力
最近的 LVM2 开发成果为逻辑卷提供了高可用性。逻辑卷可以有两个或更多的镜像,镜像可以放在不同的物理卷(或不同的设备)上。当在设备上发现 I/O 错误时,可以使用 dmeventd 让一个 PV 离线,而不会影响服务。更多信息请参考 lvcreate(8)、lvconvert(8) 和 lvchange(8) 手册页。
文件系统管理
系统工程师对文件系统的管理操作有:超级块在哪里,超级块备份的够不够,文件系统有多大,GDT在哪里备份的够不够里面存放有哪些信息,分了多少个磁盘块,有没有产生磁盘碎片,需不需要修复,一共有多少块组,磁盘的分区,格式化,挂载等等。