Linux常见的物理设备数据备份和负载均衡模式
- 1. LVM技术说明
- 2. 相关概念
- 3. 常用命令
- 3.1 安装lvm命令
- 3.2 创建分区
- 3.3 格式化成LVM
- 3.4 其他格式化
- 4. 常用场景
- 4.1 创建LVM并挂载
- 4.2 LVM扩容
- 4.2.1 xfs扩容
- 4.2.2 ext4扩容
- 4.2 缩减逻辑卷lv
- 4.3 缩减vg:(迁移到闲置设备)
- 4.4 LVM快照创建
- 4.5 删除设备
- 5. 参考文档
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的 文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
1. LVM技术说明
Linux的LVM(Logical Volume Manager)是一种磁盘管理工具,可以用来对Linux系统中的磁盘进行灵活的管理和分区。
LVM可以将多个物理硬盘或分区组合在一起形成一个逻辑卷组(Volume Group),然后再从逻辑卷组中创建逻辑卷(Logical Volumes)。逻辑卷可以被格式化为文件系统,并且可以像普通分区一样挂载到文件系统树中的任意位置。
LVM的主要优点有:
- 可以动态地扩展和缩小逻辑卷的大小,而无需重新分区或格式化磁盘。
- 可以将不同的物理硬盘或分区组合在一起,形成一个大的逻辑卷组,从而充分利用磁盘空间。
- 可以对逻辑卷进行快照备份,以便在数据损坏或删除时进行恢复。
- 可以通过移动数据块的方式进行数据迁移,从而实现数据的高可用性和负载均衡。
2. 相关概念
- PV(Physical Volume):物理空间的意思,其实就是指一个分区(如/dev/sdb1 )或者是一个盘(如/dev/sdb)
- VG(Volume Group):相当于一个Pool,由多个PV组成的pool
- LV(Logical Volume):用来建立一个文件系统的空间,这个空间来源于VG,大小随意,可以扩展。(比如/dev/mapper/rhel-root这个目录其实是一个文件系统挂载点,这个点就是承载在一个LV上,这个文件系统的大小就是这个LV的大小。 )
3. 常用命令
3.1 安装lvm命令
yum install lvm2 -y
常用的命令如下
PV:Physical(物理卷) pvcreate、pvs 、pvdisplay 、pvremove、pvmove、pvscan
VG:Volume Group(卷组) vgcreate、vgs、vgdisplay、vgremove、vgrename、vgreduce、vgextent
LV:logical Volume(逻辑卷) lvs、lvdisplay、lvremove、lvextend、lvresize、lvscan、lvrename
3.2 创建分区
[root@node1 ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x39094458
Device Boot Start End Blocks Id System
Command (m for help): n Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +3G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (394-1305, default 394):
Using default value 394Last cylinder, +cylinders or +size{K,M,G} (394-1305, default 1305): +5G
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x39094458
Device Boot Start End Blocks Id System
/dev/sdb1 1 393 3156741 83 Linux
/dev/sdb2 394 1047 5253255 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3.3 格式化成LVM
[root@node1 ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x39094458
Device Boot Start End Blocks Id System
/dev/sdb1 1 393 3156741 83 Linux
/dev/sdb2 394 1047 5253255 83 Linux
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)
Command (m for help): tPartition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x39094458
Device Boot Start End Blocks Id System
/dev/sdb1 1 393 3156741 8e Linux LVM
/dev/sdb2 394 1047 5253255 8e Linux LVM
Command (m for help): wThe partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3.4 其他格式化
# 格式化成xfs
mkfs.xfs -n ftype=1 /dev/vdb -f
# 格式化成ext4
mkfs.ext4 /dev/vdb
4. 常用场景
4.1 创建LVM并挂载
[root@localhost ~]# pvcreate /dev/vdb1 ##创建物理卷
[root@localhost ~]# vgcreate -s 8M vg0 /dev/vdb1 ##创建物理卷组vg0,PE为8M
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0 ##在卷组vg0上创建名为lv0,大小为300M的逻辑卷
[root@localhost ~]# mkfs.xfs -n ftype=1 /dev/vg0/lv0 -f ##格式化逻辑卷并改系统格式为xfs
[root@localhost ~]# mkfs.ext4 /dev/vg0/lv0 ##格式化逻辑卷并改系统格式为ext4
[root@localhost ~]# mount /dev/vg0/lv0 /mnt ##挂载【linux下的文件系统需要被挂载后才能使用】
[root@localhost ~]# df -h
4.2 LVM扩容
4.2.1 xfs扩容
分为2种情况
- 情况1: vg足够扩展
[root@localhost ~]# lvextend -L 500M /dev/vg0/lv0 ##扩展逻辑卷空间到500M
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ##扩展文件系统
- 情况2:vg不够拉伸,得先扩大设备再扩大系统
先申请设备并扩容,确保vg足够
[root@localhost ~]# pvcreate /dev/vdb2 ##创建物理卷/dev/vdb2
[root@localhost ~]# vgextend vg0 /dev/vdb2 ##将新的物理卷vdb2添加到现有的卷组vg0
扩展逻辑卷
[root@localhost ~]# lvextend -L 1500M /dev/vg0/lv0 ##增加逻辑卷空间到1500M
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ## 扩容xfs文件系统
4.2.2 ext4扩容
分为2种情况
- 情况1: vg足够扩展
[root@localhost ~]# lvextend -L 500M /dev/vg0/lv0 ##扩展逻辑卷空间到500M
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ##扩展文件系统
- 情况2:vg不够拉伸,得先扩大设备再扩大系统
先申请设备并扩容,确保vg足够
[root@localhost ~]# pvcreate /dev/vdb2 ##创建物理卷/dev/vdb2
[root@localhost ~]# vgextend vg0 /dev/vdb2 ##将新的物理卷vdb2添加到现有的卷组vg0
扩展逻辑卷
[root@localhost ~]# lvextend -L 1500M /dev/vg0/lv0 ##增加逻辑卷空间到1500M
[root@localhost ~]# resize2fs /dev/vg0/lv0 ## 扩容ext4文件系统
4.2 缩减逻辑卷lv
[root@localhost ~]# umount /mnt ##先卸载
[root@localhost ~]# e2fsck -f /dev/vg0/lv0 ##扫描逻辑卷上的空余空间
[root@localhost ~]# resize2fs /dev/vg0/lv0 1000M ##设备文件减少到1000M
[root@localhost ~]# lvreduce -L 1000M /dev/vg0/lv0 ##将逻辑卷减少到1000M
[root@localhost ~]# mount /dev/vg0/lv0 /mnt ##挂载
4.3 缩减vg:(迁移到闲置设备)
[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2 ##将vdb1的空间数据转移到vdb2
/dev/vdb1: Moved: 88.0%
/dev/vdb1: Moved: 100.0% ##转移数据成功
[root@localhost ~]# vgreduce vg0 /dev/vdb1 ##将/dev/vdb1分区从vg0卷组中移除
Removed "/dev/vdb1" from volume group "vg0"
[root@localhost ~]# pvremove /dev/vdb1 ##把/dev/vdb1分区从系统中删除
Labels on physical volume "/dev/vdb1" successfully wiped
注意:将vdb1的空间数据转移到vdb2时,要确保vdb2的足够的空间能将vdb1的数据转移,否则需要先将vdb1缩减。
4.4 LVM快照创建
[root@localhost ~]# touch /mnt/file{1..5}
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 ##建立一个50M的快照
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt ##挂载快照
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
[root@localhost mnt]# rm -fr * ##删除所有文件
[root@localhost mnt]# cd
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/vg0/lv0backup ##删除快照
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 ##重建快照
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt ##挂载快照
[root@localhost ~]# ls /mnt ##又可以看到之前建立的文件
结论: LVM的快照可以将某一时刻的信息记录到快照区中,因此,可以利用这一特点对数据做完全备份。
4.5 删除设备
[root@localhost ~]# umount /mnt ##卸载
[root@localhost ~]# df
[root@localhost ~]# lvremove /dev/vg0/lv0backup ##删除快照
[root@localhost ~]# lvremove /dev/vg0/lv0 ##删除逻辑卷
[root@localhost ~]# vgremove vg0 ##删除物理卷组
[root@localhost ~]# pvremove /dev/vdb{1..2} ##删除物理卷
5. 参考文档
暂无