LVM思维导图
一、什么是逻辑卷
LV:Logical Volume,逻辑卷
LVM:Logical Volume Manager,逻辑卷管理
相对于传统的标准分区(直接对磁盘进行分区,例如/dev/sda1、/dev/sda2等),逻辑卷可以方便的进行动态扩展。当空间不够时,我们可以对分区进行扩展,当硬盘空间不够的时候,我们可以扩展硬盘。
几个概念:
PV:物理卷,由普通分区变化而来,代表一个物理分区。
VG:卷组,由多个PV组成的虚拟硬盘。相当于一个空间池。
LV:逻辑卷,在VG中划分出来的分区。
二、创建逻辑卷
1.管理物理卷-PV
1)扫描已存在的PV
[root@centos7 /]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 centos lvm2 a-- 39.31g 44.00m [root@centos7 /]# pvscan PV /dev/sda3 VG centos lvm2 [39.31 GiB / 44.00 MiB free] Total: 1 [39.31 GiB] / in use: 1 [39.31 GiB] / in no VG: 0 [0 ]
可以看到,我们的系统中已经存在一个物理卷了。
2)将LVM类型的分区创建为PV
在[RH134] 8-磁盘管理中,我们在sdb磁盘中创建了几个逻辑分区:
[root@centos7 /]# fdisk -l ... ... Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 83 Linux /dev/sdb2 4196352 8390655 2097152 82 Linux swap / Solaris /dev/sdb3 8390656 41943039 16776192 5 Extended /dev/sdb5 8392704 12587007 2097152 8e Linux LVM /dev/sdb6 12589056 16783359 2097152 8e Linux LVM /dev/sdb7 16785408 20979711 2097152 8e Linux LVM /dev/sdb8 20981760 25176063 2097152 8e Linux LVM
可以看到,sdb5-8都是Linux LVM类型的分区。
将这几个分区全部创建为PV:
[root@centos7 /]# pvcreate /dev/sdb{5..8} Physical volume "/dev/sdb5" successfully created. Physical volume "/dev/sdb6" successfully created. Physical volume "/dev/sdb7" successfully created. Physical volume "/dev/sdb8" successfully created.
查看PV:
[root@centos7 /]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 centos lvm2 a-- 39.31g 44.00m /dev/sdb5 lvm2 --- 2.00g 2.00g /dev/sdb6 lvm2 --- 2.00g 2.00g /dev/sdb7 lvm2 --- 2.00g 2.00g /dev/sdb8 lvm2 --- 2.00g 2.00g
可以看到,我们创建的4个PV,都还没有加入到VG中。
3)删除PV
[root@centos7 /]# pvremove /dev/sdb{5..8} Labels on physical volume "/dev/sdb5" successfully wiped. Labels on physical volume "/dev/sdb6" successfully wiped. Labels on physical volume "/dev/sdb7" successfully wiped. Labels on physical volume "/dev/sdb8" successfully wiped. [root@centos7 /]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 centos lvm2 a-- 39.31g 44.00m
2.管理卷组-VG
有了PV,我们就可以创建VG了。
1)查看已存在的VG
[root@centos7 /]# vgscan Reading volume groups from cache. Found volume group "centos" using metadata type lvm2 [root@centos7 /]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 39.31g 44.00m
可以看到已经存在一个VG叫做centos。
2)创建一个VG
[root@centos7 /]# vgcreate vg0 /dev/sdb{5..7} Volume group "vg0" successfully created [root@centos7 /]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 39.31g 44.00m vg0 3 0 0 wz--n- <5.99g <5.99g [root@centos7 /]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 centos lvm2 a-- 39.31g 44.00m /dev/sdb5 vg0 lvm2 a-- <2.00g <2.00g /dev/sdb6 vg0 lvm2 a-- <2.00g <2.00g /dev/sdb7 vg0 lvm2 a-- <2.00g <2.00g /dev/sdb8 lvm2 --- 2.00g 2.00g
我们将/dev/sdb5-7三个PV创建为一个VG,名为vg0。
3)扩展VG
[root@centos7 /]# vgextend vg0 /dev/sdb8 Volume group "vg0" successfully extended
我们将/dev/sdb8加进了vg0(扩展了2G空间)。
直接使用新硬盘进行扩展:
[root@centos7 /]# vgextend vg0 /dev/sdc Physical volume "/dev/sdc" successfully created. Volume group "vg0" successfully extended [root@centos7 /]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 39.31g 44.00m vg0 5 0 0 wz--n- 17.98g 17.98g
我们有一个新的硬盘sdc,可以直接使用vgextend将其加入到vg0中,可以看到,加入后,我们的vg0包含/dev/sdb{5..8}的4个分区,以及sdc整个硬盘,一共5个PV。
但是建议不要直接使用硬盘扩展,最好还是在新的硬盘上先创建一个Linux LVM类型的分区,然后再进行扩展。
4)将某个分区踢出VG
[root@centos7 /]# vgreduce vg0 /dev/sdc Removed "/dev/sdc" from volume group "vg0" [root@centos7 /]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 39.31g 44.00m vg0 4 0 0 wz--n- 7.98g 7.98g
我们使用vgreduce将sdc踢出了vg0卷组。
5)查看VG详细信息
[root@centos7 /]# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 7.98 GiB PE Size 4.00 MiB Total PE 2044 Alloc PE / Size 0 / 0 Free PE / Size 2044 / 7.98 GiB VG UUID 83AgDb-rZwC-wGSz-l9Y7-ClC8-U65U-9y2FWN --- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 39.31 GiB PE Size 4.00 MiB Total PE 10064 Alloc PE / Size 10053 / <39.27 GiB Free PE / Size 11 / 44.00 MiB VG UUID G60zey-nXwM-Trvj-aP37-uJvH-c5p7-jnI2N0
使用vgdisplay显示所有VG的详细信息。
[root@centos7 /]# vgdisplay vg0 --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 7.98 GiB PE Size 4.00 MiB Total PE 2044 Alloc PE / Size 0 / 0 Free PE / Size 2044 / 7.98 GiB VG UUID 83AgDb-rZwC-wGSz-l9Y7-ClC8-U65U-9y2FWN
跟上VG的名字,查看某个VG的详细信息。
注意其中的 PE Size ,这是VG的最小扩展单位,即VG都是很多4MB累积起来的。以后在创建LV的时候,大小也必须是PE Size的整数倍。
当然,PE Size是可以修改的,但是是在VG创建的时候指定的,VG创建好了之后就不能修改了。
6)创建VG时,指定PE Size
[root@centos7 /]# vgcreate -s 8 vg0 /dev/sdb{5..8} Volume group "vg0" successfully created
在创建vg0时,指定PE Size的大小为8M,即VG和LV的大小都必须是8M的倍数。
7)给VG修改名字
[root@centos7 /]# vgrename vg0 myvg Volume group "vg0" successfully renamed to "myvg"
3.管理逻辑卷-LV
前面创建好了VG之后,我们就可以在VG的基础上创建LV逻辑卷了(这里注意PE Size,我们的LV大小必须是PE的整数倍)。
1)查看已存在的LV
[root@centos7 /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 35.39g swap centos -wi-ao---- <3.88g [root@centos7 /]# lvscan ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit ACTIVE '/dev/centos/root' [35.39 GiB] inherit
可以看到,已经存在两个LV,这两个LV是我们装系统的时候自动创建的,一个用于交换分区,一个用于挂载到根目录"/"下。
2)创建LV
在vg0上创建一个LV:
[root@centos7 /]# lvcreate -L 200M -n lv0 vg0 Logical volume "lv0" created.
其中"-L"表示要创建的LV的大小,这里指定200M。"-n"表示逻辑卷的名字,这里指定为lv0。
注意,这里指定的大小如果不是PE的整数倍,则会自动被扩展到最近的整数倍,例如我们指定198M,则会自动创建一个200M的逻辑卷。
我们在指定lv大小的时候,还可以以PE的个数来指定:
[root@centos7 /]# lvcreate -l 20 -n lv1 vg0 Logical volume "lv1" created. [root@centos7 /]# lvdisplay /dev/vg0/lv1 --- Logical volume --- LV Path /dev/vg0/lv1 LV Name lv1 VG Name vg0 LV UUID 8DolRO-0fes-KpCW-Egtb-ViwL-zNJh-n6j5Ao LV Write Access read/write LV Creation host, time centos7, 2020-03-30 22:08:48 +0800 LV Status available # open 0 LV Size 160.00 MiB Current LE 20 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3
这里的LV Size = PE * 20 = 160M。
按VG剩余空间比例来创建LV:
[root@centos7 /]# lvcreate -l 20%free -n lv2 vg0 Logical volume "lv2" created. [root@centos7 /]# lvdisplay /dev/vg0/lv2 --- Logical volume --- LV Path /dev/vg0/lv2 LV Name lv2 VG Name vg0 LV UUID uFoXba-g71h-ckNf-A2Gm-phzE-QtFM-hHah0Y LV Write Access read/write LV Creation host, time centos7, 2020-03-30 22:18:30 +0800 LV Status available # open 0 LV Size 1.52 GiB Current LE 195 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:4
这里使用vg0剩余空间的20%来创建一个LV,大小为1.52GB,PE数量为195。
3)查看LV的详细信息
和VG差不多,使用lvdisplay来查看全部或某个LV的详细信息:
[root@centos7 /]# lvdisplay /dev/vg0/lv1 --- Logical volume --- LV Path /dev/vg0/lv1 LV Name lv1 VG Name vg0 LV UUID 8DolRO-0fes-KpCW-Egtb-ViwL-zNJh-n6j5Ao LV Write Access read/write LV Creation host, time centos7, 2020-03-30 22:08:48 +0800 LV Status available # open 0 LV Size 160.00 MiB Current LE 20 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3
注意这里的LV已经是一个可以使用的分区,所以这里使用 /dev/vg0/lv1 来表示这个LV。
如果不指定某个具体的LV,则显示所有的LV的详细信息。
4)删除一个LV
[root@centos7 /]# lvremove /dev/vg0/lv2 Do you really want to remove active logical volume vg0/lv2? [y/n]: y Logical volume "lv2" successfully removed
强制删除,直接使用"-f"选项。
5)是否有图形化界面可以配置LV
在RHEL5、RHEL6中,有图形化命令:system-config-lvm,而在RHEL7中,没有提供这个工具。
虽然在RHEL7中还是可以安装这个工具,并使用,但RedHat不提供技术支持,出了问题只能自己负责,所以不推荐使用。
6)格式化逻辑卷
[root@centos7 /]# mkfs.xfs /dev/vg0/lv0 meta-data=/dev/vg0/lv0 isize=512 agcount=4, agsize=12800 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=51200, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=1605, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
逻辑卷的格式化和标准分区的格式化是一样的。
7)挂载逻辑卷,并使用
[root@centos7 /]# mkdir 123 [root@centos7 /]# mount /dev/vg0/lv0 /123 [root@centos7 /]# cd /123 [root@centos7 123]# touch aa [root@centos7 123]# ls aa
创建一个目录/123,然后将lv0挂载到这个目录下,在其中创建文件aa。
查看一下已挂载的分区:
[root@centos7 123]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 11M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 36G 6.3G 30G 18% / /dev/sda2 xfs 494M 165M 330M 34% /boot /dev/sda1 vfat 200M 12M 189M 6% /boot/efi tmpfs tmpfs 376M 36K 376M 1% /run/user/0 /dev/sr0 iso9660 603M 603M 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg0-lv0 xfs 194M 11M 184M 6% /123
可以看到,这里的分区名字被修改成了 /dev/mapper/vg0-lv0 ,这个我们不用关心,我们挂载的时候使用 /dev/vg0/lv0 即可。
如果需要自动挂载,同样是将其写到/etc/fstab中,然后执行 mount -a 即可。
4.扩展LV
在3.中,我们已经创建了逻辑卷,那么当空间不足时,我们如何扩展逻辑卷呢?或者我们想将他多余的空间腾出来给其他的LV用,如果来缩减他呢?
1)扩展LV
先查看一下/dev/vg0/lv0当前的大小:
[root@centos7 123]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 35.39g swap centos -wi-ao---- <3.88g lv0 vg0 -wi-ao---- 200.00m lv1 vg0 -wi-a----- 160.00m
我们给他扩展100M:
[root@centos7 123]# lvextend -L +100M /dev/vg0/lv0 Rounding size to boundary between physical extents: 104.00 MiB. Size of logical volume vg0/lv0 changed from 200.00 MiB (25 extents) to 304.00 MiB (38 extents). Logical volume vg0/lv0 successfully resized. [root@centos7 123]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 35.39g swap centos -wi-ao---- <3.88g lv0 vg0 -wi-ao---- 304.00m lv1 vg0 -wi-a----- 160.00m
注意, -L +100M 表示给这个逻辑卷额外增加100M,所以扩展后的大小为300M。
2)扩展后LV的可用大小没变化?
扩展后的LV,我们使用lvs看到大小已经是300M了,这说明LV的实际大小确实已经被扩展为了300M。
但是我们使用 df -hT 来查看的时候,挂载到/123下的/dev/vg0/lv0的大小还是200M:
[root@centos7 123]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 11M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 36G 6.3G 30G 18% / /dev/sda2 xfs 494M 165M 330M 34% /boot /dev/sda1 vfat 200M 12M 189M 6% /boot/efi tmpfs tmpfs 376M 36K 376M 1% /run/user/0 /dev/sr0 iso9660 603M 603M 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg0-lv0 xfs 194M 11M 184M 6% /123
也就是说,LV虽然扩展了,但是实际可用的大小没变化。这是因为前面可用的200M是我们格式化后的文件系统,而我们后面扩展的100M,是没有文件系统的。
所以,我们需要将扩展的100M纳入文件系统管理。
3)扩展xfs文件系统
[root@centos7 123]# xfs_growfs /123 meta-data=/dev/mapper/vg0-lv0 isize=512 agcount=4, agsize=12800 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=51200, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=1605, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 51200 to 77824 [root@centos7 123]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 11M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 36G 6.3G 30G 18% / /dev/sda2 xfs 494M 165M 330M 34% /boot /dev/sda1 vfat 200M 12M 189M 6% /boot/efi tmpfs tmpfs 376M 36K 376M 1% /run/user/0 /dev/sr0 iso9660 603M 603M 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg0-lv0 xfs 298M 11M 288M 4% /123
使用 xfs_grow 命令,将挂载点 /123 或逻辑卷 /dev/vg0/lv0 作为参数,将文件系统扩展到逻辑卷的大小。
4)扩展ext4文件系统
如果我们的文件系统不是xfs类型,而是ext4。
我们就不能使用xfs_grow来扩展文件系统了,而是使用ext4的方式:
resize2fs /dev/vg0/lv0 # /dev/vg0/lv0为ext4类型文件系统的情况下
注意,resize2fs后面的参数只能跟/dev/vg0/lv0,而不能跟挂载点/123。
5.缩小LV
1)注意事项及操作步骤
- xfs类型的文件系统只支持扩大,不支持缩小,一定要注意。我们使用ext4的文件系统来演示缩小。
- 缩小之前要将挂载的逻辑卷进行卸载
- 卸载后要进行磁盘完整性检查
- 使用resize2fs指定大小,将文件系统进行缩小(此时LV的实际大小还没有缩小)
- 缩小LV的实际大小
2)准备实验环境
我们将/dev/vg0/lv0逻辑卷先转换为ext4类型文件系统。
[root@centos7 /]# umount /123 # 先卸载lv0 [root@centos7 /]# mkfs.ext4 /dev/vg0/lv0 # 将其转换为ext4类型文件系统 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=4 blocks, Stripe width=4 blocks 104448 inodes, 417792 blocks 20889 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=34078720 51 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
查看当前lv0的大小:
[root@centos7 /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 35.39g swap centos -wi-ao---- <3.88g lv0 vg0 -wi-a----- 408.00m lv1 vg0 -wi-a----- 160.00m
当前lv0的大小为400M。而且是未挂载状态。
3)进行完整性检查
[root@centos7 /]# fsck -f /dev/vg0/lv0 fsck from util-linux 2.23.2 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/vg0-lv0: 11/104448 files (0.0% non-contiguous), 23714/417792 blocks
4)缩小ext4文件系统
我们将其从400M缩小到100M。
[root@centos7 /]# resize2fs /dev/vg0/lv0 100M resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg0/lv0 to 102400 (1k) blocks. The filesystem on /dev/vg0/lv0 is now 102400 blocks long. [root@centos7 /]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 35.39g swap centos -wi-ao---- <3.88g lv0 vg0 -wi-a----- 408.00m # 此时lv0逻辑卷的实际大小还是400 lv1 vg0 -wi-a----- 160.00m [root@centos7 /]# mount /dev/vg0/lv0 /123 [root@centos7 /]# df -hT | tail -1 /dev/mapper/vg0-lv0 ext4 89M 1.6M 81M 2% /123
这里注意,我们使用resize2fs后,只是将lv0上的ext4类型的文件系统缩小到了100M(此时lv0逻辑卷的大小还是400M)。而挂载到/123上的逻辑卷可以看到是100M(文件系统的大小)。
5)缩小LV
[root@centos7 ~]# lvreduce -L -300M /dev/vg0/lv0 Rounding size to boundary between physical extents: 296.00 MiB. WARNING: Reducing active and open logical volume to 112.00 MiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg0/lv0? [y/n]: y Size of logical volume vg0/lv0 changed from 408.00 MiB (51 extents) to 112.00 MiB (14 extents). Logical volume vg0/lv0 successfully resized.
6.使用LV的注意事项
1)逻辑卷的优势
- 逻辑卷相对于标准分区,可以灵活的调整大小(方便扩展)。
- 逻辑卷是可以在线扩展和缩小的,也就是无需卸载就可以扩展和缩小。
2)建议
- 装系统的时候,可以不使用标准分区,建议使用逻辑卷
- boot不能放在逻辑卷,只能使用标准分区
- 假设让系统自动分区,系统会自动使用LV创建分区,同时为/boot单独创建一个标准分区
当我们的根目录"/"使用逻辑卷,那么就必须为/boot单独创建一个标准分区。
如果"/"使用标准分区,则就不需要为/boot单独创建分区了。
7.逻辑卷的快照(重要的数据备份方法)
1)快照的原理
逻辑卷的快照相当于在逻辑卷上盖了一层透明的塑料纸,如图:
可以看到,我们为/dev/vg0/lv0做了一个快照,然后挂载到某个文件夹下。当我们访问该文件夹时(第一次访问,即未修改任何数据),其实所有的内容都是访问的逻辑卷的内容(透射过去的)。
当我们将其中的某个数据,例如"1"修改为"11",那么这部分修改的内容,会被记录在这个快照中,占用快照空间12M的一部分。而此时,原逻辑卷的内容是不会受影响的。在快照中,未被修改的数据,例如"2"和"3"还是透射的逻辑卷的内容。
2)为逻辑卷创建一个快照
[root@centos7 ~]# lvcreate -L 12M -n lv_s -s /dev/vg0/lv0 Rounding up size to full physical extent 16.00 MiB Logical volume "lv_s" created.
其中"-n"表示指定一个名字,"-s"表示创建快照snapshot。注意这里我们指定12M大小,但是由于之前我们将vg0的PE修改为了8M,所以这里强制为16M(8M的整数倍)。
创建好快照后,不需要对其格式化,快照是直接使用的。
将其挂载到/bb下:
[root@centos7 /]# mkdir /bb [root@centos7 /]# mount /dev/vg0/lv_s /bb
3)查看快照信息
[root@centos7 bb]# lvscan ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit ACTIVE '/dev/centos/root' [35.39 GiB] inherit ACTIVE Original '/dev/vg0/lv0' [112.00 MiB] inherit ACTIVE '/dev/vg0/lv1' [160.00 MiB] inherit ACTIVE Snapshot '/dev/vg0/lv_s' [16.00 MiB] inherit
可以看到,/dev/vg0/lv_s是/dev/vg0/lv0逻辑卷的快照,大小为16M。
[root@centos7 bb]# df -hT | tail -1 /dev/mapper/vg0-lv_s ext4 89M 1.6M 81M 2% /bb
使用df查看挂载的信息,可以看到快照显示的大小其实是逻辑卷的大小。
注意,快照自己能够使用的空间只有16M,我们不能在快照中创建超过总大小的数据文件,某则IO error。
4)快照的作用(备份数据很重要)
一般我们都使用快照来对逻辑卷进行备份。
例如我们mysql的数据默认存放在/var/lib/mysql中,我们就可以将某个逻辑卷挂载到这个目录下,Mysql的数据都会写到这个逻辑卷中。
然后我们在某个时间节点(例如每天凌晨1点,或每星期某个时间)对这个逻辑卷做一个快照。
当我们误删了原逻辑卷中的数据时,我们就可以牺牲某个快照来恢复逻辑卷的数据:
我们将原逻辑卷/dev/vg0/lv0挂载到/aa下,其中存放着如下文件:
[root@centos7 aa]# ls data1 data2 lost+found test
我们创建一个快照:
[root@centos7 aa]# lvcreate -L 12M -n lv_s -s /dev/vg0/lv0 Rounding up size to full physical extent 16.00 MiB Logical volume "lv_s" created. [root@centos7 aa]# lvscan ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit ACTIVE '/dev/centos/root' [35.39 GiB] inherit ACTIVE Original '/dev/vg0/lv0' [112.00 MiB] inherit ACTIVE '/dev/vg0/lv1' [160.00 MiB] inherit ACTIVE Snapshot '/dev/vg0/lv_s' [16.00 MiB] inherit
我们"误删"了原逻辑卷的内容(即/aa下的内容):
[root@centos7 aa]# rm -rf /aa/*
使用/dev/vg0/lv_s快照来恢复数据:
[root@centos7 aa]# lvconvert --merge /dev/vg0/lv_s Delaying merge since origin is open. Merging of snapshot vg0/lv_s will occur on next activation of vg0/lv0.
执行恢复后,需要重启:
[root@centos7 aa]# reboot
重启后,重新挂载(或自动挂载)逻辑卷到/aa:
[root@centos7 ~]# mount /dev/vg0/lv0 /aa [root@centos7 ~]# cd /aa [root@centos7 aa]# ls data1 data2 lost+found test
可以看到所有误删的数据都恢复了。
此时,我们看以下快照:
[root@centos7 aa]# lvscan ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit ACTIVE '/dev/centos/root' [35.39 GiB] inherit ACTIVE '/dev/vg0/lv0' [112.00 MiB] inherit ACTIVE '/dev/vg0/lv1' [160.00 MiB] inherit
可以看到,/dev/vg0/lv_s快照已经不见了(用于恢复逻辑卷数据牺牲了)。
===