LVM管理 快照卷 补充部分(dd diff patch)
涉及到的命令:pvcreate、pvdisplay、pvs、pvremove、pvmove、vgcreate、vgdisplay、vgs、vgscan、vgremove、vgextend、vgreduce、lvcreate、lvdisplay、lvs、lvscan、lvresize、lvextend、lvreduce、lvremove、resize2fs、dd、diff、patch
Logical Volume Manager 逻辑卷管理
======================理论部分=====================
使用DM的机制(device mapper 设备映射)
功用:将一个或多个底层设备(包括RAID)组织一个逻辑存储空间,其边界可以动态扩展或缩减
PE
pysical extent 物理块;LVM寻址的最小单元,默认4M,可以修改。所以物理卷是由大小相等基本单元PE组成
LE
logical extent 逻辑块;逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应
三个层次组成
PV --> VG --> LV
PV 物理卷,是lvm的基本存储逻辑块
VG 卷组,由多个物理卷(PV)组成,形成一个大的资源池
LV 逻辑卷,建立在卷组之上(VG),可以在LV之上进行建立文件系统,然后挂载使用
可以想像成多个分区创建为PV,然后一个或者多个PV组成VG,在VG中划出一定的空间给到VG,可以针对VG进行格式化文件系统,然后挂载使用
PV相关命令
pvcreate pvdisplay pvs pvscan pvremove(删除pv) pvmove(数据移到别的pv)
VG相关命令
vgcreate vgdisplay vgs vgscan vgremove vgextend(扩展) vgreduce(缩小)
LV相关命令
lvcreate lvdisplay lvs lvscan lvresize lvextend(扩展) lvreduce(缩小) lvremove
注意:创建块设备(分区),其ID要调整为8e Linux LVM
创建PV:
/dev/sda6 5419 6724 10487426+ 8e Linux LVM(类型为8e Linux LVM)
[root@localhost ~]# pvcreate /dev/sda6
WARNING: software RAID md superblock detected on /dev/sda6. Wipe it? [y/n]: y
Wiping software RAID md superblock on /dev/sda6.
Physical volume "/dev/sda6" successfully created
[root@localhost ~]# pvcreate /dev/sdb1
WARNING: software RAID md superblock detected on /dev/sdb1. Wipe it? [y/n]: y
Wiping software RAID md superblock on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda6 lvm2 --- 10.00g 10.00g
/dev/sdb1 lvm2 --- 10.00g 10.00g
[root@localhost ~]# pvdisplay
"/dev/sda6" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda6
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID PTLDyi-ygp9-uXlm-I5sa-j3zG-iszK-D1BvPl
"/dev/sdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID qv5k83-mgj3-UTeG-e326-3mfa-6Mqa-GVqXgU
一个或者多个PV组合创建成VG
vgcreate 常用选项
-s 指明pe size 大小 ,如果不指明大小,默认为4M
-t 仅做测试,不实际创建
-v 显示过程
[root@localhost ~]# vgcreate test_vg /dev/sda6 /dev/sdb1
Volume group "test_vg" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
test_vg 2 0 0 wz--n- 20.00g 20.00g
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name test_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 20.00 GiB
PE Size 4.00 MiB
Total PE 5120
Alloc PE / Size 0 / 0
Free PE / Size 5120 / 20.00 GiB
VG UUID CPb57B-VPO8-6U53-6wYn-dlrT-7O4T-RBUDB7
在VG中新建LV
LV (注意:lv的大小必须为pv的整数倍)
格式:lvcreate -L #[KMGTP] -n lv_name vg_name
[root@localhost ~]# lvcreate -L 10G -n test_lv test_vg
Logical volume "test_lv" created.
lv创建后的路径是:/dev/vg_name/lv_name 或者 /dev/mapper/vg_name-lv_name 实际路径为:/dev/dm-#
[root@localhost ~]# ll /dev/test_vg/test_lv
lrwxrwxrwx. 1 root root 7 10月 28 23:16 /dev/test_vg/test_lv -> ../dm-0
[root@localhost ~]# ll /dev/mapper/test_vg-test_lv
lrwxrwxrwx. 1 root root 7 10月 28 23:16 /dev/mapper/test_vg-test_lv -> ../dm-0
=====================================================
缩减vg:通过vg中移出pv实现
注意:计划移出的pv不能包含已经存储数据的pe,如果有,需要先使用pvmove把数据移到别的pv上
pvmove /dev/some_pv
vgreduce VG_NAME /dev/some_pv
扩展vg,向vg中添加更多的pv来实现
vgextend VG_NAME /dev/some_pv
=====================================================
扩展lv
可以动态的,不影响数据的情况下,在线扩展
存储设备有:物理边界 (分区大小)
文件系统有:逻辑边界
对于扩展而言,要先扩展物理边界,然后拉伸逻辑边界
扩展lv过程:
1、确定目标大小,要确保此lv中有足够的空闲空间可用
2、扩展物理边界( 如果是从2G-->4G,可以直接指定4G,或者+2G;“+”的作用)
lvextend -L [+]#[bkmgt...] /dev/vgname/lvname
3、拉伸逻辑边界
resizee2fs /dev/vg_name/lv_name
缩减lv (有风险)
1、缩减要离线
2、首先要缩减文件系统大小,再缩减lv的大小
过程:
1、确定目标大小,缩减后的大小能够容纳现有数据大小
2、卸载逻辑卷,并强制做文件系统一致性检查(e2fsck -f /dev/vg_name/lv_name)
3、缩减逻辑边界
resize2fs /dev/vg_name/lv_name #[bKMG...]
4、缩减物理边界
lvreduce -L [-]#[BKMG...] /dev/vg_name/lv_name
=====================================================
快照卷
作用:访问原卷上数据的另一个路径,备份工具可以通过此路径完成数据备份
原因:通过原卷直接备份,可能会造成时间点不一致,通过快照卷就可以避免此问题,如果数据的时间点未发生改变,则直接从原卷上复制,原卷上的数据改变前复制一份到快照卷,数据时间点发生改变,则从快照卷中复制而不是从原卷中复制
注意:快照卷自身仅是为了备份工具提供一个时间点一致的访问路径
快照卷的生命周期:备份开始之前创建快照卷,完成之后即可删除
如何保证通过快照缩放访问到的数据的时间点一致?
通过把那些将要发生改变的,位于原卷上的数据自动复制一份到快照卷,因此快照卷上的数据如果有效,则必须能完成存储原卷即将发生改变的所有数据的原来版本。(快照卷只读)
创建快照卷
1、快照卷要与原卷在同一卷组中,因此创建快照卷无需指定卷组
2、快照卷的大小要精心设定,另外快照卷是只读的(在复制的时间内,快照卷的大小要能保证超过原卷数据变动的大小)
lvcreate
-s --snapshot快照
-p permission [r|rw] 权限只读或读写
格式:lvcreate -L SIZE -n NAME -p r -s /dev/VGNAME/LVNAME
如:lvcreate -L 50M -n mylv-snapshot -p r -s /dev/myvg/mylv
复制完成以后就可以删除快照卷
umount /MNT 挂载点
lvremove /dev/myvg/mylv-snapshot
=========================================================
补充部分
dd命令
dd if= of= bs= count=
if:源文件
of:目标文件
bs:block size ,一次io的数据量
count: 复制多少个bs
如果不指定bs count 则表示复制整个文件
两个设备文件
/dev/null
/dev/zero
dd if=/dev/zero of=/tmp/test bs=1M count=64 #创建一个大小为64M的文件
应用1:
可以把创建的回环文件当作swap分区文件来使用:
mkswap /tmp/test
swapon /tmp/test
应用2:
备份MBR
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
应用3:破坏mbr
dd if=/dev/zero of=/dev/sda bs=512 count=1
文本比较、补丁制作及打补丁工具
diff
diff -u file1 file2 (一般把file2代表新文件,放在后面)
patch
diff -u file.old file.new > file.patch 制作补丁文件
patch file.old < file.patch 将补丁文件打到原文件上
==============================================================
练习题:
1、创建一个至少有两个物理卷组成的大小为20G的卷组,要求PE大小为8M,而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl
A、创建两个分区,各10G,ID调整为8e Linux LVM,过程略
B、创建PV
[root@localhost ~]# pvcreate /dev/sdb2 /dev/sda7
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sda7" successfully created
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda6 test_vg lvm2 a-- 10.00g 0
/dev/sda7 lvm2 --- 10.00g 10.00g
/dev/sdb1 test_vg lvm2 a-- 10.00g 10.00g
/dev/sdb2 lvm2 --- 10.00g 10.00g
C、创建VG,指定PE大小为8M,命名为MYVG
[root@localhost ~]# vgcreate MYVG -s 8M /dev/sda7 /dev/sdb2
Volume group "MYVG" successfully created
D、在卷组中创建一个大小为5G的逻辑卷MYLV1
[root@localhost ~]# lvcreate -L 5G -n MYLV1 MYVG
Logical volume "MYLV1" created.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
MYLV1 MYVG -wi-a----- 5.00g
test_lv test_vg -wi-ao---- 10.00g
E、格式化为ext4文件系统,修改/etc/fstab开机自动挂载并支持acl
[root@localhost ~]# mkfs.ext4 /dev/MYVG/MYLV1
[root@localhost ~]# blkid /dev/MYVG/MYLV1
/dev/MYVG/MYLV1: UUID="968ea16b-f515-4b0e-a8f4-50b4c5dfc825" TYPE="ext4"
[root@localhost ~]# mkdir /users
[root@localhost ~]# echo "UUID=968ea16b-f515-4b0e-a8f4-50b4c5dfc825 /users ext4 defaults,acl 0 0" >> /etc/fstab
[root@localhost ~]# tail -3 /etc/fstab
proc /proc proc defaults 0 0
UUID=786b54c9-d523-421f-80e3-535618f88b4a /backup ext4 defaults,noatime,acl 0 0
UUID=968ea16b-f515-4b0e-a8f4-50b4c5dfc825 /users ext4 defaults,acl 0 0
[root@localhost ~]# mount -a
2、新建用户magedu,其家目录为/users/magedu,而后su切换至此用户,复制多个文件到家目录
A、新建用户,指定家目录
[root@localhost ~]# useradd -d /users/magedu magedu
[root@localhost ~]# ll /users/
总用量 20
drwx------. 2 root root 16384 10月 29 13:54 lost+found
drwx------. 4 magedu magedu 4096 10月 29 14:01 magedu
B、su切换到magedu,复制多个文件到家目录
[root@localhost ~]# su magedu
[magedu@localhost root]$ cd
复制过程略
[magedu@localhost ~]$ ll
总用量 108
drwxr-xr-x. 2 magedu magedu 4096 10月 29 14:06 account
drwxr-xr-x. 15 magedu magedu 4096 10月 29 14:06 cache
......太多,省略
drwxr-xr-x. 6 magedu magedu 4096 10月 29 14:06 www
drwxr-xr-x. 3 magedu magedu 4096 10月 29 14:06 yp
[magedu@localhost ~]$ du -sh
398M .
3、扩展mylv1至9G,确保扩展完成后原数据完全可用
扩展可以在线扩展,不影响数据
A、先扩展LV(从5G扩展至9G 可以:lvextend -L +4G 或者lvextend -L 9G两种方式都可以)
[root@localhost ~]# lvextend -L +4G /dev/MYVG/MYLV1
Size of logical volume MYVG/MYLV1 changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents).
Logical volume MYLV1 successfully resized
B、调整文件系统大小
[root@localhost ~]# resize2fs /dev/MYVG/MYLV1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/MYVG/MYLV1 is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/MYVG/MYLV1 to 2359296 (4k) blocks.
The filesystem on /dev/MYVG/MYLV1 is now 2359296 blocks long.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
MYLV1 MYVG -wi-ao---- 9.00g
test_lv test_vg -wi-ao---- 10.00g
大小没变,文件内容也正常,数据无损
[root@localhost ~]# du -sh /users/magedu/
398M /users/magedu/
4、缩减mylv1至7G,确保缩减后数据可用
A、必须先卸载,离线进行
[root@localhost ~]# umount /users/
B、磁盘检查
[root@localhost ~]# e2fsck -f /dev/MYVG/MYLV1
C、调整文件系统大小
[root@localhost ~]# resize2fs /dev/MYVG/MYLV1 7G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/MYVG/MYLV1 to 1835008 (4k) blocks.
The filesystem on /dev/MYVG/MYLV1 is now 1835008 blocks long.
D、缩减LV大小(从9G缩减至7G,可以:lvreduce -L -2G 或者lvreduce -L 7G 是一样的)
[root@localhost ~]# lvreduce -L -2G /dev/MYVG/MYLV1
WARNING: Reducing active logical volume to 7.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce MYLV1? [y/n]: y
Size of logical volume MYVG/MYLV1 changed from 9.00 GiB (1152 extents) to 7.00 GiB (896 extents).
Logical volume MYLV1 successfully resized
F、挂载后检查数据
[root@localhost ~]# mount /dev/MYVG/MYLV1 /users/
[root@localhost ~]# du -sh /users/
398M /users/
[root@localhost ~]# cat /users/magedu/fstab
#
# /etc/fstab
# Created by anaconda on Tue Oct 27 22:23:02 2015
......内容略
5、对mylv1创建快照,并通过备份数据,要求保留原有的属主属组等信息
A、创建快照
[root@localhost ~]# lvcreate -L 80M -n MYLV1-snapshot -p r -s /dev/MYVG/MYLV1
Logical volume "MYLV1-snapshot" created.
可以看出,创建完后文件系统类型同快照源
[root@localhost mnt]# blkid /dev/MYVG/MYLV1-snapshot
/dev/MYVG/MYLV1-snapshot: UUID="968ea16b-f515-4b0e-a8f4-50b4c5dfc825" TYPE="ext4"
B、挂载验证:
[root@localhost ~]# mount /dev/MYVG/MYLV1-snapshot /mnt/
修改一下源文件
[root@localhost mnt]# echo `date +%F-%H-%M-%S` >> /users/magedu/fstab
[root@localhost mnt]# tail -3 /users/magedu/fstab
UUID=786b54c9-d523-421f-80e3-535618f88b4a /backup ext4 defaults,noatime,acl 0 0
UUID=968ea16b-f515-4b0e-a8f4-50b4c5dfc825 /users ext4 defaults,acl 0 0
2015-10-29-15-32-15
源文件修改后,到快照中查看发现,此文件仍是原来的样子,所以通过快照卷进行数据备份就能解决数据时间点不一致的问题
[root@localhost mnt]# tail -3 /mnt/magedu/fstab
proc /proc proc defaults 0 0
UUID=786b54c9-d523-421f-80e3-535618f88b4a /backup ext4 defaults,noatime,acl 0 0
UUID=968ea16b-f515-4b0e-a8f4-50b4c5dfc825 /users ext4 defaults,acl 0 0