zoukankan      html  css  js  c++  java
  • [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快照已经不见了(用于恢复逻辑卷数据牺牲了)。

    ===

  • 相关阅读:
    你最该知道的事(职场)
    C++ OTL MySQL(Windows/Linux) V8.1
    mysql字符串替换
    NYOJ 17 单调递增最长子序列
    IOS Sqlite用户界面增删改查案例
    时间戳工具类
    2014年7月10日,我人生的最重要Upgrade
    Java线程演示样例
    hiho模拟面试题2 补提交卡 (贪心,枚举)
    Android.mk添加本地程序和库的经常使用模版
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12543700.html
Copyright © 2011-2022 走看看