[RH134] 9-LVM

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快照已经不见了(用于恢复逻辑卷数据牺牲了)。

 

===

posted @ 2020-04-01 15:11  风间悠香  阅读(298)  评论(0编辑  收藏  举报